Ich habe eine große Anzahl von Datenpunkten, die im Wesentlichen die Küste der Welt darstellen. Ich kenne die genaue Auflösung nicht, aber ich würde sagen, es liegt in der Nähe von 5-10 m.
Stellen Sie sich eine Reihe von Punkten vor, die eine gezackte Küste darstellen. Bei einer Auflösung von 1 m sehen wir alle Details und benötigen 50 Datenpunkte, um die Küste korrekt darzustellen. Bei einer Auflösung von 10 km sieht die Küste jedoch wie eine gerade Linie aus und wir benötigen nur 2 Punkte.
Ich schreibe eine Kartenanwendung, bei der die Daten von "Full-Planet" -Auflösungen auf "Street" -Auflösungen skaliert werden müssen. Ich benötige Hilfe beim Reduzieren der Auflösung meiner Datenpunkte und anschließend der Datenmenge für größere Auflösungen.
Ich habe über Vector-Tiling gelesen und denke, dass dies die beste Lösung ist (ich mache bereits so etwas), aber bei den niedrigen Auflösungen ist mein Datensatz immer noch riesig, was bedeutet, dass das Rendern relativ lange dauert Zeit, wo wie die hohen Auflösungen schnell sind, weil der "effektive" Datensatz klein ist (Teilmenge des Ganzen).
Ich versuche herauszufinden, wie ich mein großes Dataset aufnehmen und verkleinern soll, damit die Kacheldaten meiner Gesamtplanetenansicht eine überschaubare Größe haben. Wie erstelle ich die Kachel-Unterdatensätze aus dem größeren vollständigen Datensatz?
Ich benutze gerne ein Tool, aber ich mache es lieber selbst, um zu lernen, wie es gemacht wird.
Antworten:
Wie Sie dieses Problem lösen, hängt vom Einzelfall ab und davon, wie wichtig die tatsächliche Topologie für Sie ist (im Vergleich zu nur der visuellen Darstellung / Renderzeit). Da es Ihr letztes Ziel ist, die Küsten zu verallgemeinern, können Sie einige nützliche Ideen zur Verallgemeinerung finden.
Ein Ansatz nutzt Pufferung, wie hier zu sehen . Ich hatte vor einiger Zeit auch ein ähnliches Problem und habe meine Lösung hier beschrieben .
Kurz gesagt, Sie können separate Vektordatensätze (oder zumindest separate Geometrien) verwenden, die auf verschiedene Ebenen verallgemeinert sind. Dies behebt Ihr Grundproblem, obwohl es keine Kacheln verwendet, aber Sie können diese natürlich trotzdem verwenden, wenn Sie möchten. Wenn Sie Ihr Dataset auf der Grundlage eines Rasters in Kacheln aufteilen möchten, müssen Sie zunächst eine Verallgemeinerung vornehmen, da sonst Lücken zwischen den Kacheln entstehen.
quelle
Sie sollten verschiedene verallgemeinerte Versionen Ihres Datensatzes für Zoomstufen "ganzer Planet" bis zum Nahzoom vorbereiten.
Ein klassischer Verallgemeinerungsalgorithmus ist der Douglas-Peucker-Algorithmus . Sie müssen die Punkte zuerst mit den Küstenlinien verbinden, wenn Sie dies noch nicht getan haben.
quelle
Haben Sie Tilemill für die Herstellung Ihrer Fliesensätze untersucht? Knoten mit unterschiedlichen Zoomstufen werden automatisch verkleinert. https://github.com/mapbox/tilemill
quelle
Möglicherweise wird Ihre Frage nicht beantwortet, sie ist jedoch verwandt. So codiert Google Polylinien einschließlich der Informationen zur Generalisierung: http://code.google.com/apis/maps/documentation/utilities/polylinealgorithm.html
quelle