9

Çektiğim yaklaşım (n) belirteçlerin konumları için otomatik uyum bölmesi için şimdiye kadar olmuştur:çeşitli yerlerde

function addMarker(query) { 
    var geocoder = new google.maps.Geocoder(); 
    var afterGeocode = $.Deferred(); 

    // Geocode 'query' which is the address of a location. 
    geocoder.geocode( 
      { address: query }, 
      function(results, status){ 

        if(status === 'OK'){ 
         afterGeocode.resolve(results); // Activate deferred. 
        } 
      } 
    ); 

    afterGeocode.then(function(results){ 
     var mOptions = { 
      position: results[0].geometry.location, 
      map: map 
     } 

     // Create and drop in marker. 
     var marker = new google.maps.Marker(mOptions); 
     marker.setAnimation(google.maps.Animation.DROP);  

     var current_bounds = map.getBounds(); // Get current bounds of map 
     // use the extend() function of the latlngbounds object 
     // to incorporate the location of the marker 
     var new_bounds = current_bounds.extend(results[0].geometry.location); 
     map.fitBounds(new_bounds); // fit the map to those bounds 
    }); 
} 

İçine çalıştırıyorum sorun olduğunu harita açıklanamaz Yeni işaretleyicinin geçerli görünümde olup olmadığına bakılmaksızın, bir miktar kadar küçültme.

Neyi yanlış yapıyorum?

EK

Ben geçiş yapıldı sonra harita sınırları (new_new_bounds) yakalamak için günlükleri ve ek değişken eklendi

current_bounds = // Map bounds before anything is done. 
    {-112.39575760000002, 33.60691883366427}, 
    {-112.39295444655761, 33.639099} 

new_bounds = // From after the extend 
    {-112.39295444655761, 33.60691883366427}, 
    {-112.39575760000002, 33.639099} 

new_new_bounds = // From after the fitbounds 
    {-112.33942438265382, 33.588697452015374}, 
    {-112.44928766390382, 33.657309727063996} 
+0

new_bounds söylediğini Ne 's sınırları genişletmek peşinde? –

+0

Tanılama ile güncellendi. – dclowd9901

+0

O (x1, y1), (x2, y2) den sınırları değişiklik benziyor -> (x2, y1), (x1, y2) bir soruna neden oluyor. % 100 değilim, ama başlayacağım yer burası. –

cevap

8

Tamam, bu kadar çekişmelerin ardından, sorunun bir haritanın sınırları fitBounds() sonra, bir haritanın sınırları aynı değildir olduğunu çıkıyor. Ne, (sanırım) olur Google Eğer fitBounds() yönteminde verin sınırları alır ve sonra bunları pedleri olduğunu. Geçerli sınırları fitBounds()'a her gönderdiğinizde, sınırlara (x, y) uymayacaksınız, sınırlara (x + m, y + m) sığacaksınız, burada m = keyfi kenar boşluğu.

var current_bounds = map.getBounds(); 
var marker_pos = marker.getPosition(); 

if(!current_bounds.contains(marker_pos)){ 

    var new_bounds = current_bounds.extend(marker_pos); 
    map.fitBounds(new_bounds); 
} 

Yani, harita bir işaretleyici mevcut harita sınırları dışına düşüyorsa sadece uyum sınırları yerleştirilir eğer: bahsedilen

, en iyi yaklaşım bu oldu. Umarım bu soruna varan herkes yardımcı olur.

0

Olası bir açıklama rastgele yeni yerleştirilir olmasıdır z eğrisinin boşluğuna işaretleyin. Bir z-eğrisi recursivley haritayı 4 küçük fayansa ayırır, ancak bu aynı zamanda fayanslar arasında boşlukların olmasının da sebebidir. Harita uygulamaları için bir hilbert eğrisi veya bir moore eğrisi kullanmak daha iyi bir yol olacaktır. Bu sorunu kapsayan patentli bir arama algoritması var, bence bu dörtlüde çok boyutlu aralık sorgusu olarak adlandırılıyor. Nick'in hilbert curce quadtree uzaysal dizin blogunu aramak istiyorsun.

+0

Cevabınızı izleyerek zor bir zaman geçiriyorum. Sadece v3 API'sı tarafından sağlanan standart kütüphaneyi kullanıyorum. Sorgu sadece bir adres veya bir adresin parçasıdır. – dclowd9901

+0

dclowd, cevabımı düzelttim! – Bytemain

İlgili konular