Ambil MBR terkecil poligon

8

Saya memiliki tabel postgis yang berisi poligon. Saya ingin mengubah poligon saya menjadi 4 titik poligon: ambil MBR terkecil.

Inilah ilustrasi tentang apa yang saya inginkan:

teks alternatif

Poligon asli saya berwarna pink. Saya kira, akan cukup mudah untuk mendapatkan MBR (dengan fungsi ST_Envelope dan BBox) Tetapi apakah ada cara mudah untuk mendapatkan yang saya inginkan?

Ada ide? Terimakasih banyak

simo
sumber

Jawaban:

3

Untuk contoh sederhana yang Anda miliki di sana, ST_ConvexHull akan memberi Anda jawaban itu. Untuk kasus yang lebih kompleks, belum banyak memikirkannya, tapi tebakan saya adalah Anda bisa

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

Jika Anda menggunakan PostGIS 1.5+ 2) Kemudian dapatkan ST_LongestLine dari convexhull ST_LongestLine (ST_ConvexHull (geom), ST_ConvexHull (geom)) Itu akan memberi Anda dua sudut persegi panjang (meskipun ada bagian lain - saya hilang) karena kedua sudut itu mungkin bukan diagonal) http://www.postgis.org/documentation/manual-1.5SVN/ST_LongestLine.html

Anda mungkin juga ingin melihat kode untuk ST_MinimumBoundingCircle - saat ini hanya diimplementasikan sebagai fungsi plpgsql - tetapi apa yang Anda lakukan saya pikir penyederhanaan itu.

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

LR1234567
sumber
3

Namun, jawaban lengkap dapat ditemukan di sini dalam ringkasan:

  • [S] putar poligon agar sesuai dengan salah satu ujungnya dengan sumbu X
  • menghitung minmaxdari X dan Y untuk simpul
  • ini memberi Anda kandidat untuk rectangle area minimum (MAR) atau MBR
  • simpan area (x2-x1) * (y2-y1)
  • ulangi dari [S] untuk semua tepi
  • temukan area minimum yang sesuai dengan MBR
  • putar ditemukan [[x1, y1], [x2, y2]] oleh -angle diterapkan pada [S]

Selesai

Pengembang
sumber