Rufen Sie den kleinsten MBR des Polygons ab


8

Ich habe eine Postgis-Tabelle mit Polygonen. Ich möchte meine Polygone in 4-Punkte-Polygone umwandeln: Den kleinsten MBR abrufen.

Hier kommt eine Illustration von dem, was ich will:

Alt-Text

Mein ursprüngliches Polygon ist in rosa Farbe. Ich denke, es wird ziemlich einfach sein, den MBR zu bekommen (mit ST_Envelope und BBox-Funktion). Aber gibt es eine einfache Möglichkeit, das zu bekommen, was ich will?

Irgendwelche Ideen? Danke vielmals

Antworten:


3

Für das einfache Beispiel, das Sie dort haben, würde Ihnen der ST_ConvexHull diese Antwort geben. Für den komplexeren Fall habe ich nicht viel darüber nachgedacht, aber ich vermute, dass Sie es können

1) Nehmen Sie den ST_ConvexHull - http://www.postgis.org/documentation/manual-1.5SVN/ST_ConvexHull.html

Wenn Sie PostGIS 1.5+ verwenden 2) Dann erhalten Sie die ST_LongestLine der konvexen Hülle ST_LongestLine (ST_ConvexHull (geom), ST_ConvexHull (geom)). Dadurch erhalten Sie zwei Ecken des Rechtecks ​​(obwohl es einen anderen Teil gibt - ich vermisse). da diese beiden Ecken möglicherweise nicht die Diagonale sind) http://www.postgis.org/documentation/manual-1.5SVN/ST_LongestLine.html

Vielleicht möchten Sie auch einen Blick auf den Code für ST_MinimumBoundingCircle werfen - der derzeit nur als plpgsql-Funktion implementiert ist -, aber was Sie tun, ist meiner Meinung nach eine Vereinfachung davon.

http://www.postgis.org/documentation/manual-1.5SVN/ST_MinimumBoundingCircle.html



3

Eine vollständige Antwort finden Sie hier jedoch zusammenfassend:

  • [S] Drehen Sie das Polygon so, dass eine seiner Kanten mit der X- Achse übereinstimmt
  • Berechnung minmaxvon X und Y für Eckpunkte
  • Dies gibt Ihnen einen Kandidaten für ein Mindestflächenrechteck (MAR) oder einen MBR
  • Speichern Sie den Bereich von (x2-x1) * (y2-y1)
  • Wiederholen Sie ab [S] für alle Kanten
  • Finden Sie die Mindestfläche, die dem MBR entspricht
  • gefunden gefunden [[x1, y1], [x2, y2]] um einen in [S] angewendeten Winkel drehen.

Erledigt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.