2012-08-03 75 views
3

我有Google地圖應用程序,它在地圖上顯示一些圈子。如下圖所示,某些圈子彼此重疊。處理重疊元素的點擊

我想單擊圓圈時顯示一些額外的信息。問題是,我想在單擊重疊區域時顯示有關更多該圓的信息。

呈現此信息的方法並不重要。它可以是InfoWindow,或者它可以顯示在地圖外的某個DOM元素中。沒關係。

問題是如何處理點擊,它會觸發光標下所有元素上的事件。

Overlapping Circles

回答

2

首先,您可以添加到Circle對象的方法,使您可以檢查它是否包含了地圖上的點擊點:

google.maps.Circle.prototype.contains = function(latLng) { 
    return this.getBounds().contains(latLng) && google.maps.geometry.spherical.computeDistanceBetween(this.getCenter(), latLng) <= this.getRadius(); 
} 

然後,您應該添加所有的社交圈您創建到數組的對象。假設這是我講的數組:

var circles = new Array(); 

最後,當在地圖上的一個點用戶點擊,你應該得到的經度和緯度,並檢查上面的陣列中的所有元素。

var latlng = _CLICKED_LAT_LNG_OBJECT_; // Get this from your map's click event 

for(var i = 0; i < circles.length; i++) { 
    var _circle = circles[i]; 
    if(_circle.contains(latlng)) { 
     // here, you've got a clicked circle ;) 
     // do whatever you want with _circle 
    } 
} 
1

如果你的圈子中的數據來自於你可以在圈子的點擊屬性設置爲false,並單擊事件處理程序附加到地圖本身的數據庫。然後,當發生點擊時,您可以通過AJAX調用將點擊的緯度/經度發送到服務器,並在數據庫中查找哪些圈子覆蓋了該點。不用說,空間啓用的數據庫(如PostgreSQL/PostGIS)會使任務變得更容易。

2

瞭解HTML和JavaScript中的事件冒泡現象,您應該能夠編寫適用於所有重疊元素的事件偵聽器。

http://www.quirksmode.org/js/events_order.html

+1

不確定這是否會工作,因爲google.maps.Circle類不是DOM對象,並且您不能直接訪問表示它的DOM對象。 – Marcelo 2012-08-04 09:31:13