经纬度距离计算python
时间: 2024-12-26 16:19:38 浏览: 17
### 使用 Python 实现经纬度距离计算
#### 方法一:Haversine 距离
`sklearn.metrics.pairwise.haversine_distances` 函数可以用于计算样本 X 和 Y 之间的 Haversine 距离。此方法假设地球是一个完美的球体,适用于快速估算两点间的直线距离。
```python
from math import radians
import numpy as np
from sklearn.metrics.pairwise import haversine_distances
def calculate_haversine_distance(lat1, lon1, lat2, lon2):
# 将角度转换为弧度
point1 = (radians(lat1), radians(lon1))
point2 = (radians(lat2), radians(lon2))
# 计算并返回公里数
distance_in_radians = haversine_distances([point1, point2])[0][1]
distance_in_km = distance_in_radians * 6371 # 地球半径约为6371千米
return distance_in_km
```
这种方法简单快捷,在大多数情况下能够提供足够的准确性[^1]。
#### 方法二:测地线距离
对于更精确的距离测量,尤其是当涉及到较大跨度或高精度需求时,推荐采用基于椭球模型的测地线算法来计算实际路径长度。这里展示了一个利用 `geopy` 库中的 `geodesic()` 函数的例子:
```python
from geopy.distance import geodesic
Abuja = (9.072264, 7.491302)
Dakar = (14.716677, -17.467686)
distance = geodesic(Abuja, Dakar).km
print(f"The geodesic distance between Abuja and Dakar is {distance:.2f} km.")
```
该方式考虑到了地球的真实形状(即近似于旋转椭球),因此能给出更加贴近现实的结果[^2]。
#### 方法三:大圆距离
如果追求更高的效率而愿意牺牲一点精度,则可以选择使用同样来自 `geopy` 的 `great_circle()` 来代替上述两种方案之一。它同样是基于球形地球模型,但在某些应用场景下可能更为合适:
```python
from geopy.distance import great_circle
Nairobi = (-1.28333, 36.81667)
Cairo = (30.05, 31.25)
distance = great_circle(Nairobi, Cairo).km
print(f"The great circle distance between Nairobi and Cairo is {distance:.2f} km.")
```
这种简化版的大圆距离公式虽然不如前两者复杂,但对于很多日常用途来说已经足够好用了[^3]。
阅读全文