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?


Area yang sama atau ukuran yang sama (yaitu lebar dan tinggi yang serupa)?
Anthony -GISCOE-

Area, terlepas dari proporsi.
Adam Matan


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;

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).


Bisakah Anda memberikan informasi lebih lanjut tentang algoritma?
Majid Hojati
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.