2016-01-02 20 views
7

Ich habe verzweifelt nach der richtigen Lösung gesucht, die bis zu 50 000 Markern (und warum nicht noch mehr, wenn der Server damit umgehen kann) während auf meinem Server einfach sein kann und ich mache dies seit Tagen .Serverseitiges Clustering?


Konzept ist so etwas wie dieses:

enter image description here


  • Was wäre die beste Lösung/Sprache für Clustering Server Seite sein? Ich suche keinen großen Arbeitscode, aber ich muss in die richtige Richtung gedrängt werden.
  • Wie „Cache“ oder „mark“ bereits geladene Cluster/Marker, so dass Sie nicht nachladen Marker/Cluster, die bereits geladen wurden, wenn Karte in/out oder verrissen gezoomt wird gerade?

Theorie:

Richtiger Weg scheint ähnlich wie dies zu realisieren:

  • Wenn Karte verkleinert wird und es gibt eine Menge von Markern, Griff Clustering in Server
  • Wenn die Karte so weit gezoomt ist, dass alle Markierungen nicht mehr in das Ansichtsfenster passen, clustern Sie nur m arkers, die im Ansichtsfenster sind - auch Server
  • Wenn Zoom so groß, dass die Anzahl des Markers in Ansichtsfenster klein wird (< 500 zum Beispiel), cluster in browser via JS

Data I bekommt könnte in Server-Seite verwenden und die ich auch per JSON zum Browser senden könnte:

  • Map Grenzen über Ajax an den Server gesendet, wenn Anfrage
  • Gesamtanzahl von Markern aus Datenbankabfrage
  • Koordinaten von Markern aus Datenbankabfrage
  • gemacht wird
  • Wahrscheinlich etwas anderes wichtig/nützlich, dass im derzeit nicht
  • Realisierung

Antwort

2

Ich arbeite mit Google Maps-Anwendungen mit 50.000 100.000 Polygon Es hat sich als sehr nützlich erwiesen, die Polygone in eine Reihe von Regionen zu organisieren (Blätter Logik, Flächen oder ähnliches). Mit einem Array von bereits angezeigten Regionen, die über Ajax an den Server gesendet werden, konnte ich zusammen mit den gebundenen Koordinaten nur Regionen auswählen, die noch nicht angezeigt wurden, und somit die Zeit für das Rendering von Polygonen reduzieren, z Der Rest der Strategie ist richtig.Für eine gründlichere Bewertung sollte in einer sozialen wie SO tief in die Technik wenig praktikabel werden.

Für die serverseitige Sprache sind sie alle in Ordnung, ich persönlich benutze im Moment PHP und Framework Yii2 mit PDO-Treiber für MySQL. Es ist wichtig, eine Umgebung zu verwenden, die den Zugriff auf die Datenbank sehr einfach und effizient macht.

Unter diesen Bedingungen sind die Verwendung einer guten Organisation des Clusters und die Anzeige von Polygonen Regionen, wenn die Zoomstufe ermöglicht es Anwendungen, Karten sehr google macht

Durchführung

Bitte nehmen Sie zur Kenntnis, dass das Auftreten von Markern schnellen als die der Polygone, da es weniger die Anzahl der beteiligten Koordinaten und ihre grafischen Eigenschaften ist.

Für eine allgemeine Frage wie Ihre ist schwierig finden Sie eine gute Antwort online. Für die Regionen hängt von der Dimension der von Ihnen verwalteten Fläche und der durchschnittlichen Dichte der Marker ab. Für einen Bereich, der nicht in der Nähe des Pols liegt, können Sie einen Bruchteil der Koordinate verwenden. Wenn Ihr Geo-Punkt ein Attribut hat, das sich auf den Bereich bezieht, können Sie sie verwenden. Sie können Formeln online finden, um den Zoom mit einer ungefähren Dimension des Bereichs zu verknüpfen. Verlasse auch, wie die Sammlung von Markern gemacht wird. In meinem Fall habe ich während der Sammlung ein Attribut für diesen Bedarf.

Für die Überprüfung ist ein Marker oder eine Gruppe von Markern bereits in Karten verwende ich einfach Vektor und verwenden Sie dies (über Ajax) für den dynamischen Austausch mit dem Server. Zuerst einmal ist der Vektor leer und nach und nach enthält der Vektor Elemente für "wissen", was bereits angezeigt wird.

+0

Wie gehen Sie mit dieser _region/area_logik um, damit bereits geladene Marker auf dieser bestimmten Zoomstufe nicht erneut geladen werden? Das ist zur Zeit mein größtes Problem. Auch, wie man effektiv prüft, ob Markierung in Karte _bounds/viewport_ ist? So viele unbeantwortete Fragen und online gibt es keine effektiven Lösungen. – Solo

+0

Ich habe die Antwort aktualisiert .. Ich hoffe, das ist nützlich, sonst müssen Sie mehrere spezifische Frage stellen. – scaisEdge