當我們使用Google地圖時,在搜索內容後,Google會在地圖上添加一個標記。當我們點擊這個標記,詳細信息窗口將顯示,就像這樣:如何在圖片中動態添加錨點
我搜索了「白宮」,然後創建一個標記「A」。
這並不難。不過我發現一些更有意思的東西:
在地圖視圖中,即使我們不搜索任何東西,當地圖放大到某個指定的等級時,會有一些錨點產生。如果鼠標或點擊它,它會顯示相應的東西,看到的圖像:
這裏看到這一點「14H和F ST NW」。我沒有搜索它,但它顯示了我的一個錨。當我點擊它時,會顯示相應的信息窗口。
但是當我使用Firebug來查看下載內容時,我發現它們只是圖像。我在HTML中找不到任何<a>
標籤。
此外,通過Firebug,我發現當地圖級別發生變化時,瀏覽器會向服務器發送請求以獲取當前地圖視圖中的要素。響應是JSON格式。它包含要素的位置和名稱,然後在地圖中添加錨點。
但我想知道他們如何實現它?
可能的方式來實現這一點:
1)時,地圖縮放或平移,從服務器請求功能部件的位置數據,假設他們得到以下數據(只取白家爲例):
數據:{{名稱: '白宮',緯度:-77經度:38}}
2)結合鼠標事件,以在地圖上的div,這樣的事情:
$("#map").mousemove(function(e){
for(var i=0;i<data.length;i++){
if(e.clientX=getImageX(data[i].x) && e.clientY=getImageY(data[i].y)){
//it mean that the mouse is overing this feature,now set the cousor and show the tip
//show tip,see the iamge:
}
}
});
3)單擊事件綁定到地圖格」
$("#map").mousemove(function(e){
for(var i=0;i<data.length;i++){
if(e.clientX=getImageX(data[i].x) && e.clientY=getImageY(data[i].y)){
//it mean that the mouse is clicking this feature,show the infomation window
//show tip,see the iamge:
}
}
});
以上是我能到吼聲現在。但它似乎還不夠,還是有一些問題:
1)只有當用戶點擊或鼠標點在與點的緯度和經度相同的點上時,功能,但在谷歌地圖,你會發現,如果鼠標在標記(在標記的任何點),小費將顯示。引起筆尖顯示的區域與標記區域相同。
看來,谷歌做些事情是這樣的:
$("#map").mousemove(function(e){
for(var i=0;i<data.length;i++){
if(e.clientX.insideTheMarker(data[i]) && e.clientY=insideTheMarker(data[i])){
//it mean that the mouse is clicking this feature,show the infomation window
}
}
});
但黃鼠狼大小是不一樣的,他們怎麼caculate真正的區域,這將使尖端節目?2)在事件處理函數中,如果當前鼠標的位置與任何特徵匹配,如果當前地圖視圖中的特徵太多,我必須對所有特徵進行迭代,因此它必須導致性能問題。
也許你誤會了我。當我點擊「#map_canvas img」時,沒有任何事情發生,信息窗口只有在點擊img內的點時纔會打開。此外,圖像看起來不像一個錨點,當鼠標懸停在圖像上時,圖像內部的點看起來像是一個錨點。 – hguser 2011-05-28 13:30:44
在這種情況下,他們將屏幕位置從點擊轉換爲座標並以此方式彈出泡泡。相同的一般理論,不同的條件。如果您使用他們的事件函數,[看起來像您在事件中的點擊位置獲取LatLng](http://code.google.com/apis/maps/documentation/javascript/reference.html#MouseEvent)。然後,您應該可以使用[LatLngBounds](http://code.google.com/apis/maps/documentation/javascript/reference.html#LatLngBounds)類來檢查用戶點擊的位置是否在短期內你想要的點。 – lambacck 2011-05-28 13:40:47
謝謝你的回覆,我以這種方式非常有趣,但我能理解,你能給我簡短的例證嗎?首先顯示一個圖像,然後在圖像的某個地方創建一個錨點? – hguser 2011-05-28 13:44:19