墨卡托投影 Mercator projection

圆柱面投影

圆柱面投影
  • 坐标变换

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

横坐标

在纬度处,经线实际周长为

在图上的周长为

在纬度处,变换因子

为了保证等角投影,要求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 .

最后坐标变换

当 时解得85.0511287798066°

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

参数定义

  • 长轴 a,地球赤道半径为 6377563.396 m
  • 短轴 b,地球两级半径为 6356256.910 m
  • 离心率

坐标变换

  • 数学太差,放弃治疗,以下来自维基百科

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)