Google Haritalar ile büyük miktarlarda işaretleyicileri işleyebilen bir harita oluşturmak istiyorum (10.000'in üzerinde). Haritayı yavaşlatmamak için, sadece mevcut görünümün içinde bulunan işaretleyicileri çıkaran bir XML dosyası oluşturdum.Google Maps V3: Yalnızca görünüm işaretleyicileri göster - İşaretçileri temizle
Birincisi, harita seçenekleri kurulum için) (başlatmak kullanın: Olay 'tilesloaded' bittiğinde
function initialize() {
var myLatlng = new google.maps.LatLng(51.25503952021694,3.27392578125);
var myOptions = {
zoom: 8,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
google.maps.event.addListener(map, 'tilesloaded', function() {
loadMapFromCurrentBounds(map);
});
}
, ben loadMapFromCurrentBounds(), bu fonksiyonlar akım sınırları alacak kullanmak ve bir istek gönderir Bu artık de görünümdeki olmayan harika, ancak, geçerli kod boşaltması değil işaretleri çalışıyor
function loadMapFromCurrentBounds(map) {
// First, determine the map bounds
var bounds = map.getBounds();
// Then the points
var swPoint = bounds.getSouthWest();
var nePoint = bounds.getNorthEast();
// Now, each individual coordinate
var swLat = swPoint.lat();
var swLng = swPoint.lng();
var neLat = nePoint.lat();
var neLng = nePoint.lng();
downloadUrl("mapsxml.php?swLat="+swLat+"&swLng="+swLng+"&neLat="+neLat+"&neLng="+neLng+"", function(data) {
var xml = parseXml(data);
var markers = xml.documentElement.getElementsByTagName("marker");
var infoWindow = new google.maps.InfoWindow;
for (var i = 0; i < markers.length; i++) {
var address = markers[i].getAttribute("address");
var type = markers[i].getAttribute("type");
var name = markers[i].getAttribute("name");
var point = new google.maps.LatLng(
parseFloat(markers[i].getAttribute("lat")),
parseFloat(markers[i].getAttribute("lng"))
);
var html = "<b>" + name + "</b> <br/>" + address;
var icon = customIcons[type] || {};
var marker = new google.maps.Marker({
map: map,
position: point,
icon: icon.icon,
shadow: icon.shadow});
bindInfoWindow(marker, map, infoWindow, html);
}
})
}
: XML dosyasına geçerli görünümdeki içerde işaretleri göstermeye. Bunun yanı sıra, halihazırda yüklenmiş olan, yine haritayı aynı alanda bir görünüm sürerken haritayı hızlı bir şekilde yavaşlatan işaretleyicileri yeniden yükler.
Görüntüleme görünümü değiştiğinde, yeni işaretçileri yüklemeden önce tüm haritayı temizlemeyi seviyorum. Bunu yapmanın en iyi yolu nedir?
@jeff Hey düzenlemeler için teşekkürler! Ben sadece 'JavaScript' etiketini ekleyerek, soruların cevaplarını * hepsine * vurgulamak için etiketlerin sağında görünen "etiketleri düzenle" bağlantısını kullanarak gerçekten bir sözdizimi vurgulayabileceğinizi bildirmek istedim. İyi şanslar! :) – jmort253
[Marker Clusterer] (https://code.google.com/p/google-maps-utility-library-v3/wiki/Libraries) çok fazla markörle çalışırken yararlı olabilir. – Blazemonger
map.getBounds(). ToUrlValue(). Split (',') 'yaparak köşeleriniz için güzel bir diziye sahip olabilirsiniz. – tim