1 //经纬度转Wev墨卡托 2 dvec3 CMathEngine::lonLat2WebMercator(dvec3 lonLat) 3 { 4 dvec3 mercator; 5 double x = lonLat.x *20037508.34/180; 6 double y = log(tan((90+lonLat.y)*PI/360))/(PI/180); 7 y = y *20037508.34/180; 8 mercator.x = x; 9 mercator.y = y;10 return mercator ;11 }12 //Web墨卡托转经纬度13 dvec3 CMathEngine::WebMercator2lonLat( dvec3 mercator )14 {15 dvec3 lonLat;16 double x = mercator.x/20037508.34*180;17 double y = mercator.y/20037508.34*180;18 y= 180/PI*(2*atan(exp(y*PI/180))-PI/2);19 lonLat.x = x;20 lonLat.y = y;21 return lonLat;22 }
精度未知,肯定存在精度误差。
Web墨卡托投影坐标系:
以整个世界范围,赤道作为标准纬线,本初子午线作为中央经线,两者交点为坐标原点,向东向北为正,向西向南为负。
X轴:由于赤道半径为6378137米,则赤道周长为2*PI*r = 2*20037508.3427892,因此X轴的取值范围:[-20037508.3427892,20037508.3427892]。
Y轴:由墨卡托投影的公式可知,同时上图也有示意,当纬度φ接近两极,即90°时,y值趋向于无穷。
这是那些“懒惰的工程师”就把Y轴的取值范围也限定在[-20037508.3427892,20037508.3427892]之间,搞个正方形。
懒人的好处,众所周知,事先切好静态图片,提高访问效率云云。俺只是告诉你为什么会是这样子。因此在投影坐标系(米)下的范围是:最小(-20037508.3427892, -20037508.3427892 )到最大 (20037508.3427892, 20037508.3427892)。