Der Titel ist also etwas umständlich. Ich werde einige Hintergrundinformationen geben und dann meine Frage stellen.
Hintergrund : Ich arbeite als Entwickler von Web- GIS- Anwendungen, habe aber in meiner Freizeit mit dem Rendern von Karten und der Verbesserung der Datenaustauschformate gespielt. Ich arbeite nur im 2D-Raum.
Ein interessantes Problem, auf das ich gestoßen bin, ist, dass beim Rendern eines Polygons in kleinem Maßstab (herausgezoomt) viele der Scheitelpunkte redundant sind. Ein Extremfall wäre, dass Sie ein Polygon mit 500.000 Eckpunkten haben, das nur ein einziges Pixel einnimmt. Wenn Sie diese Daten an den Browser senden, ist es sinnvoll, ~ 499.999 dieser Scheitelpunkte wegzulassen. Eine Möglichkeit, dies zu erreichen, besteht darin, ein Bild auf einem Server zu rendern und es als PNG zu senden: voila, das ist ein Punkt. Manchmal möchten wir jedoch, dass Daten an den Browser gesendet werden, wo sie mit SVG (oder Canvas oder Webgl) gerendert werden können, damit sie interaktiv sind.
Das Problem : Es stellt sich heraus, dass es mit modernen geografischen Datensätzen sehr einfach ist, die Rendering-Fähigkeiten von SVG zu überlasten. Um mit diesen Einschränkungen fertig zu werden, versuche ich herauszufinden, wie ein Datensatz für einen bestimmten Maßstab und eine bestimmte Kartenausdehnung (und gegebenenfalls für eine bekannte Breite und Höhe der Kartenpixel) visuell verlustfrei reduziert werden kann .
Ich habe nur mit dem Douglas-Peucker-Algorithmus eine große Reduzierung der Datengröße erzielt , und ich glaube, ich habe es geschafft, die Polygone auf ein Pixel genau zu halten. Leider behält Douglas-Peucker die Topologie nicht bei, sodass sich die Darstellung der Grenzen zwischen Polygonen geändert hat. Ich konnte nicht ohne weiteres andere Algorithmen finden, um sie auszuprobieren und an den Zweck anzupassen, aber ich habe nicht viel CS / Algorithmus-Hintergrund und erkenne sie möglicherweise nicht, wenn ich sie sehe.