Polygon aus Punktwolke

Hallo zusammen.

Wir haben eine beliebig große Menge von Punktgeometrien, aus der wir ein Polygon erzeugen wollen, dessen Begrenzung entlang der äußeren Punkte der Punktwolke verlaufen soll.
Voronoi möchten wir aus Gründen der Performance lieber vermeiden, zumal wir u. U. mit mehreren 1000 Punktgeometrien rechnen müssen. Zurzeit versuche ich mit ST_Buffer und ST_Union bzw ST_Collect erfolgreich, eine Fläche herzustellen, die allerdings um den Radius eines Buffers über die Punktwolke hinausragt. Versuche mit ST_Scale, das Polygon entsprechend zu verkleinern, scheitern daran, dass ST_Scale die Geometrien nicht nur verkleinert, sondern auch verschiebt. Natürlich könnte ich mit ST_TransScale die Fläche zurückschieben, doch fehlt mir jede Idee, wie ich hier DeltaX und DeltaY ermitteln kann.
Auch mit ST_Simplify habe ich hier so meine Probleme, weil ich nicht weiß, welcher Algorithmus dahinter steckt: mit Try And Error komme ich zu einem einigermaßen vernünftigen Ergebnis, aber das bringt’s natürlich nicht auf die Dauer.
Gibt es vielleicht andere Methoden als die, die ich bisher versucht habe?

Ich danke Euch schon jetzt für Eure Antworten.

Otfrid

Du könntest das von st_buffer erstellte Polygon in eine Linie verwandeln und nochmal um den gleichen Betrag buffern. Vom entstehenden Donut-Polygon nimmtst du den inneren Ring und hast dein Polygon.
Vielleicht reicht ja aber auch Complexhull, wenn keine Einsprünge da sind?

Grüssle Uwe

Ich bin mir nicht ganz sicher ob es das ist was du suchst und ich habe es auf die schnelle nicht überprüfen können, aber probiere mal:

ST_Buffer(the_geom, x)

Wobei x < 0 ist. Dadurch verkleinerst du das Polygon.

Beispiel:

ST_Buffer(the_geom, -100)

sollte in einem metrischen System die Polygongrenzen um 100 Meter einrücken.

Lieber Gisman, lieber Maik.

Danke für Eure raschen Antworten. Ich mache mich noch heute ans Testen Eurer Vorschläge. Hört sich ganz vielversprechend an.
Ich melde mich wieder.

Viele Grüße,

Otfrid

Beinahe hätte ich es vergessen:
@Gisman: ST_ConvexHull hatte ich schon ausprobiert. Die funktioniert bei einfachen Punktwolken gut und performant. Da es sich bei unseren Daten allerdings um Punktwolken beliebiger Form handelt (Ortsnetze von thematischen Atlanten), ist diese Technik natürlich nicht anwendbar (Ein- und Ausbuchtungen).

Viele Grüße,

Otfrid

ST_Simplify macht bei solchen Datensätzen deutlich mehr Sinn. Soviel ich weiß setzt der Algorythmus ausgehend vom ersten Punkt des Polygons entlang der Polygongrenze alle x Maßeinheiten einen neuen Punkt. Der Nachteil ist eben dass man vorher noch das Polygon basteln muss.
Wenn du mit Buffern arbeitest solltest du Simplify in Erwegung ziehen. Vor allem wenn du große und viele Polygone hast. Die Darstellung wird dadurch beschleunigt und die Datenmenge wird logischerweise auch deutlich reduziert. Die Genauigkeit leidet dafür aber.