地理知识:墨卡托坐标系

1 介绍

  • 等角圆柱形地图投影法
    • 假设地球被围在一个中空的圆柱里,其赤道与圆柱相接触,然后再假想地球中心有一盏灯,把球面上的图形投影到圆柱体上,再把圆柱体展开,这就是一幅标准纬线为零度(即赤道)的“墨卡托投影”绘制出的世界地图。

  • 在以此投影法绘制的地图上,经纬线于任何位置皆垂直相交
    • ——>使世界地图可以绘制在一个长方形上。
  • 大陆轮廓投影后的角度和形状不变(即等角)
    • “等角”也保证了方向和相互位置的正确性
      • ——>因此在航海和航空中常常应用
  • 墨卡托投影会使面积产生变形,极点的比例甚至达到了无穷大。
  • 经线间隔相同,纬线间隔从赤道向两级逐渐增大。

 2 特点

  • 原来的经线都汇聚于极点,纬度愈高经线的间距愈小
    • 而在墨卡托投影上,经线是间隔相等的平行直线
  • 地球表面上假想的各纬线间隔是相等的
    • 而在墨卡托投影上纬线间隔由赤道向两极逐渐扩大
  • 墨卡托投影上经、纬线均为平行直线而且经纬线之间互相正交
  • 图上能正确表示航线与经线的夹角,例如航线在地球上与经线的夹角为15°,图上也表示为15°;
  • 比例尺随纬度而变化,在一张地图上纬度不同,同一距离的比例尺也不同,不能比较面积。

下图是同样面积的圆在不同纬度的大小

3 Python 经纬度和墨卡托距离互换

 摩卡托坐标转经纬度坐标 - 鲲鹏数据在线工具 (site-digger.com)

3,1 墨卡托转经纬度

def Webmercater2latlon(mer_x,mer_y):
    lon_x=mer_x/20037508.34*180
    lon_y=mer_y/20037508.34*180
    
    lon_y=180/math.pi*(2*math.atan(math.exp(lon_y*math.pi/180))-math.pi/2)
    
    return(lon_x,lon_y)

Webmercater2latlon(13416225.028537776, 3555070.4333424848)
#(120.51999999999998, 30.400000000000016)

3.2 经纬度转墨卡托

def lonlat_to_Mercator_(lon,lon_y):
    x=lon*20037508.34/180
    y=math.log(math.tan((90 + lon_y) * math.pi / 360)) / (math.pi / 180)
    y=y*20037508.34/180    
    return x,y
lonlat_to_Mercator_(120.52,30.40)
#(13416225.028537776, 3555070.4333424848)

4 WebMercater

  • Google基于墨卡托投影设计了 Web墨卡托投影 (Web Mercator)
    • 将基于椭球体的墨卡托投影简化为“正球体”,半球取WGS84椭球体的长半轴 6378137 m
  • 由于墨卡托圆柱投影的方式必然导致当纬度φ接近两极,即90°时,投影后平面坐标的Y值趋向于无穷大。
    • 但沿赤道展开的X轴的范围是固定的,即 [-πr,πr] = [-20037508.342789244, 20037508.342789244] 。
    • 为了让投影后的平面能正好在一个正方形内表示,即让投影后的Y轴范围也是[-20037508.342789244,20037508.342789244],反算出纬度的限制范围约为:[-85.06,85.06]。
  • 因为正球体的简化,导致Web墨卡托并非和标准的墨卡托投影一样保持严格的等角(Conformal),而是近似等角

4.1 应用

在一个相对较小的区域,如城市城区,Web Mercator投影下的距离和Haversine公式计算出的地表距离之间的误差会相对较小。这是因为在小尺度上,地球的曲率产生的误差并不显著。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
和其他变量,并进入一个无限循环。在循环中,我们根据玩家的输入和游戏状态在 ArcGIS 中定义墨卡托投影的坐标系可以通过以下步骤: 1. 打开 ArcMap 软件,更新角色、小怪和子弹的状态,然后将游戏画面显示在屏幕上。如果角色的选择一个新建的地图文档或打开一个已有的地图文档。 2. 在 ArcMap 软件的血量为0,就调用GameOver函数显示游戏结束。 最后,我们在WinMain函数中调用GameLoop函数工具栏中选择“自定义”菜单,选择“ArcMap 选项”。 3. 在“ArcMap 选项即可开始游戏,代码如下: ```c++ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASS wc = {0}; wc.lpfnWndProc = WindowProc”对话框中,选择“数据框”选项卡,在“坐标系统”下拉菜单中选择“投影; wc.hInstance = hInstance; wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wc.lpsz”。 4. 在“投影”选项卡中,选择“预定义”按钮,然后在列表框中找到“ClassName = szClassName; if (!RegisterClass(&wc)) { MessageBox(0, "Window Registration Failed!", "Error!",World_Mercator”墨卡托投影。 5. 点击“确定”按钮,ArcMap 将自动将数据框的 MB_ICONEXCLAMATION | MB_OK); return 0; } HWND hwnd = CreateWindow(szClassName, "WinAPI坐标系统设置为墨卡托投影的坐标系统。 6. 如果需要对已有的图层进行投影转", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInstance, NULL换,可以在图层属性中,选择“坐标系”选项卡,然后选择“预定义”按钮,选择); if (hwnd == NULL) { MessageBox(0, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK); return 0; } ShowWindow(hwnd, nCmdShow); GameLoop(hwnd); return 0“World_Mercator”墨卡托投影即可。 注意:在定义墨卡托投影时需要注意投影的; } ``` 这样,我们就完成了一个简单的打怪小游戏。完整代码如下:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UQI-LIUWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值