Apakah ada cara yang mudah untuk membagi poligon menjadi n
beberapa bagian, lebih atau kurang sama dalam ukuran di PostGIS?
Apakah ada cara yang mudah untuk membagi poligon menjadi n
beberapa bagian, lebih atau kurang sama dalam ukuran di PostGIS?
Jawaban:
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;
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).