Google Maps API - 地理編碼服務 ( 地址定位 )
一開始使用地圖,總會用經緯度來標記位置,但經緯度往往不夠直覺,而且要知道某個地點的經緯度也是個問題,所以這時就必須使用 Google Maps API 的地理編碼服務來實現「地址定位」,只要輸入對應的地址,就可以在地圖上標記。
啟用 Google Maps Geocoding API
要使用地理編碼服務,首先要前往 Google API Console,進入之後,建立新的專案或是選擇現有的專案 ( 不知道怎麼做可以參考 Google Maps (1) - 網頁載入地圖 ( 起手式 ) ),接著點選上方「啟用 API 和服務」。
在搜尋欄位搜尋「Google Maps Geocoding API」,找到後點選並且啟用。
啟用後,在資訊主頁最下方的 API 就會看到 Google Maps Geocoding API 的訊息, 依據 Google API 標準方案,免費版本一天可以呼叫這個 API 2500 次,每秒可以 50 次,對於自己要練習或是簡單的程式,應該都相當夠用。
使用地址定位
要使用地址定位,第一步要先透過google.maps.Geocoder
物件存取程式碼內的 Google Maps API 地理編碼服務,而Geocoder.geocode()
方法會初始化對地理編碼服務的要求。
geocoder = new google.maps.Geocoder();
接著使用geocoder.geocode({ 'address': address}, callback(results, status))
對地址進行地理編碼,在擷取到地理編碼時會依序傳遞兩個參數 results 和 status,results 包含以下的結果物件,而最常使用的應該就是geometry.location
,因為這回傳的就是地圖常用的經緯度 LatLng。
results[]: {
types[]: string,
formatted_address: string,
address_components[]: {
short_name: string,
long_name: string,
postcode_localities[]: string,
types[]: string
},
partial_match: boolean,
place_id: string,
postcode_localities[]: string,
geometry: {
location: LatLng,
location_type: GeocoderLocationType
viewport: LatLngBounds,
bounds: LatLngBounds
}
}
然而 status 回傳的是成功與否的狀態,如果回傳 OK 表示順利剖析地址並且已至少傳回一個地理編碼,以下面的範例來說,就可以透過地址編碼,將地圖標記放在「總統府」的地址上。
範例:使用地址定位
var map, geocoder;
function initMap() {
geocoder = new google.maps.Geocoder();
map = new google.maps.Map(document.getElementById('map'), {
zoom: 17
});
var address = '總統府';
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == 'OK') {
map.setCenter(results[0].geometry.location);
var marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location
});
} else {
console.log(status);
}
});
}
簡單的查詢地址功能
如果已經會使用地址定位,就可以來透過 HTML 的 input 和 button 做點變化,下面的例子在網頁中放入一個輸入欄位,輸入地址之後按下定位,就可以將自己指定的地址在地圖上置中,並放上標記。
範例:使用地址定位
submitBtn.on('click', function() {
console.log(addressInput.val());
geocoder.geocode({
'address': addressInput.val()
}, function(results, status) {
if (status == 'OK') {
map.setCenter(results[0].geometry.location);
var marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location
});
} else {
console.log(status);
}
});
});
參考資料
地理編碼服務是參考 Google 官方文件 地理編碼服務,如果想要了解 results 回傳的參數細節用法就可以前往閱讀,文件的後半段也提到一些地址反查的功能,不過目前還沒想到該怎麼用,就等有用到的時候再寫篇文章記錄一下好了。