在GIS中,常會(huì)遇到不同投影坐標(biāo)系之間的轉(zhuǎn)換,下面以JavaScript對(duì)轉(zhuǎn)換的方法進(jìn)行實(shí)現(xiàn):
一、 經(jīng)緯度轉(zhuǎn)網(wǎng)絡(luò)墨卡托
方法一和方法二轉(zhuǎn)換的結(jié)果有極小的差別,但都是正確的。
//方法一
latLng2WebMercator: function(lng, lat){
//[114.32894, 30.585748]
var earthRad = 6378137.0;
var x = lng * Math.PI / 180 * earthRad;
var a = lat * Math.PI / 180;
var y = earthRad / 2 * Math.log((1.0 + Math.sin(a)) / (1.0 - Math.sin(a)));
return [x, y]; //[12727039.383734727, 3579066.6894065146]
}
//方法二
latLng2WebMercator2 : function(lng, lat){
var x = lng *20037508.34/180;
var y = Math.log(Math.tan((90+lat)*Math.PI/360))/(Math.PI/180);
y = y *20037508.34/180;
return [x, y];
}
二、網(wǎng)絡(luò)墨卡托轉(zhuǎn)經(jīng)緯度
webMercator2LngLat: function(x, y) {//[12727039.383734727, 3579066.6894065146]
var lng = x / 20037508.34 * 180;
var lat = y / 20037508.34 * 180;
lat = 180 / Math.PI * (2 * Math.atan(Math.exp(lat * Math.PI / 180)) - Math.PI / 2);
return [lng, lat]; //[114.32894001591471, 30.58574800385281]
}
以上轉(zhuǎn)換方法的結(jié)果經(jīng)實(shí)測(cè)都是正確的,只需根據(jù)需要用其他語言實(shí)現(xiàn)即可。
參考文檔:
http://blog.csdn.net/shaxiaozilove/article/details/54908569
http://malagis.com/mercator-longitude-latitude.html
https://www.cnblogs.com/yhlx125/p/3863748.html
https://www.cnblogs.com/DHUtoBUAA/p/6706642.html
http://blog.csdn.net/ryfdizuo/article/details/20793669(重要)
https://en.wikipedia.org/wiki/Scale_(map)
http://blog.csdn.net/williham/article/details/8496153
http://blog.csdn.net/witch_soya/article/details/7597598
http://blog.csdn.net/cleverysm/article/details/2121633(墨卡托投影實(shí)現(xiàn))