一、geopy
简介及安装
可以使用geopy
库来查询地址,国家,城市,地标,geopy
使用的是第三方的geo
解析器(包括谷歌地图,必应地图,Nominatim
等)和一些数据源来获取地理信息。
安装 geopy:
pip3 install geopy
二、geopy
使用
1、从地址字符串获取 Location
对象
也就是将字符串转换为地理位置。
# coding=utf-8
from geopy.geocoders import Nominatim
geolocator = Nominatim()
location = geolocator.geocode('故宫')
print(location.address)
# 故宫, 故宫东门外, 崇文, 北京市, 东城区, 北京市, 100010, 中国
print(location.latitude, location.longitude) # 输出故宫的纬度、经度
# 39.91727565 116.390769405773
# 输出 Location 的所有信息
print(location.raw)
# {
# 'place_id': 259835570, 'licence': 'Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright',
# 'osm_type': 'relation', 'osm_id': 9511883, 'boundingbox': ['39.9116214',
# '39.9211913',
# '116.386202',
# '116.3953903'],
# 'lat': '39.91727565',
# 'lon': '116.390769405773',
# 'display_name': '故宫, 故宫东门外, 崇文, 北京市, 东城区, 北京市, 100010, 中国',
# 'class': 'tourism', 'type': 'attraction', 'importance': 0.545487227980481,
# 'icon': 'https://nominatim.openstreetmap.org/images/mapicons/poi_point_of_interest.p.20.png'
# }
2、从经纬度获取 Location
对象
也就是将经纬度转换为地理位置。
# coding=utf-8
from geopy.geocoders import Nominatim
# 将经纬度转换为地理位置
gelocator = Nominatim()
location = gelocator.reverse("39.9073285, 116.391242416486")
print(location.address)
# # 天安门, 1, 西长安街, 崇文, 北京市, 东城区, 北京市, 100010, 中国
#
print(location.raw)
#
# {
# 'place_id': 242516302,
# 'licence': 'Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright',
# 'osm_type': 'relation',
# 'osm_id': 8847697,
# 'lat': '39.907359',
# 'lon': '116.391263017795',
# 'display_name': '天安门, 1, 西长安街, 崇文, 北京市, 东城区, 北京市, 100010, 中国',
# 'address': {
# 'address29': '天安门',
# 'house_number': '1',
# 'road': '西长安街',
# 'suburb': '崇文',
# 'city': '东城区',
# 'state': '北京市',
# 'postcode': '100010',
# 'country': '中国',
# 'country_code': 'cn'
# },
# 'boundingbox': [
# '39.9071482',
# '39.9075289',
# '116.3905678',
# '116.3919619'
# ]
# }
3、计算两点距离
单位可以为
meters
米(简写m
)kilometers
千米(简写km
)miles
英里(简写mi
)nautical
海里(简写nm
)feet
英尺(简写ft
)
计算经纬度距离 Vincenty distance
from geopy.distance import vincenty
tiananmen = (39.9073285, 116.391242416486)
xiaozhai = (34.2253171, 108.9426205)
print(vincenty(tiananmen, xiaozhai).meters)
# 913925.3164971863
计算球面距离 great-circle distance
## 计算球面距离
from geopy.distance import great_circle
tiananmen = (39.9073285, 116.391242416486)
xiaozhai = (34.2253171, 108.9426205)
print(great_circle(tiananmen, xiaozhai).meters)
# 913657.4596518736
geopy
的官网地址为:https://geopy.readthedocs.io/en/latest/