geopy

一、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/

你可能感兴趣的:(Python3,模块)