Frage

Ich habe ein ähnliches Problem wie dieser Beitrag. Ich muss bis zu 1000 Polygone auf einer eingebetteten Google Map anzeigen. Die Polygone befinden sich in einer SQL -Datenbank, und ich kann jeweils als einzelne KML -Datei mit einem benutzerdefinierten HTTPHandler (in ASP.NET) wie diesen im laufenden Durchgang rendern http://alpha.foresttransparenz.org/concession.1.kml .

Selbst auf meiner (sehr schnellen) Entwicklungsmaschine dauert es eine Weile, bis ein paar Dutzend Formen geladen werden. Also zwei Fragen wirklich:

  1. Was wäre eine gute Strategie, um diese als Marker anstelle von Overlays zu rendern, sobald ich über ein bestimmtes Zoomniveau hinaus bin?

  2. Gibt es einen öffentlich verfügbaren Algorithmus zur Vereinfachung eines Polygons (Reduzierung der Anzahl der Punkte), damit ich nicht mehr Punkte als Sinn auf einer bestimmten Zoomebene zeige?

War es hilfreich?

Lösung

Für Ihre zweite Frage: Sie brauchen die Douglas-Peucker Generalisierungsalgorithmus

Andere Tipps

Können Sie für Ihre erste Frage den Bereich eines bestimmten Polygons berechnen und jeden Zoomebene auf einen bestimmten Mindestbereich beziehen. Wenn Sie also die Polygon -Verschwinden ein- oder aus -Verschwinden haben und die Marker je nach Zoomebene erscheinen.

Für die zweite Frage würde ich Mark Besseys Vorschlag verwenden.

Ich kenne nicht viel Aobut -KML, aber ich denke, die übliche Lösung für Frage 2 beinhaltet die Wiederholung der Punkte und das Löschen von Liniensegmenten unter einer bestimmten Größe. Dies führt in einigen Fällen einige "unglückliche" Effekte, aber es ist relativ schnell und leicht zu tun.

Ich würde 2 Dinge empfehlen: - Berechnen und kombinieren Sie Polygone, die berührend sind. Dies beinhaltet viel Verarbeitung und harte Mathematik, aber ich habe es getan, damit ich weiß, dass es möglich ist. - Erstellen Sie Ihre eigene Overlay, anstatt KML im PNG -Format zu verwenden, während Sie sie im vorherigen Vorschlag kombinieren. Sie müssen viele PNGs erstellen, aber es lodert schnell auf dem Kunden.

Viel Glück :)

Ich brauchte vor einiger Zeit eine Lösung für Ihre Nr. 2-Frage und nachdem ich einige der verfügbaren Linien-Simplifikations-Algorithmen angesehen hatte, habe ich meine eigenen erstellt.

Der Prozess ist einfach und es scheint gut zu funktionieren, obwohl er etwas langsam sein kann, wenn Sie ihn nicht richtig implementieren:

P[0..n] Ist Ihre Auswahl an Punkten T[n] definiert als das durch Punkte gebildete Dreieck P[n-1], P[n], P[n+1] Max Ist die Anzahl der Punkte, auf die Sie diese Linie reduzieren möchten.

  1. Berechnen Sie die Fläche jedes möglichen Dreiecks T[1..n-1] im Set.
  2. Wählen Sie das Dreieck T[i] mit dem kleinsten Bereich
  3. Entfernen Sie den Punkt P[i] das Dreieck im Wesentlichen abflachen
  4. Berechnen Sie den Bereich der betroffenen Dreiecke neu T[n-1], T[n+1]
  5. Fahren Sie mit Schritt 2 fort, wenn die Anzahl der Punkte> Max
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top