WebGIS常用地图投影详解
地图投影的分类很多,世界上目前主流地图都是采用的Web墨卡托投影方式(国际组织称其为3857或900913投影),国内高德和百度地图也是采用的Web墨卡托的投影方式,除了Web墨卡托之外,经纬度投影(简称4326投影)也是比较常用。在进行WebGIS开发的过程中,经常会遇到地理底图basemap和叠加图层overlayer坐标系统不一致的问题,下面对EPSG:3857、EPSG:4326两种地图投影坐标系进行详解。
1.坐标系统分类
坐标系(地理坐标系或投影坐标系)为定义真实世界的位置提供了框架。使用坐标系最关键的问题有两个:一是要了解使用的是何种投影;二是将正确的坐标系信息与数据集相关联。坐标系有两种类型 :地理坐标系和投影坐标系。
GIS 中使用两种常用的坐标系类型:
注:我们常用的经纬度投影(4326)就是一种地理坐标系(球面坐标系),而web墨卡托投影(3857)则是一种投影坐标系(平面坐标系)
以下列出常用的坐标系
2.Web墨卡托投影(3857)
墨卡托投影(Mercator Projection),又名“正轴等角圆柱投影”,荷兰地图学家墨卡托(Mercator)在1569年拟定,假设地球被围在一个中空的圆柱里,其赤道与圆柱相接触,然后再假想地球中心有一盏灯,把球面上的图形投影到圆柱体上,再把圆柱体展开,这就是一幅标准纬线为零度(即赤道)的“墨卡托投影”绘制出的世界地图。
如上图所示,web墨卡托投影得到的平面是一个正方形,赤道作为标准纬线,本初子午线作为中央经线,两者交点为坐标原点,向东向北为正,向西向南为负。南北极在地图的正下、上方,而东西方向处于地图的正右、左。
由于web墨卡托投影将地球视为一个正球体而非椭球体,赤道半径为 6378137.0米,赤道周长为 2*PI*r = 2*20037508.3427892,由此可以推算出web墨卡托投影的坐标范围为:X轴 [-20037508.3427892, 20037508.3427892],Y轴 [-20037508.3427892, 20037508.3427892]。
值得注意的是,web墨卡托投影在两极附近是趋于无限值得,因此它并没完整展现整个世界。web墨卡托投影对应的地理经度的取值范围是[-180,180],而通过纬度取值范围为[20037508.3427892,20037508.3427892]反计算可得到纬度值为85.05112877980659。因此纬度取值范围是[-85.05112877980659,85.05112877980659]。因此,web墨卡托投影在地理坐标系(经纬度)中对应的范围是:最小地理坐标(-180,-85.05112877980659),最大地理坐标(180, 85.05112877980659)。即web墨卡托投影在Y轴方向带来0.33%的误差
3.经纬度投影(4326)
不同于web墨卡托投影的平面坐标范围,经纬度投影采取地理坐标系,因此坐标范围为:经度(-180,180)、纬度(-90,90),没有出现空间上的损失。如果按照地理坐标系(lon,lat)的方式直接将地球展绘在平面上,由于经度范围(-180,180)是纬度范围(-90,90)的两倍,因此在平面上可以得到一个宽高比为2:1的矩形,与web墨卡托投影的正方形平面不同。
4.栅格瓦片与地图投影
在WebGIS开发中,第一步就是利用前端地图js框架定义空间参考(坐标系),并调用地理底图(basemap),而地理底图往往采用栅格瓦片地图(最典型的是WMTS)的形式进行调用,由于WMTS在服务切片生成时便选定了对应的坐标系统,因此我们需要在调用时认清框架使用的坐标系是否与WMTS服务保持一致。
值得注意的是,标准的OGC-WMTS默认采用的空间参考为EPSG:3857(Web墨卡托),因此诸多webgis框架默认的瓦片地图类默认的也是Web墨卡托投影(如arcgis的WebTiledLayer)。如果发布的WMTS服务是采用EPSG:4326等其他类型的投影,则需要人为地去调整瓦片加载配置,以完成WMTS图层的加载。这里以天地图的EPSG:4326投影的WMTS服务为例,解释瓦片配置信息。
var tileInfo = new TileInfo({
dpi: 90.71428571427429,
rows : 256,
cols : 256,
compressionQuality : 0,
origin : {
x : -180,
y : 90
},
spatialReference : {
wkid : 4326
},
lods : [
{level : 2,levelValue: 2, resolution : 0.3515625, scale : 147748796.52937502},
{level : 3,levelValue: 3, resolution : 0.17578125, scale : 73874398.264687508},
{level : 4,levelValue: 4,resolution : 0.087890625, scale : 36937199.132343754},
{level : 5,levelValue: 5, resolution : 0.0439453125, scale : 18468599.566171877},
{level : 6,levelValue: 6, resolution : 0.02197265625, scale : 9234299.7830859385},
{level : 7,levelValue: 7, resolution : 0.010986328125, scale : 4617149.8915429693},
{level : 8,levelValue: 8, resolution : 0.0054931640625, scale : 2308574.9457714846},
{level : 9,levelValue: 9, resolution : 0.00274658203125, scale : 1154287.4728857423},
{level : 10,levelValue: 10, resolution : 0.001373291015625, scale : 577143.73644287116},
{level : 11,levelValue: 11, resolution : 0.0006866455078125, scale : 288571.86822143558},
{level : 12,levelValue: 12, resolution : 0.00034332275390625, scale : 144285.93411071779},
{level : 13,levelValue: 13, resolution : 0.000171661376953125, scale : 72142.967055358895},
{level : 14,levelValue: 14, resolution : 8.58306884765625e-005, scale : 36071.483527679447},
{level : 15,levelValue: 15, resolution : 4.291534423828125e-005, scale : 18035.741763839724},
{level : 16,levelValue: 16, resolution : 2.1457672119140625e-005, scale : 9017.8708819198619},
{level : 17,levelValue: 17, resolution : 1.0728836059570313e-005, scale : 4508.9354409599309},
{level : 18,levelValue: 18, resolution : 5.3644180297851563e-006, scale : 2254.4677204799655},
{ level: 19,levelValue: 19, resolution: 2.68220901489257815e-006, scale: 1127.23386023998275 },
{ level: 20,levelValue: 20, resolution: 1.341104507446289075e-006, scale: 563.616930119991375 }
]
});
5.地图投影与地图打印
在WebGIS开发过程中,针对制图结果我们往往需要提供地图打印的功能,地图打印主要分为基于地图服务器的后端打印和基于HTML5的前端打印两种。前者多依靠arcgis server、geoserver等地图服务器进行打印,这里就涉及到坐标系的问题,常常存在地图服务可以正常显示却无法正确打印的问题;而后者则是面向客户端“所见即所得”的打印,只要地图能展示成果,便可以完成打印。下面以最常用的arcgis webgis体系为例进行地图打印的总结。
这里主要阐述地理底图(瓦片地图服务)的打印问题,针对瓦片地图服务,arcgis api for js 3.x 主要提供了两种图层类:ArcGISTiledMapServiceLayer和WebTiledLayer。
相关参考:https://blog.csdn.net/xiaohan2826/article/details/49510229
https://blog.csdn.net/liuxu841911548/article/details/78569519
http://www.cnblogs.com/suyanteng/p/4895132.html