如何使用Python和高德地图API,结合haversine公式计算徐汇区到浦东新区之间的距离?请提供示例代码。
时间: 2024-11-05 17:20:09 浏览: 40
为了计算徐汇区和浦东新区之间的实际距离,我们可以利用高德地图API获取这两个地点的经纬度信息,并使用haversine公式来计算它们之间的球面距离。首先,需要确保已经安装了requests库,以便于与高德地图API进行交互。
参考资源链接:[Python实现高德地图API计算两地经纬度及距离教程](https://wenku.csdn.net/doc/645cb1a995996c03ac3ed2fb?spm=1055.2569.3001.10343)
接下来,我们定义一个函数来实现高德地图API的地理编码,即通过地址获取经纬度信息。在获取到地址对应的经纬度后,我们可以应用haversine公式来计算两点间的距离。公式如下:
\[a = \sin^2(\Delta \phi / 2) + \cos(\phi_1) \cdot \cos(\phi_2) \cdot \sin^2(\Delta \lambda / 2)\]
\[c = 2 \cdot \arctan2(\sqrt{a}, \sqrt{1-a})\]
\[d = R \cdot c\]
其中,\(d\) 是两点间的距离,\(R\) 是地球的平均半径(大约为6371公里),\(\phi\) 是纬度,\(\lambda\) 是经度,\(\Delta \phi\) 和 \(\Delta \lambda\) 分别是两点纬度和经度的差值。
示例代码如下:
```python
import requests
import math
def geocode(address):
# 替换为你的高德地图API的key
ak = '你的高德地图API密钥'
url = f'***{ak}&address={address}'
response = requests.get(url)
data = response.json()
if data['status'] == '1':
return data['geocodes'][0]['location']
else:
return None
def haversine(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.asin(math.sqrt(a))
distance = R * c
return distance
# 获取徐汇区和浦东新区的经纬度
xuhui_coords = geocode(
参考资源链接:[Python实现高德地图API计算两地经纬度及距离教程](https://wenku.csdn.net/doc/645cb1a995996c03ac3ed2fb?spm=1055.2569.3001.10343)
阅读全文