转载地址:https://blog.csdn.net/Next_Second/article/details/78618081?locationNum=2&fps=1html
http://www.cnblogs.com/aiyuxi/p/6310035.htmlnode
geopy是一个关于地理编码的python库。主要有如下几个功能:(须要联网)python
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
具体可参考源代码github
>>> from geopy.distance import vincenty >>> tiananmen = (39.9073285, 116.391242416486) >>> xiaozhai = (34.2253171, 108.9426205) >>> print(vincenty(tiananmen, xiaozhai).meters) 913925.3164971869 >>>
>>> from geopy.distance import great_circle >>> tiananmen = (39.9073285, 116.391242416486) >>> xiaozhai = (34.2253171, 108.9426205) >>> print(great_circle(tiananmen, xiaozhai).meters) 913913.5874054108 >>>
因为专业须要,常常接触一些地理处理的工具包,文档都是英文的,本身看的同时将其翻译一下,一方面本身学习的同时有个记录,要是能同时给一块儿的学习的童鞋们一些帮助,想一想也是极好的。如下的文档内容主要翻译自官方文档,水平有限,错误的地方但愿你们指出。sql
处理地理数据常常会涉及到地理编码的问题。地理编码指的是将地理信息转化成坐标关系的过程。分为正向和反向的编码。正向的是指将地址信息转换为坐标点,好比:武汉市武汉大学-->(114.3594147, 30.5401222);反向地理编码就是将地理坐标转换为具体的地址,是一个与前面相反的过程。api
基于python的地理编码库geopy 是用于地理编码的经常使用工具,使用它 可获取多种地图服务的坐标。目前Python2和Python3下都支持。Python开发者可使用geopy很容易的获取全球的某个街道地址,城市, 国家和地块的地理坐标,它是经过第三方的地理编码器和数据源来解析的。ruby
geopy可使用的地理定位服务以下:app
OpenStreetMapNominatim,ESRIArcGIS, GoogleGeocodingAPI(V3), BaiduMaps, BingMapsAPI,Yahoo!PlaceFinder, Yandex, IGNFrance, GeoNames, NaviData,OpenMapQuest, What3Words, OpenCage, SmartyStreets, geocoder.us, and GeocodeFarm等. 这些丰富的地理编码器在geopy.geocoders模块下面,它提供各个地理定位服务的API类。每一个地理编码器至少定义了一个geocode方法, 用于将字符串转换为地理位置;也定义了一个reverse方法,用于将地理坐标转换为具体地址。每一个地理编码器须要接受认证和设置才能使用它的服务,例 如:在初始化时,须要一个API key或者locale。