geopy使用詳解

geopy使用詳解

  因爲專業須要,常常接觸一些地理處理的工具包,文檔都是英文的,本身看的同時將其翻譯一下,一方面本身學習的同時有個記錄,要是能同時給一塊兒的學習的童鞋們一些幫助,想一想也是極好的。如下的文檔內容主要翻譯自官方文檔,水平有限,錯誤的地方但願你們指出。html

  處理地理數據常常會涉及到地理編碼的問題。地理編碼指的是將地理信息轉化成座標關係的過程。分爲正向和反向的編碼。正向的是指將地址信息轉換爲座標點,好比:武漢市武漢大學-->(114.3594147, 30.5401222);反向地理編碼就是將地理座標轉換爲具體的地址,是一個與前面相反的過程。node

  基於python的地理編碼庫geopy 是用於地理編碼的經常使用工具,使用它 可獲取多種地圖服務的座標。目前Python2和Python3下都支持。Python開發者能夠使用geopy很容易的獲取全球的某個街道地址,城市, 國家和地塊的地理座標,它是經過第三方的地理編碼器和數據源來解析的。python

geopy能夠使用的地理定位服務以下:git

OpenStreetMapNominatim,ESRIArcGISGoogleGeocodingAPI(V3)BaiduMapsBingMapsAPI,Yahoo!PlaceFinderYandexIGNFranceGeoNamesNaviData,OpenMapQuestWhat3WordsOpenCageSmartyStreetsgeocoder.us, and GeocodeFarm等. 這些豐富的地理編碼器在geopy.geocoders模塊下面,它提供各個地理定位服務的API類。每一個地理編碼器至少定義了一個geocode方法, 用於將字符串轉換爲地理位置;也定義了一個reverse方法,用於將地理座標轉換爲具體地址。每一個地理編碼器須要接受認證和設置才能使用它的服務,例 如:在初始化時,須要一個API key或者locale。web

  geopy經過了CPython 2.7, CPython 3.2, CPython 3.4, PyPy, and PyPy3下的測試。api

安裝:工具

能夠經過pip或者easy_install方式安裝:學習

pip install geopy

easy_install geopy

或者經過從PyPI下載wheel或源文件安裝測試

下面將經過實例演示一下geopy的使用ui

地理編碼

複製代碼

>>> from geopy.geocoders import Nominatim>>> geolocator = Nominatim()>>> location = geolocator.geocode("175 5th Avenue NYC")>>> print(location.address)
Flatiron Building, 175, 5th Avenue, Flatiron, New York, NYC, New York, ...>>> print((location.latitude, location.longitude))
(40.7410861, -73.9896297241625)>>> print(location.raw)
{'place_id': '9167009604', 'type': 'attraction', ...}

複製代碼

反地理編碼

複製代碼

>>> from geopy.geocoders import Nominatim>>> geolocator = Nominatim()>>> location = geolocator.reverse("52.509669, 13.376294")>>> print(location.address)
Potsdamer Platz, Mitte, Berlin, 10117, Deutschland, European Union>>> print((location.latitude, location.longitude))
(52.5094982, 13.3765983)>>> print(location.raw)
{'place_id': '654513', 'osm_type': 'node', ...}

複製代碼

計算距離

geopy能使用經緯度距離公式(Vincenty distance) 或球面距離(great-circle distance)公式在兩點間計算測地距離。在geopy中用的經緯度距離是默認的方式,類爲geopy.distance.distance,計算距離爲其屬性(e.g., miles, meters, etc)。

給出計算經緯度距離的例子以下:

>>> from geopy.distance import vincenty>>> newport_ri = (41.49008, -71.312796)>>> cleveland_oh = (41.499498, -81.695391)>>> print(vincenty(newport_ri, cleveland_oh).miles)538.3904451566326

使用球面距離:

>>> from geopy.distance import great_circle
>>> newport_ri = (41.49008, -71.312796)
>>> cleveland_oh = (41.499498, -81.695391)
>>> print(great_circle(newport_ri, cleveland_oh).miles)
537.1485284062816
相關文章
相關標籤/搜索