0/参考网址
www.moonapi.com/news/4727.h… blog.csdn.net/JBY2020/art… geopy.readthedocs.io/en/stable/#…
1/地理编码
from geopy.geocoders import Nominatim
from pprint import pprint
geolocator = Nominatim(user_agent='jia')
loc = geolocator.geocode('昆山市花桥镇') # 地理编码
print(loc.address) # 打印结果:花桥镇, 昆山市, 苏州市, 江苏省, 215332, 中国
print(loc.longitude, loc.latitude) # 打印经纬度
print(loc.altitude) # 打印海拔
pprint(loc.raw) # 打印地图信息
结果如下:
创建Nominatim对象时不添加user_agent参数会报错:
解决方法:给参数user_agent给任意值即可
反地理编码
location = geolocator.reverse("31.3038368 121.0843885") # 反地理编码
print(location.address) # 打印结果:花溪路, 花桥镇, 昆山市, 苏州市, 江苏省, 中国
print(location.longitude, location.latitude) # 打印经纬度
print(location.altitude) # 打印海拔
pprint(location.raw) # 打印地图信息
2/计算2个点之间的距离
可以是meters(米)、kilometers(千米)、miles(英里)、nautical(海里)、feet(英尺),默认为千米
<1>测地线距离
是任意曲面上2个点之间最短路径的距离。
在这里,表面就是地球的表面。
from geopy import distance
# 轨迹点,纬度在前,经度在后
kolkata = (22.5726, 88.3639)
delhi = (28.7041, 77.1025)
# Print the distance calculated in km
print(distance.geodesic(kolkata, delhi).km) # km
print(distance.geodesic(kolkata, delhi).m) # m
print(distance.geodesic(kolkata, delhi).miles) # 英里
# 注意
# distance()函数和geodesic()函数是一样的,现在普遍使用的是geodesic()函数
print(distance.distance(kolkata, delhi).km)
print(distance.distance(kolkata, delhi).m)
print(distance.distance(kolkata, delhi).miles)
## <2>大圆距离
是计算球体上,任意2个点之间最短路径的长度。
在这里,地球被认为是一个完美的球体(实际上,地球并不是一个球体,而是一个椭球体)
```python
from geopy import distance
# 轨迹点,纬度在前,经度在后
kolkata = (22.5726, 88.3639)
delhi = (28.7041, 77.1025)
print(distance.great_circle(kolkata, delhi).km) # 公里
print(distance.great_circle(kolkata, delhi).m) # 米
print(distance.great_circle(kolkata, delhi).miles) # 英里