2009年5月9日 星期六

Google Map的註標連結地址

最近突然好奇 Google Map 要怎麼能夠查找地址,所以就翻了一下他的官方文件

發現主要查找地址的功能來自於 GClientGeocoder 這個類別,它提供我們取得經緯度的位置(getLatLng) ,
以及運用經緯度或是地址抓取它的相關資訊(getLocations),實際操作內容請點我

這次實作的內容是當滑鼠在地圖上點一下後,這個時候我們會呼叫事件去取得它的地址資訊,其實際情況如下圖所示。
google-map-position

從上圖可以看到當滑鼠點了註標(Marker)以後,註標會顯示兩個標籤頁的小視窗。一個顯示經緯度資訊;另一個則是註標的地址。
首先我們定義了一個 MapPosition 的類別,當它在地圖上被按的時候,
它會去呼叫一個匿名函數,這個函數會用overlays這個陣列記錄著點選的註標,並且叫用 getAddress 這個函數請它連回google抓取地址資訊。
最後 getAddress 這個函數會查找 overlays 中被紀錄的註標以填入地址資訊,
getAddress 的實作方式如下列所示:

MapPosition.prototype.getAddress = function(response){
if(!response || response.Status.code != 200) {
alert("Status Code:" + response.Status.code);
}else{
if(DEBUG)
showEventProperties(response);
var place = response.name.split(",",2);
var point = new GLatLng(place[0], place[1]);
var addr = response.Placemark[0].address;
for(var i = 0 ; i < overlays.length ; i++)
{
if(point.lat == overlays[i].point.lat && point.lng == overlays[i].point.lng){
overlays[i].address = addr;
}
}
}
}

經由上述的動作,我們已經將地址紀錄到overlays陣列中,當註標被點選時,則會呼叫註標註冊的事件。

GEvent.addListener(marker, "click", function() {
var addr = "";
for(var i = 0 ; i < overlays.length ; i++)
{
if(marker.getLatLng().equals(overlays[i].point)){
addr = overlays[i].address;
}
}
if(myMap.useTab){
var tab1 = new GInfoWindowTab("經緯度", marker.getLatLng().toUrlValue());
var tab2 = new GInfoWindowTab("地址:", addr);
var infoTabs = [tab1,tab2];
marker.openInfoWindowTabsHtml(infoTabs);
}else{
marker.openInfoWindowHtml(myMap.getData(marker) + "

"+ addr+"

");
}
});

沒有留言:

張貼留言