2009-04-29 15 views

Antwort

0

Mögliche Wege, um dieses Problem zu lösen:

  • baut die JSON auf server, der je nach Zoomstufe (con: Bedarf nachladen nach einem Zoom, Pro: Nur kleine amouts von Daten müssen geladen werden)
  • die Informationen darüber enthalten, wie ein Marker in den JSON Daten zugänglich ist (pro: nur einmal Daten geladen werden müssen, mit: durchlaufen die Daten mit JavaScript)
  • berechnen sichtbare Markierungen in JavaScript (pro: sehr dynamisch, mit: schwere Rechenlast)
8

Es gibt die Vorstellung eines „Begrenzungsrechteck“ für eine Kartenansicht. Die Karte api liefert Ihnen dies als zwei Koordinatenpaare für Länge/Länge - eine für die SW-Ecke und eine für die NE-Ecke. Wenn Sie über einen benutzerdefinierten Datendienst verfügen, der JSON-Punkte zurückgibt, müssen Sie diese Koordinaten als Eingabe akzeptieren und das zurückgegebene Dataset entsprechend anpassen (am wahrscheinlichsten als WHERE-Klausel in Ihrer SELECT-Anweisung).

Ich habe nicht die Details, dieses rechteckige Rechteck auswendig zu lernen, aber das ist es, was API docs sind.

1

Ja, ich habe etwas Ähnliches in einer Anwendung für eine lokale Behörde gemacht, wo wir das Volumen jedes Haus gezeigt haben, das über 6.000 ungeraden Haushalten recycelt wurde. Da das Gesamtvolumen der Daten (einschließlich Adress- und Statistikinformationen für jeden Haushalt) ziemlich groß war, führte das Zurückziehen der gesamten Datendatei in einem Durchgang dazu, dass der Browser scheinbar hängen blieb.

Also im AJAX-Aufruf an die Datenbank gesendet wir die umschließenden Rechteckkoordinaten (Breite, Länge) des Kartenbereichs dann nur die Punkte, die wir sichtbar sind. 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 das Map-Draw-Ereignis ebenfalls erfassen und dies automatisch ausführen können.

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 zum MarkerManager hinzuzufügen und sie nur auf der aktuellen Zoomstufe sichtbar zu machen.

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.

6

Es gibt eine neue Bibliothek namens MarketClustered, die Ihnen helfen

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

Auch wenn die Daten zu groß ist, denke ich, dass besser wird die Karte werden alle Daten zu füttern, und es lassen mach es so.

+7

Irgendetwas über 2000 Marker mit MarkerClusterer wird zu langsam für mich (das ist in Firefox - Chrome und Safari 4 sind gut bis zu etwa 8000). Allerdings hängt es davon ab, wie dicht die Marker sind. Ich stimme zu, dass es wahrscheinlich besser wäre, die Daten auf einmal zu importieren, anstatt Chunks zu senden, wenn sich der Zoom ändert. –

+1

Gut, dass Sie echte Daten haben. Upvoted Kommentar. –

Verwandte Themen