切图算法简述1——WGS84坐标系下XYZ(WMTS)、TMS切片算法策略

更新时间:2023-06-23 06:32:11 阅读: 评论:0

切图算法简述1——WGS84坐标系下XYZ(WMTS)、TMS切
⽚算法策略
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace AlgorithmUtil
{
public class GlobalGRS
{
/// <summary>
/// ⽡⽚分辨率
/// </summary>
/// <param name="width">⽡⽚⼤⼩</param>
达利通留学/// <param name="zoom">地图层级</param>
/// <returns></returns>
public double UnitsPerPixel(int width,int zoom)
{
return 180.0 / width*1.0 / Math.Pow(2.0,zoom);
}
/// <summary>
/// 通过列序列号、zoom层级获取xyz(WMTS)服务⽡⽚左上⾓经度
/// </summary>
/// <param name="column">列序列号(x序列)</param>
/// <param name="zoom">地图层级</param>
/// <returns></returns>
public double XYZLongitude(int column,int zoom)
{
return (column * 180.0) / Math.Pow(2.0, zoom) - 180.0;
}
/
// <summary>
/// 通过⾏序列号、zoom层级获取xyz(WMTS)服务⽡⽚左上⾓纬度
/// </summary>
/// <param name="row">⾏序列号(y序列)</param>
/// <param name="zoom">地图层级</param>
/// <returns></returns>
public double XYZLatitude(int row, int zoom)
{
double latitude = (row * 180.0) / Math.Pow(2.0, zoom) - 90.0;
return -latitude;
}
/
// <summary>
/// 通过坐标经度、zoom层级获取xyz(WMTS)服务⽡⽚列序列号(x序列)
/// </summary>
/// <param name="longitude">经度</param>
/// <param name="zoom">地图层级</param>
/// <returns>列序列号(x序列)</returns>
/// <returns>列序列号(x序列)</returns>
public int XYZColumn(double longitude, int zoom)
{
return (int)Math.Floor((longitude + 180.0) / 180.0 * Math.Pow(2, zoom));
}
exile/
// <summary>
/// 通过坐标纬度、zoom层级获取xyz(WMTS)服务⽡⽚⾏序列号(y序列)
/// </summary>
/// <param name="latitude">纬度</param>
/// <param name="zoom">地图层级</param>
/// <returns>⾏序列号(y序列)</returns>
public int XYZRow(double latitude, int zoom)
{
return (int)Math.Floor((-latitude + 90) / 180.0 * Math.Pow(2, zoom));
}
/// <summary>
/
// 获取xyz(WMTS)服务地图层级
/// </summary>
/// <param name="width">⽡⽚⼤⼩</param>
/// <param name="imageWidth">地图视窗宽度</param>
/// <param name="maxX">最⼤经度</param>
/// <param name="minX">最⼩纬度</param>
/// <returns></returns>
public int XYZZOOM(int width, int imageWidth, double maxX, double minX)
{
return (int)Math.Ceiling(Math.Log(180.0 * imageWidth / width / (maxX - minX), 2));        }
/// <summary>
/
// 通过坐标经纬度、zoom层级获取xyz(WMTS)服务⽡⽚⾏列号(xy)
/// </summary>
/// <param name="longitude">经度</param>
/// <param name="latitude">纬度</param>
/// <param name="zoom"></param>
/// <returns></returns>
public TileIndexInfo XYZTileIndex(double longitude,double latitude,int zoom)
{
int column = XYZColumn(longitude, zoom);
int row = XYZRow(latitude, zoom);
return new TileIndexInfo() { Column=column,Row=row };
}
/// <summary>
/// 获取xyz(WMTS)服务⽡⽚左上⾓经纬度
/// </summary>
/// <param name="column">列序号(x序列)</param>
/// <param name="row">⾏序号(y序列)</param>
/// <param name="zoom">地图层级</param>
/// <returns></returns>
public LatLngInfo XYZLatLng(int column,int row,int zoom)
{
double lon = XYZLongitude(column, zoom);
double lat = XYZLatitude(row, zoom);
return new LatLngInfo()
{
Lat = lat,
Lng = lon
};
}
/// <summary>
/// 获取TMS服务⽡⽚左下⾓经度
/// </summary>
/// <param name="column">列序号(x序列)</param>
/
// <param name="column">列序号(x序列)</param>
/// <param name="zoom">地图层级</param>
/// <returns></returns>
public double TMSLongitude(int column, int zoom)
{
return (column * 180.0) / Math.Pow(2.0, zoom) - 180.0;
}
/// <summary>
/// 获取TMS服务⽡⽚左下⾓纬度
/// </summary>
/// <param name="row">⾏号(y序列)</param>
/
// <param name="zoom">地图层级</param>
/// <returns></returns>
public double TMSLatitude(int row, int zoom)
{
double num = (double)(row * 180) / Math.Pow(2.0, (double)zoom) - 90.0;
return num;
}
/// <summary>
/// 获取TMS服务⽡⽚列号(x序列)
/// </summary>
/// <param name="longitude">经度</param>
/
// <param name="zoom">地图层级</param>
/// <returns></returns>
public int TMSColumn(double longitude,int zoom)大马士革机场爆炸
{
return (int)Math.Floor((longitude + 180.0) / 180.0 * Math.Pow(2, zoom));
}
/// <summary>
/// 获取TMS服务⽡⽚⾏号(y序列)
/// </summary>
/// <param name="latitude">纬度</param>
/// <param name="zoom">地图层级</param>
/
// <returns></returns>
public int TMSRow(double latitude,int zoom)
{
return (int)Math.Floor((latitude + 90) / 180.0 * Math.Pow(2, zoom));
}
/// <summary>
/// 获取TMS服务地图层级
/// </summary>
/// <param name="width">⽡⽚⼤⼩</param>
/// <param name="imageWidth">地图视窗宽度</param>
/// <param name="maxX">最⼤经度</param>shot是什么意思
/
// <param name="minX">最⼩纬度</param>
/// <returns></returns>
public int TMSZOOM(int width,int imageWidth,double maxX,double minX)
{
return (int)Math.Ceiling(Math.Log(180.0 * imageWidth / width / (maxX - minX),2));        }
/// <summary>
/// 获取TMS服务地图⽡⽚序列号(xy)
/// </summary>
/// <param name="longitude">经度</param>
/// <param name="latitude">纬度</param>
/// <param name="zoom">地图层级</param>
/
2016年6月英语四级真题
// <returns></returns>
public TileIndexInfo TMSTileIndex(double longitude, double latitude, int zoom)
dtmf{
int column = TMSColumn(longitude, zoom);
int column = TMSColumn(longitude, zoom);
int row = TMSRow(latitude, zoom);
return new TileIndexInfo() { Column = column, Row = row };
}
/// <summary>
/// 获取TMS服务⽡⽚左下⾓经纬度
/// </summary>
/
// <param name="column"></param>
/// <param name="row"></param>
/// <param name="zoom"></param>
/// <returns></returns>
public LatLngInfo TMSLatLng(int column, int row, int zoom)
{
double lon = TMSLongitude(column, zoom);厦门英语
double lat = TMSLatitude(row, zoom);
return new LatLngInfo()
{
Lat = lat,
Lng = lon
};whatever happens
}
}
public class LatLngInfo
{
public double Lat { get; t; }
public double Lng { get; t; }
}
public class TileIndexInfo
{
public int Column { get; t; }
public int Row { get; t; }
public override string ToString()
{
return string.Format("{0},{1}", Column, Row);
}
}
}
这⼉就仅仅将天地图经纬度切⽚策略下的⽡⽚进⾏测试,当然GeoServer 发布的WMTS和TMS都测试通过了(涉及到⼀些使⽤权隐私,就不贴代码了)
var g1 = new GlobalGRS();
TileIndexInfo tmsTileIndex = g1.TMSTileIndex(lon,lat, zoom);
TileIndexInfo xyzTileIndex = g1.XYZTileIndex(lon,lat, zoom);
Console.WriteLine("v/DataServer?T=img_c&x="+ xyzTileIndex.Column+ "&y="+ xyzTileIndex.Row + "&l="+(zoom+1)+"&tk=71d235688d12e7
//{IpServer}是georver所在服务器ip+port
Console.WriteLine("{IpServer}/georver/gwc/rvice/wmts/rest/guangxi:img_c/raster/EPSG:4326/EPSG:4326:" + +zoom + "/" + xyzTileIndex.Row + "/" + xyz
Console.WriteLine("{IpServer}/georver/gwc/rvice/tms/1.0.0/guangxi%3Aimg_c@EPSG%3A4326@png/"
ordinaryme too什么意思+ zoom + "/" + tmsTileIndex.Column + "/" + tmsTileIndex.Row + ".png");

本文发布于:2023-06-23 06:32:11,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/154544.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:层级   地图   获取
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图