使用Google Map API (Geocoding API) 得到點位縣市鄉鎮資料
有的時候我們可能會獲得一批點位的坐標資訊,例如可能從網路上的API取得全台灣的咖啡店的點坐標資訊,利用坐標資訊我們就可以把點資料繪出在地圖上,讓大家查看分佈,但可能我們還會想知道每間咖啡廳是屬於哪個縣市、鄉鎮,這樣就可以做更近一步的統計分析或查詢,也許每個咖啡廳點位本身就有提供地址資訊,我們或許可以藉由從地址字串去擷取出縣市以及鄉鎮資訊,但是地址的資訊本身可能會有格式不一或著根本漏填的問題,這樣從地址獲得的點位縣市或鄉鎮資訊可能也會有很多問題,變成還要另外檢核處理。
想避免上述的問題,其實可以考慮使用Google Map 提供的Geocoding API來獲取點位所在的行政區相關資訊,Geocoding API提供我們利用經緯度坐標去查找點位所在行政區資訊,以及座落的地址資訊,API同時提供了json及xml的回傳結果,如果我們想得到json格式,API連結如下
https://maps.googleapis.com/maps/api/geocode/json?
我們要在連結後面加上所要查詢的參數跟設定,例如要查詢經緯度坐標(23.48386540, 120.45358340),就直接在上面的API連結再加上經緯度參數,如下
https://maps.googleapis.com/maps/api/geocode/json?latlng=23.48386540,120.45358340
得到的結果應該會像下面這樣
可以看到,address_components的陣列裡面,第四個及第五個long_name(或short_name)分別顯示的是這個坐標點所在的縣市及鄉鎮,但因為預設的格式是顯示英文,如果想要回傳的結果是中文,我們要在連結後面加上中文的設定,像下面這樣
https://maps.googleapis.com/maps/api/geocode/json?latlng=23.48386540,120.45358340&language=zh-TW
得到的回傳結果會像下面這樣
可以看到回傳的縣市及鄉鎮就會是顯示中文了,再把這些資訊取出存入資料庫就可以了。Geocoding API其實主要就是回傳查詢的經緯度坐標完整的地址資訊,所以同時也會回傳組好的完整地址資訊,像下面這樣,也可以直接取出使用。
Geocoding API雖然用來做經緯度查詢縣市鄉鎮等行政區界等資訊很方便,但它還是有一些限制,像是它沒有連江縣的資訊,所以如果是查詢落於連江縣的坐標,是沒有回傳結果的,例如查詢馬祖勝利水庫
設定參數如下
https://maps.googleapis.com/maps/api/geocode/json?latlng=26.151204,119.935610&language=zh-TW
得到的結果如下
另外Geocoding API也有提供地址反查經緯度坐標,例如我們想查 ”台灣台北市萬華區康定路190號”,只要在API後面加上address參數就可以了,像下面這樣
https://maps.googleapis.com/maps/api/geocode/json?address=台灣台北市萬華區康定路190號
得到的結果中,有一個geometry的項目,就會提供這個地址的經緯度,另外也可以看到,geometry裡面同時提供了location_type,讓我們也可以得知查詢的地址它的地點屬性,這邊顯示我們查到的是ROOFTOP,也就是房屋屋頂,應該表示就是建築物。
Geocoding API雖然可以直接由上述的連結加上所要設定的參數來得到我們想要的資訊,但在使用時,最好都還是申請Google Map的API key,並且加到參數設定中,像下面這樣
https://maps.googleapis.com/maps/api/geocode/json?address=台灣台北市萬華區康定路190號&key=YOUR_API_KEY
因為沒有加上key,有時候可能會受限制而得不到回傳結果,所以申請API key並加到要查詢的API參數中是比較保險的做法,申請API key的流程說明以及網址可以於下方連結進入
關於Geocoding API更多的說明則可於下方連結參考