Das ist seltsam. Ich verwende den Marker-Clusterer, um alle meine Marker zu bündeln, aber das erste Mal, wenn die Karte rendert und wenn ich versuche, sie zu ziehen oder zu schwenken - es hängt und Firefox sagt mir, dass das Skript es verlangsamt, also muss ich das Skript stoppen . Aber wenn ich es auszoomt - es zoomt normal und schwenkt es von da an keine Probleme - ich habe keine Ahnung, was hier schief geht. Hier ist mein Code bin ich etwas fehlt hier - etwas falsch mit meiner Initialisierung sein muss:Google Maps mit Marker CLusterer - Karte hängt !!! Warum!
var map = null;
function initializeGMaps() {
if (GBrowserIsCompatible())
{
map = new GMap2(document.getElementById("map_canvas"));
{
var side_bar_html = "";
var gmarkers = [];
var htmls = [];
var i = 0;
iconBlue = new GIcon();
// A function to create the marker and set up the event window
function createMarker(point,name,html) {
iconBlue.image = 'http://labs.google.com/ridefinder/images/mm_20_yellow.png';
iconBlue.shadow = 'http://labs.google.com/ridefinder/images/mm_20_shadow.png';
iconBlue.iconSize = new GSize(12, 20);
iconBlue.shadowSize = new GSize(22, 20);
iconBlue.iconAnchor = new GPoint(6, 20);
iconBlue.infoWindowAnchor = new GPoint(5, 1);
var marker = new GMarker(point,{ icon:iconBlue, });
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml(html);
});
gmarkers[i] = marker;
htmls[i] = html;
side_bar_html += '<a href="javascript:myclick(' + i + ')">' + name + '<\/a><br>';
i++;
return marker;
}
// This function picks up the click and opens the corresponding info window
function myclick(i) {
gmarkers[i].openInfoWindowHtml(htmls[i]);
}
// create the map
map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(new GLatLng(43.907787, -50.359741), 5);
var customUI = map.getDefaultUI();
customUI.controls.maptypecontrol = false;
customUI.controls.menumaptypecontrol = true;
map.setUI(customUI);
// A function to read the data
function readMap() {
var url='get-map-markers.php';
var request = GXmlHttp.create();
request.open("GET", url, true);
request.onreadystatechange = function() {
if (request.readyState == 4) {
var xmlDoc = request.responseXML;
// obtain the array of markers and loop through it
var markers = xmlDoc.documentElement.getElementsByTagName("marker");
// hide the info window, otherwise it still stays open where the removed marker used to be
map.getInfoWindow().hide();
map.clearOverlays();
// empty the array
allmarkers = [];
//var clusterer = new Clusterer(map);
for (var i = 0; i < markers.length; i++) {
// obtain the attribues of each marker
var lat = parseFloat(markers[i].getAttribute("lat"));
var lng = parseFloat(markers[i].getAttribute("lng"));
var point = new GLatLng(lat,lng);
var html = markers[i].getAttribute("html");
var label = markers[i].getAttribute("label");
// create the marker
var marker = createMarker(point,label,html);
//map.addOverlay(marker);
allmarkers.push(marker);
//clusterer.AddMarker(marker, html);
}
var markerCluster = new MarkerClusterer(map, allmarkers);
// put the assembled side_bar_html contents into the side_bar div
}
}
request.send(null);
}
readMap();
}
}
}
$(document).ready(function() { initializeGMaps(); });
$('body').unload(function() { GUnload(); });
UPDATE: Ich habe gerade bemerkt, dass das Skript bei google.com verursacht die Seite langsam sein: ? (wie das Problem beheben: Was habe ich in meinem Code getan, um dieses Verhalten zu bringen
Wie viele Marker hast du? Friert der Browser beim Analysieren der XML-Datei oder danach? Und können Sie einen Link zu Ihrer Seite posten? –
Wie gesagt, ich teste mit ein paar tausend Markern und es ist irgendwie langsam. Im Grunde braucht es eine Weile, um alle Markierungen, die ich bemerkt habe, zu laden - danach ist es glatt segelnd. Aber es ist die gleiche Anwendung im anderen Thread mit rund 120 000 Markern, also nehme ich Ihren Vorschlag für einen Server-basierten Clusterer. Außer ich kenne keine :( – Ali
Ich weiß nicht, ob Sie es gesehen haben, aber ich fügte ein Update zu meiner Antwort dort mit einem Link zu einigen Server-Seite Clustering-Code, den Sie für Ihre Zwecke anpassen könnten. Überprüfen Sie es und versuche es. –