Ⅰ 怎麼樣用Python實現地理編碼
引言
今天看到一篇阿里雲的文章天下武功,唯快不破,以物流行業為例,分析了 PostgreSQL 與 Greenplum 在地理位置信息處理,最佳路徑演算法,機器學習等方面的物流行業應用方法。其中提到了地址轉換成坐標的問題,更專業些的名詞應該是「地理編碼」,即知道一個地址,如北京市海淀區上地十街10號,怎麼樣可以獲取到對應的經緯度位置信息(40,116),或者反過來。
地理編碼概念
很多地圖相關的廠商都提供了相關的API,我們可以直接利用這些API得到這些信息。比如網路的Geocoding API。
Geocoding API是一類介面,用於提供從地址到經緯度坐標或者從經緯度坐標到地址的轉換服務,用戶可以使用C# 、C++、Java等開發語言發送請求且接收JSON、XML的返回數據。Geocoding API包括地址解析和逆地址解析功能:
Paste_Image.png
地理編碼:即地址解析,由詳細到街道的結構化地址得到網路經緯度信息,例如:「北京市海淀區中關村南大街27號」地址解析的結果是「lng:116.31985,lat:39.959836」。同時,地理編碼也支持名勝古跡、標志性建築名稱直接解析返回網路經緯度,例如:「網路大廈」地址解析的結果是「lng:116.30815,lat:40.056885」 。
逆地理編碼:即逆地址解析,由網路經緯度信息得到結構化地址信息,例如:「lat:31.325152,lng:120.558957」逆地址解析的結果是「江蘇省蘇州市虎丘區塔園路318號」。
不過,需要說明的一點是,若想使用網路的這套API的前提是,有網路賬號並申請相應的Key。其實,除了網路之外,谷歌、ESRI、微軟的Bing等都有類似的地理編碼服務。不過這些服務大多沒有專門針對Python的庫並且彼此之間的Json結構也不一致。於是乎專治不服的Python大神做了一個專門的地理編碼工具geocoder,將這些不同廠商的服務整合統一起來。
地理編碼工具geocoder
首先看一下它都支持哪些公司的地理編碼服務:
Provider
Optimal
Usage Policy
ArcGIS World
Bai China API key
Bing World API key
CanadaPost Canada API key
FreeGeoIP World
Geocoder.ca CA & US Rate Limit
GeocodeFarm World Policy
GeoNames World Username
GeoOttawa Ottawa
Google World Rate Limit, Policy
HERE World API key
IPInfo World
Mapbox World API key
MapQuest World API key
Mapzen World API key
MaxMind World
OpenCage World API key
OpenStreetMap World Policy
Tamu US API key
TomTom World API key
What3Words World API key
Yahoo World
Yandex Russia
TGOS Taiwan
安裝
pip install geocoder
地理編碼
import geocoder
g = geocoder.google("1403 Washington Ave, New Orleans, LA 70130")
g = geocoder.arcgis(u"北京市海淀區上地十街10號")
g.latlng
輸出為
[29.9287839, -90.08421849999999]
也可以查看完整的geojson
g.geojson
輸出為
{'bbox': [-90.0855674802915,
29.9274349197085,
-90.0828695197085,
29.9301328802915],
'geometry': {'coordinates': [-90.08421849999999, 29.9287839],
'type': 'Point'},
'properties': {'accuracy': u'ROOFTOP',
'address': u'1403 Washington Ave, New Orleans, LA 70130, USA',
'bbox': [-90.0855674802915,
29.9274349197085,
-90.0828695197085,
29.9301328802915],
'city': u'New Orleans',
'confidence': 9,
'country': u'US',
'county': u'Orleans Parish',
'encoding': 'utf-8',
'housenumber': u'1403',
'lat': 29.9287839,
'lng': -90.08421849999999,
'location': '1403 Washington Ave, New Orleans, LA 70130',
'neighborhood': u'Garden District',
'ok': True,
'place': u'ChIJGyFHWc2lIIYRYSoneaXAUiw',
'postal': u'70130',
'provider': 'google',
'quality': u'street_address',
'state': u'LA',
'status': 'OK',
'status_code': 200,
'street': u'Washington Ave'},
'type': 'Feature'}
直接用Google嘗試查詢中文地址時失敗
g = geocoder.google(u"北京市海淀區上地十街10號")
g.ok
輸出為
False
用網路應該沒問題,不過我沒有申請相應的key。切換到arcgis,能夠成功編碼
g = geocoder.arcgis(u"北京市海淀區上地十街10號")
g.latlng
輸出為
[40.050934, 116.30079]
逆地理編碼
g = geocoder.google([29.9287839, -90.08421849999999], method='reverse')
print g.address
print g.city
print g.state
print g.country
輸出為
1403 Washington Ave, New Orleans, LA 70115, USA
New Orleans
LA
US
換成中國的地址
g = geocoder.google([40.050934, 116.30079], method='reverse')
print g.address
print g.city
print g.state
print g.country
輸出為
Bai Du Da Sha, Haidian Qu, Beijing Shi, China, 100193
Beijing
Beijing Shi
CN
用arcgis的服務試試
g = geocoder.arcgis([40.050934, 116.30079], method='reverse')
print g.address
print g.city
print g.state
print g.country
輸出為
None
北京市
北京市
CHN
Google轉換成的是英文,但地址比較全。arcgis雖然是中文,但是詳細的地址居然輸出為了None,這有個X用。
其他
geocoder 的功能不止於此,它還可以查IP(包括自己的)。
g = geocoder.ip('199.7.157.0')
print g.latlng
print g.city
g = geocoder.ip('me')
print g.latlng
print g.city
輸出為
[43.6934, -79.4857]
Toronto
[51.05, 13.75]
Dresden
查詢一個城市的空間包圍盒
g = geocoder.arcgis(u"山東")
g.bbox
輸出為
{'northeast': [38.976997, 121.976998], 'southwest': [33.022997, 116.022998]}
小結
空間信息既可以利用行政區劃、自然地理區域等文本信息描述,也可以用坐標系統、數字(郵編等)來標識。利用地理編碼技術,可以將空間信息的地理定位要素與相應的文本信息關聯起來。本文主要介紹了geocoder地理編碼這一小工具,可以方便快捷的利用地圖等相關廠商提供的地理編碼服務,將文字描述的位置轉換成地圖上的經緯度,或者通過地圖上的某個位置坐標獲得相應的位置信息文字描述。
Ⅱ 什麼是地理編碼
地理編碼指的是將統計資料或是地址信息建立空間坐標關系的過程。
地理編碼非同一般意義上的數字編碼,不是用數字或字母來代表某一對象,而是跟據各數據點的地理坐標或空間地址(如省市、街區、樓層、房間等),將資料庫中的數據與其在地圖上相對應的圖形元素一一對應。即給每個數據賦予X、Y值,從而確定該數據標在圖上的位置的過程。
地理編碼又稱地址匹配。是為識別點、線、面的位置和屬性而設置的編碼,它將全部實體按照預先擬定的分類系統,選擇最適宜的量化方法,按實體的屬性特徵和集合坐標的數據結構記錄在計算機的儲存設備上。
地理編碼有正向地理編碼、反向地理編碼、向量式地理編碼、網格式地理編碼四種服務類型。
1、正向地理編碼,是將地址或地名描述轉換為地球表面上相應位置的過程。正向地理編碼提供地址定位引擎、行政區劃引擎、街道引擎。
2、反向地理編碼,是將地球表面的地址坐標轉換為標准地址的過程,反向地理編碼提供了坐標定位引擎,通過地面某個地物的坐標值來反向查詢得到該地物所在的行政區劃、所處街道、以及最匹配的標准地址信息。
3、向量式地理編碼,是指使用坐標參考系統去定義點、線、面特徵的位置。 向量化:指將網格式資料轉換為向量形式的過程。
4、網格式地理編碼(也叫柵格化地理編碼),是指使用建立於矩陣或方格的座標系統來標定位置,這樣的位置資料包含欄與列,稱為圖元。 柵格化:指將向量式資料轉換為網格形式的過程。
Ⅲ 什麼是地理編碼主要有哪三種方法其演算法分別是怎樣的
地理編碼(Geocoding)又稱地址匹配(address-matching),指建立地理位置坐標與給定地址一致性的過程。也是指在地圖上找到並標明每條地址所對應的位置。地理編碼是GIS中比較重要的一個功能。
地址匹配,或地理編碼,就是一個通過地址中某路段的起始,終了位置,並同時考慮到單雙號因素,以確定地理位置的過程.
一個大型的政府GIS要求能夠將任何數據移植到空間坐標系中,這個過程包括對數據的准確分類和注冊,以及使所有的數據能夠與一個空間坐標系建立關聯;從而保證資料庫中的每一個對象被准確無誤地疊加在地圖上,建立空間信息與非空間信息之間的聯系。因此,地理編碼在城市空間定位和分析領域內具有非常廣泛的應用,如滿足城市規劃建設以、公安部門119、110報警系統等基於位置的服務要求。
地理編碼的方式主要有:反向地理編碼服務、向量式地理編碼、網格式地理編碼
反向地理編碼服務
反向地理編碼服務實現了將地球表面的地址坐標轉換為標准地址的過程,反向地理編碼提供了坐標定位引擎,幫助用戶通過地面某個地物的坐標值來反向查詢得到該地物所在的行政區劃、所處街道、以及最匹配的標准地址信息。通過豐富的標准地址庫中的數據,可幫助用戶在進行移動端查詢、商業分析、規劃分析等領域創造無限價值。
向量式地理編碼
向量式地理編碼(vector geocoding)指使用坐標參考系統去定義點、線、面特徵的位置。 向量化(vectorization):指將網格式資料轉換為向量形式的過程。
網格式地理編碼
網格式地理編碼(raster geocoding)指使用建立於矩陣或方格的座標系統來標定位置,這樣的位置資料包含欄與列,稱為圖元(pixel)。 柵格化(rasterization)指將向量式資料轉換為網格形式的過程。
Ⅳ 高德地圖的API怎麼用URL實現地理編碼/逆地理編碼
API的相關問題有兩種咨詢求助的解決方式:
1、官方API論壇發帖
http://bbs.amap.com/forum.php?gid=1
2、或者發送郵件到官方郵箱:[email protected]
Ⅳ 什麼是地理編碼作用是什麼
地理編碼是為識別點、線、面的位置和屬性而設置的編碼,它將全部實體按照預先擬定的分類系統,選擇最適宜的量化方法,按實體的屬性特徵和集合坐標的數據結構記錄在計算機的儲存設備上。
作用:
1、提供了坐標定位引擎,幫助用戶通過地面某個地物的坐標值來反向查詢得到該地物所在的行政區劃、所處街道、以及最匹配的標准地址信息。通過豐富的標准地址庫中的數據,可幫助用戶在進行移動端查詢、商業分析、規劃分析等領域創造無限價值。
2、提供的專業和多樣化的引擎以及豐富的資料庫數據使得服務應用非常廣泛,在資產管理、規劃分析、供應物流管理和移動端輸入等方面為用戶創造無限的商業價值。
(5)什麼是逆地理編碼擴展閱讀:
相關地理定位服務:
GIS:
地理信息系統是一個決策支持系統,它具有信息系統的各種特點。地理信息系統與其他信息系統的主要區別在於其存儲和處理的信息是經過地理編碼的,地理位置及與該位置有關的地物屬性信息成為信息檢索的重要部分。
在地理信息系統中,現實世界被表達成一系列的地理要素和地理現象,這些地理特徵至少由空間位置參考信息和非位置信息兩個部分組成。
地理信息系統首先是一種計算機系統:該系統通常又由若干個相互關聯的子系統構成,如地理數據採集子系統、地理數據管理子系統、地理數據處理和分析子系統、地理數據可視化表達與輸出子系統等。
這些子系統的構成影響著地理信息系統硬體的配置,功能與效率、數據處理的方式和產品輸出的類型等。
GPS:
由於GPS技術所具有的全天候、高精度和自動的測量特點作為先進的測量手段和新的生產力,已經融入了國民經濟建設、國防建設和社會發展的各個應用領域。
RS:
"遙感",顧名思義,就是遙遠的感知。地球上的每一個物體都在不停地吸收、發射和反射信息和能量。其中的一種形式-電磁波,早已經被人們所認識和利用。
人們發現不同物體的電磁波特性是不同的。遙感就是根據這個原理來探測地表物體對電磁波的反射和其發射的電磁波,從而提取這些物體的信息,完成遠距離識別物體。
各種衛星通過不同的遙感技術實現不同的用途,如氣象衛星是用於氣象的觀測預報;海洋水色衛星用於海洋觀測;陸地資源衛星用於陸地上所有土地、森林、河流、礦產、環境資源等的調查。
雷達衛星是以全天候(不管陰天、雲霧)、全天時(不管黑天、白天)以及能穿透一些地物(如水體、植被及土地等)為特點的對地觀測遙感衛星。
Ⅵ 在地理信息系統中,什麼是地理編碼(Geocoding)和地址匹配
地理編碼(Geocoding)又稱地址匹配(address-matching),指建立地理位置坐標與給定地址一致性的過程。也是指在地圖上找到並標明每條地址所對應的位置。地理編碼是GIS中比較重要的一個功能。
地址匹配,或地理編碼,就是一個通過地址中某路段的起始,終了位置,並同時考慮到單雙號因素,以確定地理位置的過程.
一個大型的政府GIS要求能夠將任何數據移植到空間坐標系中,這個過程包括對數據的准確分類和注冊,以及使所有的數據能夠與一個空間坐標系建立關聯;從而保證資料庫中的每一個對象被准確無誤地疊加在地圖上,建立空間信息與非空間信息之間的聯系。因此,地理編碼在城市空間定位和分析領域內具有非常廣泛的應用,如滿足城市規劃建設以、公安部門119、110報警系統等基於位置的服務要求。
參考:盧毅敏 面向電子政務的地理信息系統研究
Ⅶ 高德api地理編碼和逆地理編碼問題
我利用CoreLocatio下的locManager=[[CLLocationManager alloc]init];
// locManager.delegate=self;
// locManager.desiredAccuracy=kCLLocationAccuracyBest;
// locManager.distanceFilter=5.0f;
// [locManager startUpdatingLocation];
方法獲取當前位置的經緯度,然後用
MASearch *maSearch=[[MASearch alloc]init];
*searchOption=[[ alloc]init];
searchOption.config=@"SPAS";
searchOption.x=self.klatitude;
searchOption.y=self.klongitude;
[maSearch :searchOption]
不要多想 這樣的提問沒有意義
很多煩惱都是我們自己找的
Ⅷ 高德地圖逆地理編碼結果沒有數據,是什麼問題
我利用CoreLocatio下的locManager=[[CLLocationManageralloc]init];//locManager.delegate=self;//locManager.desiredAccuracy=kCLLocationAccuracyBest;//locManager.distanceFilter=5.0f;//[];方法獲取當前位置的經緯度,然後用MASearch*maSearch=[[MASearchalloc]init];*searchOption=[[alloc]init];searchOption.config=@"SPAS";searchOption.x=self.klatitude;searchOption.y=self.klongitude;[:searchOption]
Ⅸ 逆地理請求什麼意思
逆地理編碼,又稱地址解析服務,是指從已知的經緯度坐標到對應的地址描述(如行政區劃、街區、樓層、房間等)的轉換。常用於根據定位的坐標來獲取該地點的位置詳細信息,與定位功能是黃金搭檔。也就是坐標轉地址。
逆地理編碼就很實用了,很多時候後台都會返回經緯度,然後APP端根據經緯度來定位。