PostGIS: pisahkan poligon dalam rasio yang diberikan

11

Apakah ada cara yang mudah untuk membagi poligon menjadi nbeberapa bagian, lebih atau kurang sama dalam ukuran di PostGIS?

Adam Matan
sumber
Area yang sama atau ukuran yang sama (yaitu lebar dan tinggi yang serupa)?
Anthony -GISCOE-
Area, terlepas dari proporsi.
Adam Matan
1
posting terkait gis.stackexchange.com/questions/5300/…
Kirk Kuykendall
Saya terkejut tidak ada solusi untuk ini dalam R spasial
Brad Nesom

Jawaban:

8

Ini adalah masalah lama tanpa solusi sederhana. Satu-satunya pendekatan yang saya temui adalah membuat fungsi yang Anda beri tajuk dan jumlah bagian dan komputer melakukan uji coba hingga mencapai area yang sama. Ada fungsi LISP dengan yang ada di AutoCAD. Dalam postgis kerjanya sama, berikut adalah kutipan dari PostGIS in Action from Manning, kode ini membagi poligon menjadi dua bagian yang sama:

WITH RECURSIVE
ref(the_geom, env) AS (
SELECT the_geom,
ST_Envelope(the_geom) As env,
ST_Area(The_geom)/2 As targ_area,
1000 As nit
FROM us.states
WHERE state = 'Idaho'
),

T(n,overlap) AS (
VALUES (CAST(0 As Float),CAST(0 As Float))
UNION ALL
SELECT n + nit, ST_Area(ST_Intersection(the_geom, ST_Translate(env, n+nit, 0)))
FROM T CROSS JOIN ref
WHERE ST_Area(ST_Intersection(the_geom, ST_Translate(env, n+nit, 0)))> ref.targ_area
) ,  

bi(n) AS
(SELECT n
FROM T
ORDER BY n DESC LIMIT 1)  

SELECT bi.n,
ST_Difference(the_geom, ST_Translate(ref.env, n,0)) As geom_part1,
ST_Intersection(the_geom, ST_Translate(ref.env, n,0)) As geom_part2
FROM bi CROSS JOIN ref;
Pablo
sumber
2

Salah satu pendekatan mungkin untuk membagi poligon sepenuhnya menjadi segitiga, masing-masing dengan area tertentu. Maka itu akan menjadi masalah mencoba mengelompokkan segitiga-segitiga (berdekatan) itu kembali ke dalam poligon dengan ukuran area (lebih-atau-kurang) / n. Ini akan menjadi semacam versi yang disesuaikan dari masalah "jumlah subset" atau "ransel" (dan saya tidak akan tahu bagaimana memulainya dengan PostGIS).

Anthony -GISCOE-
sumber
Bisakah Anda memberikan informasi lebih lanjut tentang algoritma?
Majid Hojati