GIS開發(fā):自定義坐標(biāo)系的地圖
自定義坐標(biāo)系的地圖,是能夠根據(jù)坐標(biāo)系的參數(shù),加載地圖的底圖,坐標(biāo)系不僅僅限制于wgs84(EPSG:4326)、webmercator(EPSG:3857),這種常見的坐標(biāo)系。
目前,找到開源的使用比較好的是openlayers和maptalks,借助于proj4.js的開源庫,實現(xiàn)自定義地圖的坐標(biāo)系,加載地圖切片。
openlayers的示例網(wǎng)址:
https://openlayers.org/en/latest/examples/reprojection-by-code.html
自定義坐標(biāo)系,將地圖的坐標(biāo)系設(shè)置成此坐標(biāo)系
proj4.defs('EPSG:XXXX',?'proj4字符串');
ol.proj.proj4.register(proj4);
var?map?=?new?ol.Map({
??????layers:?layers,
??????target:?'map',
??????view:?new?ol.View({
????????center:?center,
????????projection:?'EPSG:XXXX'
??????})
????});
maptalks的示例網(wǎng)站:
https://maptalks.org/examples/cn/tilelayer-projection/proj4js/#tilelayer-projection_proj4js
同樣也是進(jìn)行坐標(biāo)系的定義
// EPSG:3857's proj definition
? ? ?var proj3857 = '+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext ?+no_defs';
? ? ?var proj4 = proj4('WGS84', proj3857);
? ? ?// define a custom projection object
? ? ?var projection = {
? ? ? ?code : 'proj4-merc', ?// code of the projection
? ? ? ?project : function (c) { // from wgs84 to EPSG3857
? ? ? ? ?var pc = proj4.forward(c.toArray());
? ? ? ? ?return new maptalks.Coordinate(pc);
? ? ? ?},
? ? ? ?unproject : function (pc) { // from EPSG3857 to wgs84
? ? ? ? ?var c = proj4.inverse(pc.toArray());
? ? ? ? ?return new maptalks.Coordinate(c);
? ? ? ?}
};
相對來說,maptalks能轉(zhuǎn)換俯仰角,進(jìn)行三維形式的查看,這個和目前二維地圖中百度、高德的效果相近。
mapbox-gl默認(rèn)就支持webmercator的坐標(biāo)系,開源上有改寫了國內(nèi)的cgcs2000的坐標(biāo)系支持,目前還沒能實現(xiàn)自定義坐標(biāo)系的效果。
leaflet中也實現(xiàn)了一個simple坐標(biāo)系的api,對于平面坐標(biāo)系的效果,也能夠直接實現(xiàn)。
https://leafletjs.com/