在地图上移动:将米转换为经纬度

文摘   2024-10-01 18:01   广西  


1 介绍

在地理信息系统(GIS)和导航技术日益发展的今天,我们常常需要处理地理坐标系中的点移动问题。例如,在一个嵌入式系统中,我们需要根据给定的位置偏移来更新坐标。这种需求常见于无人机导航、机器人路径规划或任何需要基于当前位置进行微小调整的应用场景。本文将探讨如何通过一个简单而快速的方法,将给定的笛卡尔坐标系中的位移(以米为单位)转换为新的地理坐标(纬度和经度)。


2 快速而粗略的估计方法

记住一个数就行了:111111

这是什么意思呢?

111,111 米(111.111 公里)约为 1 度(纬度)

上面这个公式,我经常在使用gdal.wrap函数用到,可以近似地把米转为经纬度。之前在rpc校正处理、无人机照片粗校正中用到了这一知识点。

也就是说,如果您的影像位移不大(例如小于几公里),且目标位置远离地理极点,那么可以采用一个快速而粗略的方法来进行估算。

这种方法基于一个有趣的事实:法国人在定义米这一长度单位时,曾将其设定为从赤道到北极的子午线长度的千万分之一。由此推算,大约每纬度一度相当于 111,111 米或 111.111 公里。当然,这一数值是平均值,并且随着地球形状的变化而有所波动。

经度和纬度的变化率
纬度变化:对于纬度而言,每一度的变化几乎恒定为 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

4 结论

这种方法在短距离内的精度是可以接受的,并且计算速度快,适合用于嵌入式系统等对实时性要求较高的场合。
然而,需要注意的是,对于大范围或高精度应用,这种方法可能会引入较大的误差,此时建议采用更精确的模型或公式。























remote sensing
一个专注于测绘、地信、遥感的公众号
 最新文章