Haversine公式通过经纬度计算两点距离
时间: 2023-08-30 17:07:24 浏览: 77
Haversine公式是一种常用的方法,通过经纬度计算地球上两点之间的距离。该公式基于球面三角形的概念,假设地球是一个完美的球体。
公式如下:
d = 2r * arcsin(sqrt(sin^2((lat2-lat1)/2) + cos(lat1) * cos(lat2) * sin^2((lon2-lon1)/2)))
其中,d表示两点之间的距离,r表示地球的半径,lat1和lat2分别表示两点的纬度,lon1和lon2分别表示两点的经度。这里的纬度和经度需要使用弧度表示。
需要注意的是,Haversine公式对于小距离的计算结果比较准确,但在计算大距离时可能存在一定误差。此外,由于地球并非完全球形,其他更精确的公式也可以用于计算两点之间的距离。
相关问题
如何通过经纬度计算两点之间的距离
可以使用 Haversine 公式来计算两点之间的距离,公式如下:
a = sin²(Δlat/2) + cos(lat1) * cos(lat2) * sin²(Δlon/2)
c = 2 * atan2( √a, √(1−a) )
d = R * c
其中,lat1 和 lat2 分别为两点的纬度,lon1 和 lon2 分别为两点的经度,Δlat 和 Δlon 分别为两点纬度和经度的差值,R 为地球半径,d 为两点之间的距离。
以下是 Python 代码实现:
import math
def distance(lat1, lon1, lat2, lon2):
R = 6371 # 地球半径,单位为千米
lat1, lon1, lat2, lon2 = map(math.radians, [lat1, lon1, lat2, lon2])
dlat = lat2 - lat1
dlon = lon2 - lon1
a = math.sin(dlat/2)**2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon/2)**2
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))
d = R * c
return d
# 示例
print(distance(39.9, 116.3, 31.2, 121.5)) # 1068.7 千米
经纬度计算两点间的距离
计算两个经纬度之间的距离可以使用 Haversine 公式,具体实现可以参考下面的 Python 代码:
```python
import math
EARTH_RADIUS = 6371 # 地球半径,单位为千米
def haversine(lon1, lat1, lon2, lat2):
"""
计算两个经纬度之间的距离,单位为千米
"""
# 将经度和纬度转换为弧度
lon1, lat1, lon2, lat2 = map(math.radians, [lon1, lat1, lon2, lat2])
# 计算经纬度的差值
dlon = lon2 - lon1
dlat = lat2 - lat1
# 使用 Haversine 公式计算距离
a = math.sin(dlat/2)**2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon/2)**2
c = 2 * math.asin(math.sqrt(a))
distance = EARTH_RADIUS * c
return distance
```
其中,`lon1` 和 `lat1` 表示第一个点的经度和纬度,`lon2` 和 `lat2` 表示第二个点的经度和纬度,函数返回值为两点之间的距离,单位为千米。