2010-10-06 16 views
6

Google Maps API'yı (v3.0) kullanmaya başladım ve şimdiye kadar çok başarılı oldum. Bir veritabanından Latitude & Boylam değerleri ile bir nesne kümesi yüklüyorum, bunları komut dosyasına aktarıyorum ve bunları haritaya eklemek için komut dosyasında döngü halinde yapıyorum. Ben, ilk kez etrafında beklendiği gibi çalıştığını hangi (aşağıdaki kodu bakınız), haritanın zum & sınırları ayarlama "bounds.extend()/map.fitBounds()" yöntemini kullanıyorumArama haritası.fitBounds() Google Haritalar API'sında Çoklu Zamanlar v3.0

; ancak, mevcut işaretleyicileri temizlerseniz, başka bir nesne kümesini getirip aynı eşleme örneğindeki aynı şeyi yaparsa, yanlış bir şekilde ayarlar, bu da genellikle en az yakınlaştırmaya neden olur (bir astronot görüntüsü).

Şüphem, benim harita nesnesinin, verdiğim önceki sınır kümesinin bir belleğine sahip olması ve yenilerini atamadan önce bu sınırları temizlemenin bir yolunu bulmam gerektiğidir. çok emin ol.

Herhangi bir yardım büyük beğeni topluyor!

var locationList = []; 
for (var i = 0; i < mapPoints.length; i++) { // mapPoints is a collection of DTOs 
    var mapPoint = mapPoints[i]; 
    var location = new google.maps.LatLng(mapPoint.Latitude, mapPoint.Longitude); 
    locationList.push(location); 

    var marker = new google.maps.Marker({ 
     map: map, 
     icon: '/Content/images/map/' + mapPoint.Status.Icon, 
     shadow: '/Content/images/map/shadow.png', 
     position: location 
    }); 
    markers.push(marker); // markers is an Array that is managed outside this loop 
} 

var bounds = new google.maps.LatLngBounds(); 
for (var j = 0; j < locationList.length; j++) 
    bounds.extend(locationList[j]); 
map.fitBounds(bounds); 
+0

Yeni bir işaret kümesi yüklediğinizde 'locationList' değişkenini temizler misiniz? –

+0

'locationList' her zaman başlatılır (kod örneğinde ilk satır) ve döngü başlamadan önce boştur. – egoodberry

cevap

12

Bu, cevap değil, tabiri caizse, ama Google Maps JavaScript API v3 grubundaki bir thread keşfedilen bir (biraz hacky) geçici çözüm:

//map.fitBounds(bounds); 
setTimeout(function() { map.fitBounds(bounds); }, 1); 
+0

Bu işe yarıyor! Ama nedenini bilmek isterim ... – coderama

+0

setTimeout veya angular'ın $ timeout'u, çalıştırılmadan önce mevcut özet döngüsünün tamamlanmasını beklerken, bunun neden işe yaradığını tam olarak bilmiyorum, sanırım başka bir süreçle çakışıyor. fitBounds henüz tamamlanmadı. Bu sürecin tamamlanma olayını dinlemek daha iyi bir seçenek olabilir, yani bunun ne olduğunu biliyorsanız. – Sev

+0

Benim için de çalışıyor. Tuhaf. –

0

yukarıdaki eğer Cevap sizin için işe yaramıyor (benim için yapmadı), sorun bootstrap içinde olabilir (kullandığınızı varsayarak). bootstrap modals bir harita nesnesini gömdüğümde özel olarak her türlü üretken davranışı yaratır. Kendisini meraklı bir şekilde düzeltirsem/orada bir 'uyarı' düşürdüğümde .. her durumda kendi problemlerimi çözerek kendi problemlerimi çözdüm. (yani, bootstraps modals kullanmayan).

İlgili konular