安装
pip install geopy
初试
geopy
需要调用地理定位服务,本文使用百度地图开放平台
创建应用→IP地址查询获得本机IP→填入IP白名单中
填入AK(api_key)访问:
http://api.map.baidu.com/geocoding/v3/?address=您的AK&output=json&ak=您的ak&callback=showLocation
出现以下结果则成功:
showLocation&&showLocation({"status":0,"result":{"location":{"lng":116.40384710616807,"lat":39.91552563252131},"precise":0,"confidence":50,"comprehension":0,"level":"旅游景点"}})
运行代码
from geopy.geocoders import Baidu
geolocator = Baidu(api_key='您的AK')
location = geolocator.geocode('西北农林科技大学')
print(location.address)
print((location.latitude, location.longitude))
print(location.raw)
若报错,请参考geopy调用Baidu出现geopy.exc.GeocoderAuthenticationFailure: Authentication Failure修改源码
得到结果
教育
(34.291641819762745, 108.07934220117825)
{'location': {'lng': 108.07934220117825, 'lat': 34.291641819762745}, 'precise': 0, 'confidence': 70, 'comprehension': 0, 'level': '教育'}
地理编码
修改源码
api_path = '/geocoding/v3'
from geopy.geocoders import Baidu
geolocator = Baidu(api_key='您的AK')
location = geolocator.geocode('西北农林科技大学')
print(location.address)
print((location.latitude, location.longitude))
print(location.raw)
# 教育
# (34.291641819762745, 108.07934220117825)
# {'location': {'lng': 108.07934220117825, 'lat': 34.291641819762745}, 'precise': 0, 'confidence': 70, 'comprehension': 0, 'level': '教育'}
逆地理编码
修改源码
api_path = '/reverse_geocoding/v3'
from geopy.geocoders import Baidu
geolocator = Baidu(api_key='您的AK')
location = geolocator.reverse((34.291641, 108.079342))
print(str(location.address, encoding="utf-8"))
print((location.latitude, location.longitude))
print(location.raw)
# 陕西省咸阳市杨陵区
# (34.29164102762759, 108.07934199999994)
# {'location': {'lng': 108.07934199999994, 'lat': 34.29164102762759}, 'formatted_address': '陕西省咸阳市杨陵区', 'business': '西农路,杨陵区中心城区', 'addressComponent': {'country': '中国', 'country_code': 0, 'country_code_iso': 'CHN', 'country_code_iso2': 'CN', 'province': '陕西省', 'city': '咸阳市', 'city_level': 2, 'district': '杨陵区', 'town': '', 'town_code': '', 'adcode': '610403', 'street': '', 'street_number': '', 'direction': '', 'distance': ''}, 'pois': [], 'roads': [], 'poiRegions': [], 'sematic_description': '', 'cityCode': 323}
计算距离
使用国际大地测量学和地球物理学联合会定义的平均地球半径
公里,测地距离是地球椭球面模型表面上最短的距离,默认算法使用的方法是Karney (2013) (geodesic
)
from geopy.distance import geodesic
guangzhou = (23.135336306695006, 113.27143134445974)
beijing = (39.910924547299565, 116.4133836971231)
distance = geodesic(guangzhou, beijing)
print(distance)
# 1883.5361817595797 km