MapBox的定位就是是制作酷炫的地图,其重点目标在于如何在it的层次上进行探索,而不同的数据格式、不同的参考系、不同的投影是在gis层次上的工作。Mapbox简单的选择了3857作为唯一参考基准,把全部注意力关注于可视化展示与交互之上。
因此 BINGGO!~,MapBox不支持别的坐标系。
从github的issue中不难看出,重投影这个需求,被很多人要求,且Openlayers,Leaflet等已很好地支持此功能,但是Mapbox似乎并没有想、甚至感觉是完全不想要去开发这个功能。
目前地图厂商提供的主流切片方式一般有两种EPSG:4326和EPSG:3857,那么如果一定要做投影变换的话,我们需要考虑的难点在于哪里?首先我们需要看看这两者的区别。
EPSG4326 vs EPSG3857
EPSG:4326
4326的核心在于WGS84的地球椭球,以256的像素大小进行切割就形成了若干的切片,其z=1时的切片如图所示。
注意对于4326而言,我们使用到的坐标单位是度,其坐标呈现的方式是经纬度。
EPSG:3857
3857是与web地图息息相关的,为了更方便的使用,其将WGS84的椭球改成了圆球,大大减少了数据处理的难度,Google/Bing/OpenStreetMap/高德/arcserver都采用了这种方式进行地图的呈现。
对于3857而言,我们看到的是米,是经过投影之后的平面坐标。
转换
思路1-切片替换
目前在线制图平台依赖于mapbox,那么Mapbox就是我们的基础参考,其请求中国的切片(x=3,y=1, z=2),经过Tile->米->经纬度->Tile,得到EPSG:4326下的中国切片(x=0, y=0, z=2),然后请求放置到mapbox的瓦片中。
能够发现由于切片的方式不同,两者无法匹配;同时4326所切的切片数量小于3857所切的切片,其中必然存在缺失。
切片替换存在着无法解决的冲突,那么为什么这里还要提出来呢?因此当缩放等级足够大的时候,两个参考系统下生成的瓦片代码是一致的。
思路2-修改MapBox底层,令其支持4326投影
额😖😖😖😖😖,太难了。但是如果对经纬度投影和墨卡托投影足够理解,修改起来并不苦难。如果一定要使用服务商提供的EPSG:4326的切片,这里可以参考CGCS2000-MapBox进行MapBox的底层修改。
总结
作为基础底图的话,目前我收集到的EPSG:4326仅存在于天地图(同时天地图支持EPSG:3857的切片),特殊的还有百度地图的切片,其Z从1开始,在最高级就把地图分为四块瓦片;XY的原点在经度为0纬度位0的位置,X从左向右,Y从下向上。
目前,对于在线制图平台而言,所有用户的大于20MB数据均要求EPSG:3857的方式入库,并以EPSG:3857的方式进行切图,小于20MB的数据可以以EPSG:3857的方式利用geojson-vt进行前端切图。
与Mapbox的思路一致,可以接入EPSG:4326的切片并不能算得上一个足够吸引人的功能,当然这依然取决于我们是要做插座,还是要做灯泡。