【python+geopy包】地理信息检索

1. 注册百度AK

百度地图AK.png

2.开始编码

from geopy.geocoders import Nominatim,BaiduV3

geolocator = Nominatim(user_agent="myapp")#基于openStreetMap
location = geolocator.geocode(query="南京站")
print(location.raw)
print((location.longitude,location.latitude))#WGS84坐标系
print(location.address)

geolocator = BaiduV3(api_key='输入你申请的ak')#基于百度API构造实例
location = geolocator.geocode(query="南京站")#检索字符串
print(location.raw)#返回原始信息
print((location.longitude,location.latitude))#输出百度坐标系下经纬度坐标
print(location.address)
OpenStreetMap结果:
{'place_id': 304447935, 'licence': 'Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright', 'osm_type': 'node', 'osm_id': 8042210546, 'boundingbox': ['32.0912644', '32.0913644', '118.7913084', '118.7914084'], 'lat': '32.0913144', 'lon': '118.7913584', 'display_name': '南京站, 南京站换乘通道, 鼓楼区, 南京市, 盱眙县, 江苏省, 210037, China 中国', 'class': 'railway', 'type': 'stop', 'importance': 0.11100000000000002}
(118.7913584,32.0913144)
南京站, 南京站换乘通道, 鼓楼区, 南京市, 盱眙县, 江苏省, 210037, China 中国

百度地图API结果:
{'location': {'lng': 118.80371375406085, 'lat': 32.093502120303725}, 'precise': 0, 'confidence': 50, 'comprehension': 0, 'level': '火车站'}
(118.80371375406085,32.093502120303725)
火车站

计算距离

注意,geopy.distance下的geodestic默认测算的是WGS-84坐标系下的大地距离。

刚刚调用百度地图API进行的地理编码检索得到的是百度坐标系下的经纬度,需提前进行转换。

这里还是直接用OpenStreetMap下的WGS-84坐标系下的经纬度作为示例。

from geopy.geocoders import Nominatim#经纬度检索
from geopy.distance import geodesic#计算距离

geolocator = Nominatim(user_agent="myapp")
location1 = geolocator.geocode(query="南京站")
location2 = geolocator.geocode(query="南京禄口国际机场")
print((location1.longitude,location1.latitude))
print((location2.longitude, location2.latitude))
print('两地距离%s公里'%geodesic((location1.latitude,location1.longitude), (location2.latitude,location2.longitude)).km)#可以设置单位为公里、米、英里等
输出结果:
(118.7913584,32.0913144)
(118.87176715003275,31.7324679)
两地距离40.51108155886417公里
打赏
  • © 2020-2022 Eva Ren
  • Powered by Hexo Theme Ayer
    • 本站总访问量
    • 本页面总访问量
  • 载入运行时间...

请我喝杯咖啡吧~

支付宝
微信