geopy

geopy 是几个流行的地理编码网络服务的 Python 客户端。

geopy 使 Python 开发人员可以使用第三方地理编码器和其他数据源轻松定位全球地址、城市、国家和地标的坐标。

geopy 包括用于 OpenStreetMap NominatimGoogle Geocoding API (V3) 的地理编码器类和许多 其他地理编码服务。 完整列表可在 Geocoders 文档部分 上找到。 地理编码器类位于 geopy.geocoders

geopy 针对 CPython(版本 3.5、3.6、3.7、3.8、3.9)和 PyPy3 进行了测试。 geopy 1.x 系列还支持 CPython 2.7、3.4 和 PyPy2。

安装

pip3 install geopy

Geocoding

要将查询地理定位到地址和坐标:

首先需要在https://www.openstreetmap.org/注册账号,注册一个app名。注册好的app名用于填充user_agent

from geopy.geocoders import Nominatim

geolocator = Nominatim(user_agent="specify_your_app_name_here")
location = geolocator.geocode("175 5th Avenue NYC")
print(location.address)
print((location.latitude, location.longitude))
print(location.raw)

Run

Flatiron Building, 175, 5th Avenue, Flatiron, New York, NYC, New York, ...
(40.7410861, -73.9896297241625)
{'place_id': '9167009604', 'type': 'attraction', ...}



为了找到地址对应的经纬度

from geopy.geocoders import Nominatim

geolocator = Nominatim(user_agent="specify_your_app_name_here")
location = geolocator.reverse("52.509669, 13.376294")
print(location.address)
print((location.latitude, location.longitude))
print(location.raw)

Run

Potsdamer Platz, Mitte, Berlin, 10117, Deutschland, European Union
(52.5094982, 13.3765983)
{'place_id': '654513', 'osm_type': 'node', ...}



测量距离

Geopy 可以使用 geodesic distancegreat-circle distance 计算两点之间的测地线距离 Great-circle_distance),默认的测地线距离可用作函数 geopy.distance.distance。

这是测地线距离的示例用法,采用一对 (lat, lon) 元组:

from geopy.distance import geodesic
newport_ri = (41.49008, -71.312796)
cleveland_oh = (41.499498, -81.695391)
print(geodesic(newport_ri, cleveland_oh).miles)

Run

538.390445368

使用great-cricle距离算法,同时采用一对 (lat, lon) 元组:

from geopy.distance import great_circle
newport_ri = (41.49008, -71.312796)
cleveland_oh = (41.499498, -81.695391)
print(great_circle(newport_ri, cleveland_oh).miles)

Run

536.997990696


广而告之