1 介绍
在地理信息系统(GIS)和导航技术日益发展的今天,我们常常需要处理地理坐标系中的点移动问题。例如,在一个嵌入式系统中,我们需要根据给定的位置偏移来更新坐标。这种需求常见于无人机导航、机器人路径规划或任何需要基于当前位置进行微小调整的应用场景。本文将探讨如何通过一个简单而快速的方法,将给定的笛卡尔坐标系中的位移(以米为单位)转换为新的地理坐标(纬度和经度)。
2 快速而粗略的估计方法
记住一个数就行了:111111
这是什么意思呢?
111,111 米(111.111 公里)约为 1 度(纬度)
上面这个公式,我经常在使用gdal.wrap函数用到,可以近似地把米转为经纬度。之前在rpc校正处理、无人机照片粗校正中用到了这一知识点。
也就是说,如果您的影像位移不大(例如小于几公里),且目标位置远离地理极点,那么可以采用一个快速而粗略的方法来进行估算。
这种方法基于一个有趣的事实:法国人在定义米这一长度单位时,曾将其设定为从赤道到北极的子午线长度的千万分之一。由此推算,大约每纬度一度相当于 111,111 米或 111.111 公里。当然,这一数值是平均值,并且随着地球形状的变化而有所波动。
3 Python 实现
下面是一个简单的 Python 函数实现,它可以根据原点的纬度和指定的米数返回纬度和经度的增量:
from math import cos, radians
def meters_to_lat_lon_displacement(dx, dy, origin_latitude):
# 每度纬度的米数
lat_m_per_deg = 111111
# 根据纬度计算每度经度的米数
lon_m_per_deg = 111111 * cos(radians(origin_latitude))
# 计算新的纬度和经度增量
lat_displacement = dy / lat_m_per_deg
lon_displacement = dx / lon_m_per_deg
return lat_displacement, lon_displacement