geopy 在python中的使用

geopy是一个关于地理编码的python库。主要有以下几个功能:(需要联网)

  1. 地理编码:将字符串转换为地理位置
  2. 逆地理编码:用于将地理坐标转换为具体地址
  3. 计算两个点的距离:经纬度距离和球面距离

安装

pip install geopy

使用

地理编码

>>> from geopy.geocoders import Nominatim
>>> geolocator = Nominatim()
>>> location = geolocator.geocode("天安门")
>>> print(location.address)
天安门, 东长安街, 崇文, 北京市, 东城区, 北京市, 100010, 中国
>>> print((location.latitude, location.longitude))
(39.9073285, 116.391242416486)
>>> print(location.raw)
{'class': 'building', 'boundingbox': ['39.9072282', '39.9075301', '116.3906498', '116.3918383'], 'place_id': '74005413', 'lon': '116.391242416486', 'osm_type': 'way', 'osm_id': '25097203', 'importance': 0.111, 'display_name': '天安门, 东长安街, 崇文, 北京市, 东城区, 北京市, 100010, 中国', 'type': 'yes', 'licence': 'Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright', 'lat': '39.9073285'}
>>> 

地理编码

逆地理编码

>>> from geopy.geocoders import Nominatim
>>> geolocator = Nominatim()
>>> location = geolocator.reverse("34.224719, 108.9427484")
>>> print(location.address)
海底捞, 长安北路, 小寨, 雁塔区, 雁塔区 (Yanta), 西安市, 陕西省, 710061, 中国
>>> print((location.latitude, location.longitude))
(34.2253171, 108.9426205)
>>> print(location.raw)
{'lon': '108.9426205', 'display_name': '海底捞, 长安北路, 小寨, 雁塔区, 雁塔区 (Yanta), 西安市, 陕西省, 710061, 中国', 'boundingbox': ['34.2252171', '34.2254171', '108.9425205', '108.9427205'], 'licence': 'Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright', 'address': {'county': '雁塔区 (Yanta)', 'country': '中国', 'road': '长安北路', 'state_district': '西安市', 'restaurant': '海底捞', 'neighbourhood': '小寨', 'country_code': 'cn', 'postcode': '710061', 'state': '陕西省', 'town': '雁塔区'}, 'place_id': '58165875', 'lat': '34.2253171', 'osm_id': '4516338791', 'osm_type': 'node'}
>>> 

逆地理编码

计算距离

单位可以为

  • 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.3164971869
>>> 

计算经纬度距离

计算球面距离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)
913913.5874054108
>>> 

计算球面距离

参考

geopy Github地址
geopy使用详解

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值