Hier ist eine Konturkarte, für die alle Polygone von Ebenen verfügbar sind.
Fragen wir uns, wie die Polygone geglättet werden sollen, wobei alle Scheitelpunkte an ihren exakten Positionen erhalten bleiben.
In der Tat wird die Kontur über Rasterdaten erstellt. Sie können dann vorschlagen, die Rasterdaten zu glätten, und daher wird die resultierende Kontur glatter. Beachten Sie, dass dies nicht wie gewünscht funktioniert, da die Glättungsfunktion wie der Gauß-Filter kleine Datenpakete entfernt und den Bereich der dritten Variablen ändert, z. B. die Höhe, die in meiner Anwendung nicht zulässig ist.
Eigentlich bin ich auf der Suche nach einem Teil des Codes (vorzugsweise in Python ), der das Glätten von 2D-Polygonen (jeder Typ: konvex, konkav, sich selbst schneidend usw.) einigermaßen schmerzlos (Codeseiten vergessen) und genau kann.
Zu Ihrer Information, es gibt eine Funktion in ArcGIS , die dies perfekt macht. Die Verwendung von kommerziellen Anwendungen von Drittanbietern ist jedoch nicht meine Wahl für diese Frage.
1)
Scipy.interpolate:
Wie Sie sehen, sind die resultierenden Splines (rot) nicht zufriedenstellend!
2)
Hier ist das Ergebnis des Code in bestimmten Verwendung hier . Es funktioniert nicht gut!
3)
Für mich sollte die beste Lösung etwa die folgende Abbildung sein, in der ein Quadrat allmählich geglättet wird, indem nur ein Wert geändert wird. Ich hoffe auf ein ähnliches Konzept zum Glätten jeglicher Form von Polygonen.
Erfüllung der Bedingung, dass der Spline die Punkte überschreitet:
4)
Hier ist meine Umsetzung von "Whubers Idee" Zeile für Zeile in Python auf seine Daten. Möglicherweise gibt es einige Fehler, da die Ergebnisse nicht gut sind.
K = 2 ist eine Katastrophe und so für k> = 4.
5)
Ich habe einen Punkt an der problematischen Stelle entfernt und der resultierende Spline ist jetzt identisch mit dem von Whuber. Aber es ist immer noch eine Frage, warum die Methode nicht für alle Fälle funktioniert?
6)
Eine gute Glättung für Whubers Daten kann wie folgt aussehen (gezeichnet von einer Vektorgrafiksoftware), wobei ein zusätzlicher Punkt nahtlos hinzugefügt wurde (vergleiche mit dem Update)
4):
7)
Im Ergebnis der Python-Version von Whubers Code finden Sie einige ikonische Formen:
Beachten Sie, dass die Methode für Polylinien anscheinend nicht funktioniert. Für die Eckpolylinie (Kontur) ist Grün das, was ich will, aber rot. Dies muss behoben werden, da Konturkarten immer Polylinien sind, obwohl geschlossene Polylinien wie in meinen Beispielen als Polygone behandelt werden können. Auch nicht, dass das in Update 4 aufgetretene Problem noch nicht behoben wurde.
8) [mein letzter]
Hier ist die endgültige Lösung (nicht perfekt!):
Denken Sie daran, dass Sie etwas für den Bereich tun müssen, auf den die Sterne zeigen. Mein Code enthält möglicherweise einen Fehler, oder die vorgeschlagene Methode muss weiterentwickelt werden, um alle Situationen zu berücksichtigen und die gewünschten Ergebnisse zu erzielen.