2012-01-07 11 views
16

Bir haritanın etrafında noktalı işaretleyiciler ve bulunduğunuz yeri işaretleyen bir işaretçi üzerinde yarıçap (daire kaplaması) var (her hareket ettiğinizde değişir). Diğer işaretçilerin dairenin içine girip girmediğini kontrol etmenin bir yolu var mı?İşaretçinin Google Haritalar'da daire yerleşimi içinde olup olmadığını algıla (Javascript API V3)

Sonra İşaretçinizde ve diğer işaretleyici ile arasındaki mesafeyi hesaplayarak birbirlerine işaretleyici döngü ve geometri kitaplığını kullanarak bu sorunu var

GÜNCELLEME basit daha az 100 ise ifadesi görmek için ise metre.

function checkAllChests() { 
    var Current = 0; 
    $.each(treasureArray, function() { 
     //var thisLocation = treasureArray[Current].getPosition(); 

     var distanceBetween = Math.ceil(google.maps.geometry.spherical.computeDistanceBetween(treasureArray[Current].getPosition(), marker_me.getPosition())); 
     if(distanceBetween < 100) { 
      alert('CAN OPEN THIS CHEST'); 
     } 
     Current++; 
    }); 
} 

Yukarıdaki kod jQuery kullandığını unutmayın istiyorum, bu yüzden jQuery kullanmıyorsanız işe yaramaz.

+0

Kendi soruya – duncan

cevap

45

google.maps.Circle sınıfına contains yöntemini eklemenin bir yolu. Öncelikle, sınırlayıcı kutuda bile olmayan bir noktayı hariç tutmak için sınırlayıcı kutuyu kullanır. Sınırlayıcı kutuda ise, o noktadan mesafeyi yarıçaplı merkezle karşılaştırır ve ancak mesafe yarıçaptan daha kısa olduğunda doğru döner.

Aşağıdaki javascript'i ekledikten sonra, circle nesnesinde includes() yöntemini çağırabilirsiniz.

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

bir cevap olarak çözüm gönderilmesi gerekiyor Neden sadece mesafeyi hesaplamak ve yarıçapı ile karşılaştırmak? – zavidovych

+0

Sınır hesaplaması yapmak çok daha ucuz bir hesaplamadır (sadece <= and > = kullanır), bu nedenle sadece çevreleyen dairelerdeki mesafenin daha pahalı hesaplanmasını yapmadan önce herhangi bir daireyi dışlamak için kullanın (küresel mesafe karmaşıktır, daha basit bir pitagor mesafesi hala nispeten pahalı) – Mark

+0

Dikdörtgen için benzer bir yöntem var mı? –

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

1. Sadece açıklama yapmadan kodu dökmeyin. 2. Cevaplamadan önce diğer cevapları kontrol edin. Bu kod başka bir cevapta zaten mevcut. –

İlgili konular