2009-05-11 2 views
3

Ich stecke hier wieder fest. Ich habe eine Datenbank mit über 120 000 Koordinaten, die ich auf einer in meiner Anwendung integrierten Google Maps anzeigen muss. Die Sache ist die und ich habe den harten Weg gefunden, einfach durch alle Koordinaten zu schlängeln und einen individuellen Marker für jeden zu erstellen und ihn mit der addOverlay-Funktion hinzuzufügen, tötet den Browser. Das muss definitiv der falsche Weg sein - ich habe ein bisschen über Clustering oder Zoom-Level-Bunching gelesen - ich verstehe, dass es keinen Sinn macht, alle Marker zu rendern, besonders wenn die meisten nicht zu sehen sind nicht gerenderte Teile der Karte, außer dass ich keine Ahnung habe, wie ich das zur Arbeit bringen soll.Das Hinzufügen vieler Marker tötet meine Google Maps - wie mache ich das?

Wie behebe ich das hier. Bitte Jungs, die ich hier etwas Hilfe brauchen :(

Antwort

8

Es ist ein guter Vergleich verschiedener Techniken hier http://www.svennerberg.com/2009/01/handling-large-amounts-of-markers-in-google-maps/

jedoch angesichts Ihren Volumen von Markern, mögen Sie auf jeden Fall eine Technik, die nur den Marker macht, die in der aktuellen Ansicht gesehen werden soll (die Zahl ist unter der Annahme, bescheiden - wenn nicht, gibt es Techniken in der Verbindung, um vernünftige Sachen zu tun)

+0

Danke für den Link - ich war vor ein paar Minuten über Clusterer gestolpert, aber Ihre gepostete URL hat großartige Optionen - danke nochmal – Ali

+0

Nach der Suche nach einem Tag fand ich einen guten Artikel. Danke Dan !!! – sampopes

2

ich keine Arbeit mit Google gemacht habe Karten speziell aber vor vielen Monden, war ich an einem Projekt beteiligt, das eine mobile Belegschaft für einen großen Telco verwaltet.

Sie Sie hatten ähnliche Funktionen, da sie Karten hatten, die sie für ihre zugewiesenen Jobs heranziehen konnten (lokal für die Maschine und nicht über das Netzwerk), und wir lösten ein ähnliches Problem, das sehr ähnlich klingt wie Ihres. Punkte von Interesse auf den Karten wurden aufgerufen Orientierungspunkte und wurden durch kleine Markierungen auf der Karte angezeigt, die als Orientierungspunktzeiger bezeichnet wurden, die der Arbeiter auswählen konnte, um eine Textbeschreibung zu erhalten.

Bei minimalem Zoom hätte es war eine Fülle von Wahrzeichen Zeigern, so dass die Karte nutzlos. Wir haben eine Befehlsentscheidung getroffen, um die Orientierungspunktzeiger auf eine kleinere Anzahl (400) zu begrenzen. Um dies zu erreichen, wurde die Karte in eine 20x20-Matrix unterteilt, unabhängig von der Zoomstufe, die uns 400 Matrixelemente lieferte.

Wenn ein Orientierungspunkt das gleiche Matrixelement wie ein anderes verwendet, hat die Anwendung sie kombiniert und einen einzelnen Orientierungspunktzeiger mit dem beschreibenden Text generiert, der den Text aller Orientierungspunkte in diesem Matrixelement enthält.

So gab es nie mehr als 400 Orientierungspunkte. Als der Diener herangezoomt wurde, wurden die Landmarkenzeiger regeneriert und Landmarken konnten in verschiedenen Matrixelementen enden - in diesem Fall wurden sie nicht mehr mit anderen Landmarken kombiniert.

In ähnlicher Weise wurden beim Auszoomen manchmal zwei oder mehr Landmarken in einem einzigen Landmarkenzeiger zusammengefasst.

Das klingt nach dem, was Sie mit "Clustering oder Zoom-Level-Bündelung" erreichen möchten, obwohl ich, wie gesagt, wenig Erfahrung mit Google Maps selbst habe, daher bin ich mir nicht sicher, ob dies möglich ist. Aber angesichts des guten Rufs von Google vermute ich es.

+0

+1 für die Verwendung des Wortes Minion! – andrewWinn

1

Ich empfehle, dass Sie eine Marker-Manager-Klasse such as this one zusammen mit Ihrem vorhandenen Code verwenden. Mit der Marker-Manager-Klasse können Sie Tausende von Markern verwalten und die Speichernutzung optimieren. Es gibt eine Vielzahl von Marker-Managern (es gibt nicht nur einen) und ich schlage vor, Sie ein wenig Google.

3

Wenn Sie wirklich mehr als 120.000 Einzelteile haben, gibt es keine Weise, dass irgendwelche clientseitigen Bündler oder Manager arbeiten. Sie müssen mit den Markern Server-Seite umgehen. Es gibt eine gute Diskussion here mit einigen Optionen, die Ihnen helfen können.

Update: Ich habe dies auf SO vor, aber this tutorial beschreibt eine serverseitige Clustering-Methode in PHP. Es soll mit der Static Maps-API verwendet werden, ich habe es jedoch so erstellt, dass bei jeder Änderung der Ansicht Clustermarkierungen zurückgegeben werden. Es funktioniert ziemlich gut, obwohl es eine Verzögerung beim Übertragen der Markierungen gibt, wenn sich die Ansicht ändert. Leider habe ich es nicht mit mehr als 3.000 Markern probiert - ich weiß nicht, wie gut es mit 120.000 umgehen würde. Viel Glück! etwas stärker als JS für diese

+0

Ich dachte in die gleiche Richtung - dass ich mit jedem Zoomlevel oder so würde ich meine Standorte analysieren und nur die Orte oder Cluster von Standorten ausgeben, die innerhalb der Grenzen des sichtbaren Bildschirms sichtbar sind. Die Sache ist, dass ich wünschte, es gäbe eine Art Code oder ein offenes Projekt, das mir helfen würde, damit anzufangen :(. – Ali

+0

Chris B: Berechnungen in meinem Tutorial sind ziemlich schwer. Wenn Sie 120k Marker haben, sollten Sie wahrscheinlich die Cluster vorberechnen für jede Zoomstufe, sonst wird das Zoomen ziemlich langsam Ich würde Ihren Code sehen wollen Haben Sie es irgendwo online –

+0

Chris B: Oh und vergessen zu erwähnen, dass es eine gute Idee wäre, nur Marker zu holen/cluster, die sich im aktuellen Ansichtsfenster befinden. Sind Ihre Daten in der Datenbank oder zum Beispiel nur in der KML - Datei? –

0

Wenn nur dort ist ...

Ok genug Sarkasmus:).

Haben Sie die Flash Maps-API verwendet? Kevin Macdonald hat es erfolgreich benutzt, um nicht 120K Marker, sondern 1.000.000 Marker zu sammeln. Schauen Sie sich die Million Marker Karte: http://www.spatialdatabox.com/million-marker-map/million-marker-map.html

Map Ansprechbarkeit ist so ziemlich in dieser Lösung-un betroffen. Wenn Sie interessiert sind, können Sie ihn hier an: http://www.spatialdatabox.com/sdb-contact-sales.html

+0

finden Sie eine der oben genannten nützlich? –

0

Es gibt eine ziemlich einfache Leinwand lösungs- Verwendung HTML5 ist, obwohl es seltsam klingt, es ist die schnellste Art und Weise bis zu 10.000 Marker sowie eine Etikett, zu laden, die kein Browser sind sicher, wenn ich eine handhaben kann normale Markierung. Keine konventionellen Marker, sondern Lichtmarker.

+0

Vielen Dank für Ihre Antwort!Bitte lesen Sie die [FAQ zu Eigenwerbung] (http://stackoverflow.com/faq#promotion) sorgfältig durch. Beachten Sie außerdem, dass es erforderlich ist *, dass Sie jedes Mal einen Haftungsausschluss veröffentlichen, wenn Sie auf Ihre eigene Website/Ihr Produkt verlinken. –

Verwandte Themen