轉載地址: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。