美文网首页
墨卡托投影 Mercator projection

墨卡托投影 Mercator projection

作者: N2ED | 来源:发表于2019-06-15 23:30 被阅读0次

圆柱面投影

圆柱面投影
  • 坐标变换

x = \lambda - \lambda_0 , \ \ y=\tan\phi

正轴墨卡托投影(正球模型)

横坐标x = \lambda - \lambda _0

在纬度\phi处,经线实际周长为 L_0 = 2\pi R\cdot\cos\phi

在图上的周长为L=2\pi\cdot R

在纬度\phi处,变换因子k(\phi)=L/L_0=1/\cos\phi=\sec\phi

为了保证等角投影,要求y方向上有同样的变换因子:
\left \{ \begin{array}{c} y_0 = \phi\cdot R = R\cdot\int_0^\phi 1d\phi \\ \ \\ y = R\cdot h(\phi) =R\cdot\int_0^\phi h'(\phi)d\phi \\ \ \\ {y\over y_0} =\lim_{\Delta\phi\to\phi} {h(\phi + \Delta\phi)-h(\phi)\over (\phi+\Delta\phi)-\phi} =h'(\phi)= k(\phi)=\sec\phi \end{array} \right .

y = R\cdot\int_0^\phi \sec\phi \ d\phi = R\cdot ln|\sec\phi + \tan\phi| =R\cdot ln|\tan({\pi\over 4}+{|\phi|\over 2})|

最后坐标变换
x = \lambda, \ \ y=ln|\tan({\pi\over 4}+{|\phi|\over 2})|
y=\pi时解得\phi=85.0511287798066°

正轴墨卡托投影(椭球模型)

参数定义

  • 长轴 a,地球赤道半径为 6377563.396 m
  • 短轴 b,地球两级半径为 6356256.910 m
  • 离心率 e=\sqrt{a^2-b^2 \over a^2}

坐标变换

x = \lambda\\ \ \\ y=ln[\tan({\pi\over 4}+{\phi\over 2})({1-e\sin\phi \over 1 + e\sin\phi})^{e \over 2}] \\ \ \\ k = \sec\phi\sqrt{1-e^2\sin^2\phi}

Web 墨卡托

  • 定义

    Web Mercator 坐标系使用的投影方法不是严格意义的墨卡托投影,而是一个被 EPSG(European Petroleum Survey Group)称为伪墨卡托的投影方法,这个伪墨卡托投影方法的大名是 Popular Visualization Pseudo Mercator,PVPM。因为这个坐标系统是 Google Map 最先使用的,或者更确切地说,是Google 最先发明的。在投影过程中,将表示地球的参考椭球体近似的作为正球体处理(正球体半径 R = 椭球体半长轴 a)。后来,Web Mercator 在 Web 地图领域被广泛使用,这个坐标系就名声大噪。尽管这个坐标系由于精度问题一度不被GIS专业人士接受,但最终 EPSG 还是给了 WKID:3857。

    以整个世界范围,赤道作为标准纬线,本初子午线作为中央经线,两者交点为坐标原点,向东向北为正,向西向南为负。

    X轴:由于赤道半径为6378137米,则赤道周长为2PIr = 20037508.3427892,因此X轴的取值范围:[-20037508.3427892,20037508.3427892]。

    Y轴:由墨卡托投影的公式可知,当纬度φ接近90°时,y值趋向于无穷。

    为了方便实现一级地图在长度上一分为二,也就是在高一级精度上用4张切片地图显示,最好将xy轴显示的取值范围统一,为此Y轴的取值范围也限定在[-20037508.3427892,20037508.3427892]之间。

    通过计算纬度最大值就是85.0511287798066°

    另外值得一提的是,现在网上大部分地图瓦片瓦片都是基于Web墨卡托的,就是第0层1一张图片,第1层2*2张图片...,如果使用OpenLayers可以很好的调用公共服务器

  • 编号

    EPSG:3857
    EPSG:102100
    EPSG:900913 (谷歌自己起的,没有被EPSG接受,900913=google)

  • 转换方法

    //经纬度转web墨卡托
    coord lonLat2WebMercator(coord lonLat)
    {
        dvec3  mercator;
        double x = lonLat.x *20037508.34/180;
        double y = log(tan((90+lonLat.y)*PI/360))/(PI/180);
        y = y *20037508.34/180;
        mercator.x = x;
        mercator.y = y;
        return mercator ;
    }
    //Web墨卡托转经纬度
    coord webMercator2lonLat( coord   mercator )
    {
        dvec3 lonLat;
        double x = mercator.x/20037508.34*180;
        double y = mercator.y/20037508.34*180;
        y= 180/PI*(2*atan(exp(y*PI/180))-PI/2);
        lonLat.x = x;
        lonLat.y = y;
        return lonLat;
    }
    

相关文章

网友评论

      本文标题:墨卡托投影 Mercator projection

      本文链接:https://www.haomeiwen.com/subject/jtzifctx.html