geopy 在python中的使用

https://blog.csdn.net/learn_tech/article/details/80756788

转载地址:https://blog.csdn.net/Next_Second/article/details/78618081?locationNum=2&fps=1html

                 http://www.cnblogs.com/aiyuxi/p/6310035.htmlnode

geopy是一个关于地理编码的python库。主要有如下几个功能:(须要联网)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'} >>> 

逆地理编码

计算距离

单位能够为git

  • meters 米(简写m)
  • kilometers 公里(简写km)
  • miles 英里(简写mi)
  • nautical 海里(简写nm)
  • feet 英尺(简写ft)

具体可参考源代码github

计算经纬度距离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使用详解web

 

geopy使用详解

  因为专业须要,常常接触一些地理处理的工具包,文档都是英文的,本身看的同时将其翻译一下,一方面本身学习的同时有个记录,要是能同时给一块儿的学习的童鞋们一些帮助,想一想也是极好的。如下的文档内容主要翻译自官方文档,水平有限,错误的地方但愿你们指出。sql

  处理地理数据常常会涉及到地理编码的问题。地理编码指的是将地理信息转化成坐标关系的过程。分为正向和反向的编码。正向的是指将地址信息转换为坐标点,好比:武汉市武汉大学-->(114.3594147, 30.5401222);反向地理编码就是将地理坐标转换为具体的地址,是一个与前面相反的过程。api

  基于python的地理编码库geopy 是用于地理编码的经常使用工具,使用它 可获取多种地图服务的坐标。目前Python2和Python3下都支持。Python开发者可使用geopy很容易的获取全球的某个街道地址,城市, 国家和地块的地理坐标,它是经过第三方的地理编码器和数据源来解析的。ruby

geopy可使用的地理定位服务以下:app

OpenStreetMapNominatim,ESRIArcGISGoogleGeocodingAPI(V3)BaiduMapsBingMapsAPI,Yahoo!PlaceFinderYandexIGNFranceGeoNamesNaviData,OpenMapQuestWhat3WordsOpenCageSmartyStreetsgeocoder.us, and GeocodeFarm等. 这些丰富的地理编码器在geopy.geocoders模块下面,它提供各个地理定位服务的API类。每一个地理编码器至少定义了一个geocode方法, 用于将字符串转换为地理位置;也定义了一个reverse方法,用于将地理坐标转换为具体地址。每一个地理编码器须要接受认证和设置才能使用它的服务,例 如:在初始化时,须要一个API key或者locale。

相关文章
相关标签/搜索