Google Maps - Tausende von Markern - JSON

8

Im folgenden Beispiel werden die Marker von einem JSON geladen.

Wenn es 20.000 Marker gibt, wird der JSON ziemlich groß sein.

Gibt es eine Möglichkeit, verschiedene JSON-Dateien entsprechend der Zoomstufe zu senden, anstatt ein riesiges Array zu senden?

Ссылка

    
Franek 29.04.2009, 18:57
quelle

5 Antworten

8

Es gibt die Vorstellung eines "Begrenzungsrechtecks" für eine Kartenansicht. Die Karte api liefert Ihnen diese als zwei Koordinatenpaare für die Länge / Länge - eine für die SW-Ecke und eine für die NE-Ecke.

Wenn Sie also einen benutzerdefinierten Datendienst haben, der JSON-Punkte zurückgibt, müssen Sie diese Koordinaten als Eingabe akzeptieren und das zurückgegebene Dataset entsprechend anpassen (höchstwahrscheinlich als WHERE-Klausel in Ihrer SELECT-Anweisung).

Ich habe nicht die Details, wie man dieses umrahmende Rechteck auswendig lernt, aber das sind API-Dokumente für.

    
Peter Bailey 29.04.2009 19:04
quelle
6

Es gibt eine neue Bibliothek namens MarketClustered , die Ihnen helfen wird

alt text http://gmaps-samples.googlecode.com/svn/trunk/images /screenshot_clusterereffect.jpg

Auch wenn die Daten zu groß sind, denke ich, dass es besser ist, die Karte mit allen Daten zu versorgen, und lass es so machen.

    
Eduardo Molteni 29.04.2009 21:14
quelle
1

Ja, ich habe etwas Ähnliches in einem Antrag für eine lokale Behörde gemacht, wo wir die Menge jedes Hauses gezeigt haben, das über 6.000 ungeraden Haushalten recycelt wurde. Da die Gesamtmenge der Daten (die Adressen und statistische Informationen für jeden Haushalt enthielten) ziemlich groß war, führte das Zurückziehen der gesamten Datendatei in einem Rutsch dazu, dass der Browser scheinbar hängen blieb.

Anstatt also im AJAX-Aufruf an die Datenbank die Koordinaten des Begrenzungsrechtecks ​​(Breite, Länge) des Kartenbereichs zu senden, haben wir nur die sichtbaren Punkte zurückgeliefert. Aufgrund der Art der Anwendung war eine benutzergesteuerte Schaltfläche zum Abrufen von Daten durchaus akzeptabel, aber es gibt offensichtlich viele andere Variationen, die Sie mit dem Thema spielen können - sobald Sie die Begrenzungskoordinaten an die Serverseite übergeben, können Sie entscheiden, was um dort zu tun - zum Beispiel nur eine Teilmenge zurückgeben, wenn die Zoomstufe zu hoch ist. Sie sollten in der Lage sein, das Map-Draw-Ereignis ebenfalls zu erfassen und dies automatisch auszuführen.

    
Cruachan 29.04.2009 19:09
quelle
1

Wenn sich der Zoom ändert, senden Sie die neue Zoomstufe an Ihren JSON-Dienst und geben Sie die Markierungen zurück, die auf dieser Ebene sichtbar sein sollen. Verwenden Sie addMarkers () , um die Ergebnisse zu MarkerManager hinzuzufügen und zu erstellen Sie sind nur auf der aktuellen Zoomstufe sichtbar.

Die anderen Antworten hier haben vorgeschlagen, nur die Markierungen in der aktuellen Ansicht zurückzugeben, aber Sie könnten auch alle Markierungen auf dieser Zoomstufe zurückgeben. Es hängt davon ab, wie viel Sie über die Marker wissen, die Sie auf jeder Ebene anzeigen möchten.

    
Chris B 29.04.2009 20:58
quelle
0

Mögliche Wege zur Lösung dieses Problems:

  • Erstellen Sie die JSON serverseitig, abhängig vom Zoomlevel (con: muss nach einem Zoom neu geladen werden, pro: nur kleine Datenmengen müssen geladen werden)
  • Fügen Sie die Informationen darüber hinzu, wie auf einen Marker in den JSON -Daten zugegriffen werden kann (pro: nur einmal müssen Daten geladen werden, con: iterieren Sie die Daten mit JavaScript )
  • Berechne sichtbare Marker in JavaScript (pro: sehr dynamisch, con: starke Rechenlast)
TheHippo 29.04.2009 19:03
quelle