-1

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:

  1. 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

  • Karte aktualisieren
  • Jedes Mal Benutzer zieht die Bedürfnisse entfernt werden und 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; 
    }; 
    
  • Antwort

    0

    könnten Sie versuchen Google Map Marker Clusterer verwenden. Sie blendet die Marker bei niedrigen Zoomstufen aus und zeigt sie bei höheren Zoomstufen an und ermöglicht das Hinzufügen einer großen Anzahl von Markern.

    Verwandte Themen