Ich habe eine große Anzahl von Markern, die ich basierend auf Benutzer Sicht anzeigen möchte. Ich bin auf der Suche nach dem effizientesten Weg, um meine Karte schnell zu aktualisieren, wenn der Benutzer einen Blickwinkel ändert. Zeigen Sie mit anderen Worten nur diese Marker an, die in Grenzen fallen (lg, ln).Optimierung für Kartendaten
Derzeit meine Lösung ist folgende:
- Auf Seite lädt alle Daten über alle Orte aus dem Server ziehen und speichern sie in einem Array. Karte entfernt alte Markierungen und setzen Sie neue, die fällt in gebunden
Aktuelle Lösungen funktioniert, aber langsam und ineffizient, um Komplexität zu aktualisieren Karte O(N*M)
wo N
alten Marker
M
neue Marker, die auf der Karte platziert werden müssen. Ich frage mich, ob jemand eine Idee hat, wie man es schneller macht als das?
Wie können Sie nur die Marker erkennen, die aktualisiert werden müssen (entfernt/hinzugefügt)?
Ich bin im Allgemeinen auf der Suche nach Optimierungsvorschläge - das könnte algorithmische Verbesserung, Technologie oder Architektur (Verarbeitung im Backend?).
Aktuelle Code:
var places = function(){} // Some function that pulls a lot of places on page load
function updatePlaces(places){
google.maps.Map.prototype.clearMarkers();
if(places != null){
for(var i = 0; i < places.length; i++){
var lat = places[i].lat;
var lng = places[i].lng;
var position = new google.maps.LatLng(lat, lng);
if(map.getBounds().contains(position) && placedMarkers < markerLimitNumber) {
var marker = new MarkerWithLabel({
position: position,
draggable: false,
raiseOnDrag: true,
map: map,
labelContent: '',
labelAnchor: new google.maps.Point(-10, 15),
labelClass: "labels", // the CSS class for the label
labelStyle: {opacity: 1.0},
icon: 'images/markers/grey_circle_small.png'
});
marker.addListener('click', function(){});
markers.push(marker);
placedMarkers = placedMarkers + 1;
}
}
}
}
google.maps.Map.prototype.clearMarkers = function() {
for(var i=0; i < markers.length; i++){
markers[i].setMap(null);
}
markers = new Array();
placedMarkers = 0;
};