Як розділити два багатокутники, що перетинаються, на середню лінію рядків спільної ділянки (QGIS / python)


9

У мене два полігони,

ПОЛІГОН ((- 5 -5, -5 5,5 5,5 -5, -5 -5)) ПОЛІГОН ((1 1, 1 7, 7 7, 7 1, 1 1))

і хочете розподілити їх рівномірно. Результатом має бути розкол по червоній позначеній лінії.

Я використовую qgis / python витончено і хочу зробити це за допомогою python.

ЛІНІСТРИНГ (1 5,5 1)


4
Наскільки загальна ваша проблема? Очевидно, ви маєте намір вирішити застосувати більше, ніж лише ці два багатокутники. Які види багатокутників ви споглядаєте? Точно що ви маєте на увазі під «рівномірно»? Повинен розкол бути вздовж відрізка лінії чи може бути вздовж якоїсь нелінійної дуги? Що має відбутися у випадку, якщо перетин багатокутника складається з декількох компонентів або не є просто з'єднаним? Яку форму повинен приймати висновок - чи повинен він розділяти перетин, або кожен з многокутників, чи, можливо, просто лінія розщеплення?
whuber

1
Я працюю з нерегулярними багатокутниками, і хочу мати два багатокутники, що не перетинаються. у цьому випадку оригінальні багатокутники згадуються, а бажаний результат - POLYGON ((- 5 -5, -5 5,1 5,5 1,5 -5, -5 -5)) POLYGON ((1 5, 1 7, 7 7, 7 1,5 1,1 5))
OLS

1
Проблема складна, коли будь-який або обидва багатокутники можуть мати кільця (тобто не бути просто з'єднаними).
whuber

Відповіді:


5

Я колись використовував підхід із багатокутниками voronoi. Я це зробив вручну. У мене є лише розпливчасте уявлення про те, як ви могли це зробити з витонченою формою, але ось, як це відбувається.

Спочатку витягуєте вершини кожного багатокутника, що перекриваються, і створюєте з них багатокутники Вороного (вектор> інструменти геометрії> витягнути вузли та вектор> інструменти геометрії> вононої). Отриманою формою ви зможете прокреслити лінію, яка розбиває вашу область перекриття рівно на дві частини. (Яскрава зелена лінія) вороной

Ви обрізаєте шар voronoi з багатокутника, що перекривається, і видаляєте перекриття з оригінальних форм і вставляєте відрізаний багатокутник voronoi назад своїми оригінальними формами. Вибирай, зливайся, вуаля!

Зараз це виглядає дещо грубо, бо мої справді прості форми. Але ви її ущільнюєте (вектор> Інструменти геометрії> геометрії щільності) і додаєте як 20 вузлів між кожною існуючою вершиною, ви можете мати це:

denigy_voronoi

Що набагато краще. Легко, якщо ви можете змінити лише невелику кількість форм.


Це гарна ідея. Але звідки береться ця яскраво-зелена лінія, і як ви знаєте, вона розбиває регіон на дві рівні частини?
whuber

чим відрізняється цей процес, ніж `SELECT astext (перетин (geomFromText ('POLYGON ((- 5 -5, -5 5,5 5,5 -5, -5 -5))', 4326), geomFromText ('POLYGON ( (1 1, 1 7, 7 7, 7 1, 1 1)) ', 4326))); астекст -------------------------------- ПОЛІГОН ((1 5,5 5,5 1,1 1,1 5 ) '?
OLS

Він походить від властивості багатокутника Вороного. Він розподіляє простір рівномірно між точками. Ось чому ви повинні ущільнити свої багатокутники, оскільки в іншому випадку "середня" лінія не дотримується меж. Що стосується яскравої лінії, я малюю її вручну, щоб проілюструвати, де знаходиться середина ... Щодо команди PostGIS (я новачок у PostGIS), я думаю, що вона вибере лише область, що перетинається, а не розділить її.
fgcartographix

1
Сказавши це, я не сказав, що це буде рівнозначна частина. Цей метод використовується для пошуку центральної лінії річки. Якщо у вас є затока в річці, середня лінія буде потягнута до неї. але він не ввійде до нього, тому зробивши його "центрованим".
fgcartographix
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.