Python地理编码库geopy

安装

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}



计算距离

使用国际大地测量学和地球物理学联合会定义的平均地球半径 ( 2 a + b ) / 3 = 6371.0087714150598 (2a + b)/3 = 6371.0087714150598 公里,测地距离是地球椭球面模型表面上最短的距离,默认算法使用的方法是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



参考文献

  1. GeoPy英文文档
  2. Geopy中文文档
  3. geopy调用Baidu出现geopy.exc.GeocoderAuthenticationFailure: Authentication Failure
  4. web服务API | 百度地图API SDK
发布了248 篇原创文章 · 获赞 89 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/lly1122334/article/details/104309609