Geocoding資源分享
TGOS、 HERE Map 以及 ArcGIS
Geocoding,中文又稱座標化、地理座標化、地理編碼等。根據維基百科的說明,是一種:
利用客觀的地理坐標數據來描述任何一種可以和地理位置拉上關係的事物。例如:一個固網電話號碼,只要該電話號碼代表的是一個固定位置的電話、一張相片、一個郵政信箱、一個地址或地名、一支電燈柱、一間商店,甚至是一朵花。當一樣事物座標化之後,亦可以被應用到電腦化地圖製作或地理資訊系統之上。
在實務上,通常是指把人們熟悉的地址、地名,轉換成電腦可以判讀的座標系統,以利後續使用,是利用電腦製作地圖的重要步驟。
此類服務最有名的提供者大概就是Google的Google Map API。之前不少熱心網友針對該服務寫了網頁,讓使用者可以將大量地址貼上,進行批次轉換,但自從2018年中以後Google開始要求服務使用者綁定信用卡之後,從此美好的年代一去不復返。
好在除了Google外,仍有許多廠商提供類似的服務。本篇將介紹3種國內外提供地理編碼的機構,分別為內政部TGOS、地圖導航公司HERE Map及地理資訊系統公司ESRI。
TGOS
屬於內政部,全名地理資訊圖資雲服務平台。內政部對其的定位為:
全國地理空間資料及網路服務搜尋取用、瀏覽查詢與加值媒合之入口,擁有最完整及正確的全國地理資料與網路服務之查詢目錄與詮釋資料庫。
也是目前於台灣的地理編碼服務中,唯一會回傳包含里、鄰在內的完整地址格式的服務。此外使用者也能根據需求,選擇回傳的座標系統,包含WGS84、TWD67及TWD97等。
帳號申請
申請步驟分為兩步驟,先申請會員帳號,再申請批次比對服務。
使用範例
選擇門牌定位服務頁面下的批次門牌地址比對服務,先至服務申請紀錄複製APIKEY(服務申請通過後取得)、選擇座標系統、上傳檔案、點擊進行批次比對。
檔案格式為CSV,須包含五個欄位,分別為id, Address, Response_Address Response_X及Response_Y。需特別注意編碼的部分,上傳的CSV檔編碼須為ANSI格式(Excel另存CSV的預設編碼),不然回傳結果會是亂碼。所以如果是用其他非Excile軟體製作CSV檔上傳時,需要注意編碼格式,免得白費額度。
使用額度
每個帳號一天可比對一萬筆。
服務小結
TGOS的比對服務使用CSV檔,對於不寫程式的使用者較為友善。其比對成功率約9成左右。TGOS的優勢在於其資料來源為政府的門牌資料,其比對精準度理論上較其他私人企業高,同時能夠回傳包含里、鄰在內的完整地址,並能根據使用者需求選擇不同的座標系統。
HERE Maps
HERE是一間過去由Nokia所有,現為德國汽車廠商奧迪,BMW,戴姆勒合資持有的地圖公司。提供汽車導航、地位服務及地理資訊系統等服務。
帳號申請
類似於Google Map API,Here Map也有針對開發者的Here Developer。進入頁面後,點選右上角sign up申請使用帳號。
完成後透過文件說明取得HERE REST APIs的 App ID 及 App Code後,即可使用該API進行Geocoding。
使用範例
透過python向API查詢台北市政府地址:
import json
import requestsurl = ("https://geocoder.api.here.com/6.2/geocode.json" +
"?app_id=你的app_id" +
"&app_code=你的app_code" +
"&searchtext={}".format('台北市信義區市府路1號'))
r = requests.get(url).textjdata = json.loads(r)print( jdata['Response']['View'][0]['Result'][0]['Location'] )
回傳內容:
{'Address': {'AdditionalData': [{'key': 'CountryName', 'value': '臺灣'},
{'key': 'CountyName', 'value': '台北市'}],
'City': '台北市',
'Country': 'TWN',
'County': '台北市',
'District': '信義區',
'HouseNumber': '1號',
'Label': '臺灣110台北市信義區市府路1號',
'PostalCode': '110',
'Street': '市府路'},
'DisplayPosition': {'Latitude': 25.03752, 'Longitude': 121.56442},
'LocationId': 'NT_kdnto0n06JjBALlKymXSYC_xgemfC',
'LocationType': 'point',
'MapView': {'BottomRight': {'Latitude': 25.0363958, 'Longitude': 121.5656607},
'TopLeft': {'Latitude': 25.0386442, 'Longitude': 121.5631793}},
'NavigationPosition': [{'Latitude': 25.03752, 'Longitude': 121.56355}]}
使用額度
Freemium每個帳號一個月有25萬次的查詢額度,額度使用狀況可以在Project Page中查看。Pro帳號一個月100萬次,月費449美金。
服務小結
HERE Map比對服務透過向API提出需求來取得比對結果,有不錯的準確度。Freemium一個月25萬筆的額度有較大的使用彈性,但是需透過API來取得比對結果,需要對程式語言及json格式有基本的了解。
ArcGIS by ESRI
Environmental Systems Research Institute簡稱ESRI,GIS界的泰斗,同時也是開發名滿天下的ESRI Shapefile(.shp, .shx, .dbf)的公司。成立於1969年。以下是維基百科對它的介紹:
目前為世界最大的地理資訊系統技術供應商,其總部設在美國加州雷德蘭茲,其地理資訊系統軟體目前的全球市場佔有率最高,公司最知名產品如ArcGIS。…該公司在美國被認為是繼微軟、甲骨文公司與IBM之後,美國聯邦政府最大的軟體供應商之一。
帳號申請
進入首頁後拉致頁面最下方進入帳號申請頁面,填寫完成後至信箱啟用帳號,點擊啟用信件後會要求輸入使用者名稱,之後會使用到。
使用範例
透過python向API查詢台北市政府地址:
from arcgis.gis import GIS
from arcgis.geocoding import get_geocoders, geocodegis = GIS("http://www.arcgis.com", "使用者代碼", "密碼")geocode_result = geocode(address="台北市信義區市府路1號", as_featureset=True)for field in geocode_result.features[0].fields:
print("{}: {}".format( field,
geocode_result.features[0].get_value(field)) )
印出內容為:
Loc_name: World
Status: M
Score: 100
Match_addr: 台北市信義區西村里市府路1號, 110
LongLabel: 台北市信義區西村里市府路1號, 110, TWN
ShortLabel: 市府路1號
Addr_type: PointAddress
Type:
PlaceName:
Place_addr: 台北市信義區西村里市府路1號, 110...
X: 121.56358230094011
Y: 25.037523000000007
DisplayX: 121.56442200000004
DisplayY: 25.037523000000007
Xmin: 121.56242200000004
Xmax: 121.56642200000003
Ymin: 25.03552300000001
Ymax: 25.039523000000006
ExInfo:
OBJECTID: 1
使用額度
採點數制,一個月50點,每次查詢0.04點,所以一個月是1250次。超過50點每點0.1美金計算。
服務小結
ArcGIS 比對服務一樣透過API來取得比對結果,其回傳結果除了經緯度外,還包含里以及3碼郵遞區號。比對成功率高(個人使用經驗高於9成5),但服務費用也高。
總結
本篇介紹了Google以外的3種提供地理編碼服務的機構,分別為內政部的TGOS、HERE Map以及 ESRI的ArcGIS。其中內政部TGOS使用簡便,能夠調整座標系統且回傳地址最詳細,但一天僅能比對10,000筆資料;HERE Map及ArcGIS需要透過API取得比對結果,其中ArcGIS回傳地址包含里名及3碼郵遞區號,比對成功率最高但價格較不親民、HERE Map雖然無法回傳包含鄰里在內的完整地址,但每帳號一個月擁有25萬筆的額度,使用起來彈性較大。另外除了本篇提到的3間機構外,還有許多廠商提供類似的服務,例如Mapbox以及微軟的Bing Map等,可以多多嘗試。