2008年7月1日 星期二

Google Maps API - 地圖座標定位

在程式的應用上可以利用 Google Maps API 取得經緯度座標,這裡介紹兩種取得經緯度座標的方法。

方法一︰透過單擊地圖取得經緯度座標


看範例所呈現的結果

在上個單元『在地圖上新增標註』中,已大致介紹過 GEvent。在這同樣透過 GEvent.addListener(source, event, handler) 針對 GMap2 註冊一個事件處理程序 click,當滑鼠單擊地圖時會回傳兩個參數 overlaypoint。如果單擊了某個標記,則該標記將通過 overlay 參數傳遞給事件處理程序,並且還在標記上觸發 click 事件。否則,被單擊點的地理坐標 GLatLng 將在 point 參數中傳遞。

所以在這個例子中,當單擊地圖某個點時使用 GMarker.setLatLng(point) 重新設定標註座標,並將所取得的座標值填入表單中的 inLatLng 欄位。

方法二︰透過地址輸入取得經緯度座標


看範例所呈現的結果

這裡要介紹一個新的物件 GClientGeocoder 地址解析器,現在已經支援台灣大部分的地址解析,但目前中國地圖地址解析只支援市/縣/區級別的地址。可以透過 GClientGeocoder.getLatLng(address, callback) 的方法對指定的地址進行地址解析,並將結果以 GLatLng 回傳。

在這例子中還使用了 GMap2.panTo(center) 移動地圖中心點。避免當所查詢的地址位置在地圖可見範圍之外,造成使用者找不到的情況。

補充︰透過經緯度座標取得地址 (2009/01/02)

使用方法與透過地址輸入取得經緯度座標很像,只是改用 GClientGeocodergetLocations(GLatLng, callback) 方法。


看範例所呈現的結果

不過所查詢出來的地址還是有點出入,例如︰我們透過地址(臺北市信義區市府路1號)所查出來的經緯度座標為(25.037525, 121.563782),但是用經緯度座標(25.037525, 121.563782)反查地址卻是(110台灣台北市信義區仁愛路四段)。

參考︰
class GMap2︰事件 click、panTo(center)
class GEvent︰addListener(source, event, handler)
class GMarker︰setLatLng(point)
class GClientGeocoder︰getLatLng(address, callback)、getLocations(GLatLng, callback)


更多教學文件在此︰Google Maps API - 前言及目錄

27 則留言:

Indiana 提到...

您好,我正在找「用Google API輸入地址得到座標」的範例,找到Ian大您家。想請問一下,我用IE與Firefox來開您的範例時(許多網路上的其他範例也一樣),輸入相同的搜尋條件:「台中市三民路」,會出現不一樣的搜尋結果。

一般IE會出現三個結果(Ian大您這裡應該是取其中一個顯示),比較正確;但Firefox卻出現一個在豐原的結果,不太正確。請問這個問題您有什麼想法嗎?謝謝!

ps. 這個問題會出現在我找到的所有範例上,但google maps官網則不會有此問題。

Ian 懶惰蟲 提到...

Indiana 你好︰
剛剛使用我的範例搜尋「台中市三民路」,在 IE7 及 Firefox3 所出現的結果是一致的,經緯座標都落在 (24.152721, 120.685339) 的位置上,所以不知道你為什麼會出現這樣的問題。

Josh 提到...

請問你做會像地圖日記的功能嗎?
也就是利用setTimeout去達到多筆資料每隔多少秒就顯示下一筆地點那樣嗎?
可否作個範例教學一下呢?只要二筆資料重複輪流顯示就可以了,不知道方便嗎?
因為我try很多遍,就是一直無法做到,所以大大可以弄一下教學嗎?謝謝!

Ian 懶惰蟲 提到...

Josh 這裡寫了一個簡單的範例,希望有助於解決您的問題,觀看範例

Josh 提到...

很謝謝你!這就是我要的功能,我再好好研究一下,感恩 ^^

Josh 提到...

不好意思,再請問一下,如果訊息視窗的寬度怎樣做限制呢?裡面可以加入html語法嗎?

Ian 懶惰蟲 提到...

Google Maps 的訊息視窗,是可以透過設定 CSS 來改變呈現樣式。
目前我還沒有時間去研究,你可以參考看看。
呈現範例
說明文件 I
說明文件 II

Unknown 提到...

請問,你知道Google有開放用座標反查地址的功能嗎?我已經試出來可以用座標抓靜態地圖,用地址查座標,就差上面那個功能找不到。謝謝!!

Ian 懶惰蟲 提到...

firestoke 關於透過經緯度座標取得地址,已經補充在這篇文上了,您可以參考看看。

匿名 提到...

var myLatLng = new GLatLng(25.04763902653048, 121.51715755462646);

想請問一下這一行是寫死的 還是??
以及這一行的意思

Akou 提到...

您好,請問有沒有可以把lat與lng分別分開寫在兩個文字欄位的寫法呢?

目前的範例是將(lat,lng)一次寫在一個文字欄位上

想請教~~謝謝了

誠摯期待您的回應

匿名 提到...

我想請教你api座標如何取得的
方便的話請加我即時通protect_melove

匿名 提到...

請問lan大大這程式是用什麼語法

Ian 懶惰蟲 提到...

回覆幾個問題︰

1. 這裡介紹的 Google Maps API 是使用 javascript 來撰寫的。
現在 Google 也已經提供 Google Maps API for Flash,懂 Flash ActionScript 的人可以去參考看看。

2. GLatLng 是以緯度和經度表示的地理座標點。
這是 Google Maps API 中定義地圖上座標的主要物件,在地圖上做定位基本上都是靠它。
var myLatLng = new GLatLng(25.04763902653048, 121.51715755462646);
這行其實我只是先將台北火車站緯度和經度的座標點存起來以方便之後使用,如下面兩行。
myMap.setCenter(myLatLng, 15); //將地圖中心點定位在台北火車站
document.getElementById('inLatLng').value = myLatLng.toString(); //將台北火車站緯度和經度的座標值顯示在頁面上

3. GLatLng 有兩個方法 lat() 及 lng(),分別可以取得緯度和經度的座標值。
例如以下兩行就是分別顯示緯度和經度的座標值。
document.getElementById('inLat').value = myLatLng.lat();
document.getElementById('inLng').value = myLatLng.lng();
範例已經做了修改可以參考看看,觀看範例

參考︰
GLatLng︰lat()、lng()

極品軒 提到...

板大的第一個範例 有要在原本的網頁加什麼附帶的程式碼嘛?!

第一個擊點地圖跑出 座標的

我始終TRY不出來 @@ 可以請板大

給點意見嘛 謝謝您

匿名 提到...

請問大大,我用google map api取得2個座標位置,請問大大有沒有辦法取得該兩點位置的路徑規劃嗎?

匿名 提到...

我想請問一下~
如果要將讓地圖能夠用地址搜尋也能夠用座標搜尋,請問要怎麼合併??
但是希望latlng是分成lat、lng兩個欄位來顯示,請教一下板大!!

Youme 提到...

想請教一下
如果想將用地址搜尋、用座標搜尋
這兩種方法合併該怎麼合併??

Ryan 提到...

版大你好..我參考你的程式,改了一下,從資料庫讀地址變數,在IE下正常,但換到firefox,不會轉移到新地址上,

我只有在load()底下加上
if (!empty($Addr))
AddrGps();

另外在body裡
input type="hidden" name="Addr" value=" echo $_REQUEST['Addr'];"

請問如果要在 firefox底下執行,要修改哪些地方,謝謝

Unknown 提到...

有辦法使用這個 透過地址取得座標 然後周邊顯示其他的標記 例如周邊有20個標記就顯示20個標記 其他標記使用 經緯度定位
範例 http://www.j2h.tw/bbs/bbs14/2045.html

像是下面這個範例可以顯示多個標記
地圖顯示多個個標記
範例 http://www.j2h.tw/bbs/bbs14/2046.html

匿名 提到...

你好
我想請問一下押
我要做的網頁是
左邊是放我上傳的圖片
圖片內容有經緯度
而右邊是google map的地圖
點圖片 因為她有經緯度 會對應到google map上
那這一個語法要怎麼寫押

匿名 提到...

我想要請問..
座標是從哪裡看的..
如何去找到一個位址來輸入座標

謝謝

匿名 提到...

請問大大:

如果要取得模糊查詢多筆座標(如輸入地址:台北市信義區學校),要如何做到?

謝謝!

匿名 提到...

請問大大~goolemap api能不能有什麼方法,能取到當前div所顯示的GMap物件下的所有"交叉路口"的GLatlng的點?thx~

匿名 提到...

請問大大~goolemap api能不能有什麼方法,能取到當前div所顯示的GMap物件下的所有"交叉路口"的GLatlng的點?thx~

匿名 提到...

請問大大,可以將地點的圖,改用產品logo圖嗎?

匿名 提到...

請教大大 :

我要從檔案讀入經緯度的數值,請問要如何傳到html來顯示地圖?

謝謝.