麻辣GIS微信平台

更多 GIS 干货

微信关注不错过

「GIS教程」经纬度按米偏移怎么算新坐标?

最近做 WebGIS 和轨迹处理的时候,小编又碰到一个老问题,手里有一个 WGS 84 经
纬度点,想沿正东、正北方向各平移几百米,得到新坐标。解决这种问题的一种方法是使用Haversine 公式(半正矢公式)能算两点距离,然后反过来按距离和方位计算出新点,但有没有更轻量的办法呢?小编今天简单做个总结。

首先明白一个基础概念,经纬度是球面上的角度,单位是度,偏移却是米,两者不能直接运算。下面几种思路,按实现难度从低到高排列,大家可按场景选用。

111111 平面近似法

这是小编最推荐日常方案,纬度方向大约 111111 米等于 1 度;经度方向在同一纬度上,大约 111111 乘以 cos纬度 米等于 1 度。

PS:这个数字的来源也比较有意思,当年法国定义米的时候,从赤道沿巴黎子午线到北极的距离正好是 10 的 7 次方米,所以 10 的 7 次方除以 90,约等于 111111.1,正好对应 1 度纬度。经度圈会随纬度变窄,所以要乘 cos纬度。公式如下:

新纬度 = lat + dn / 111111
新经度 = lon + de / (111111 × cos(lat))

这个方法偏移不超过几公里、非极地,误差多在 10 米上下,方便嵌入式和前端实时计算都够用。

地球半径换算法

和 111111 法本质相同,只是把常数换成 WGS 84 长半轴 R 取 6378137 米,先把米偏移换算成弧度,再加回度数。低纬度两种写法差别很小,任选其一。Python实现:

from math import cos, radians, pi

R = 6378137
d_lat = dn / R
d_lon = de / (R * cos(radians(lat)))
new_lat = lat + d_lat * 180 / pi
new_lon = lon + d_lon * 180 / pi

111111 相当于把 R 和弧度转度数合并成了一个好记的整数,算力更省;地球半径写法物理含义更直观,适合需要和椭球参数对齐的项目。

UTM 投影偏移法

偏移再大、又希望平面加减更严谨,可以先投影再偏移。思路是:经纬度转当地 UTM,在平面坐标上加 x、y 米偏移,再 UTM 转回经纬度。QGIS、PostGIS、PROJ、ArcGIS 的投影工具链都能完成。

优点是米制偏移在投影平面上就是真平面运算,方向感清晰。缺点是跨 UTM 带、跨带号边界时要格外小心,否则点会突然跳很远。适合已知工作区域、偏移量在单带内的工程场景。

Vincenty 直接解算

需要椭球级精度时,Vincenty 直接公式是测绘里常用的严格解算,在 WGS 84 椭球上按起点、方位角和距离推终点。比平面近似和简单球面公式都准,但实现复杂,要处理迭代收敛和极少数不收敛的情况。

做测绘级成果建议这种方法,可以使用 PROJ、GeographicLib 或各 GIS 软件内置算法。

PostGIS ST_Project

数据库侧最省心的做法。PostGIS 提供 ST_Project 函数,传入起点几何、方位角和距离,直接返回新点。适合数据已经在 PostGIS 里、偏移逻辑要写在 SQL 或存储过程中的场景。底层仍是球面或椭球计算,精度和参数由 PostGIS 版本和函数选项决定。

高精度每度米数多项式

2024 年社区里有人贴了更细的每度米数公式,把纬度对经度圈半径的影响拆成 cos 的多次项,能再弥补一点经度方向误差。适合对近似常数不满意、又不想上完整 Vincenty 的折中场景。

小编觉得,小于 1 公里的平移,111111 方案已经比很多业务本身的坐标噪声还小,不必过早复杂化。小编之前写《「GIS百科」经纬度小数点后面留几位才够用?》时也提过,坐标精度本身就有物理上限。

总结

小范围、要轻快,首选 111111 平面近似或地球半径换算;区域明确、偏移稍大,走 UTM 投影;要方位距离或高精度,用球面公式、Vincenty 或 PostGIS。

如果你有更顺手的实现或踩坑经验,欢迎留言补充。

参考:https://gis.stackexchange.com/questions/2951/algorithm-for-offsetting-latitude-longitude-by-some-amount-of-meters

相关阅读

麻辣GIS-Sailor

作者:

GIS爱好者,学GIS,更爱玩GIS。

声明

1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。

2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。

手机阅读
公众号关注
知识星球
手机阅读
麻辣GIS微信公众号关注
最新GIS干货
关注麻辣GIS知识星球
私享圈子
没有下文

留言板(小编看到第一时间回复)