Спрощення багатокутників до рядкових рядків?


16

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

Було б непогано, якби це було можливо зробити безпосередньо в postgis або іншим інструментом з відкритим кодом, але короткий опис алгоритму буде достатнім.

Відповіді:


13

Те, що вам потрібно, називається "алгоритм скелетизації".

Подивіться на цю статтю:

Haunert, J.-H., Sester, М., червень 2008 р. Зрушення району та центральні лінії дороги на основі прямих скелетів. GeoInformatica 12 (2), 169-191. URL-адреса http://dx.doi.org/10.1007/s10707-007-0028-x

Деякі з цих алгоритмів розроблені в бібліотеці CGAL .


Жодне посилання більше не працює, Жульєне: ти думаєш, ти міг би надати короткий опис алгоритмів або хоча б формальні посилання, щоб люди могли шукати документи?
whuber

Так, я оновив відповідь відповідним посиланням на новітню статтю.
липень

2
Дякую! (Не можу додати ще одну підсумкову пропозицію - мені довелося дати лише одну. :-)
whuber

4

У PostGIS 2.2 із SFCGAL це можна зробити за допомогою ST_StraightSkeleton або ST_ApproximateMedialAxis , залежно від ваших критеріїв.


2

плагін для скелетонізатора JUMP доступний як частина openjump http://www.openjump.org


1

Як попередження, я ніколи цього не пробував. Ваш успіх буде залежати від якості ваших даних.

Отже, подумайте про багатокутник як про смужку трикутників. Кожен трикутник з'єднується з вершиною на протилежній стороні коридору ребром. Тепер для кожного з країв коридору просто розмістіть вершину правої присмаку в центрі. Ці нові вершини - це точки вашої рядкової лінії. Ви, напевно, можете поспілкуватися з тим, як вибрати більшу точку на краю для більшої точності.


0

Ще раз, ET GeoWizards може бути відповіддю. Спробуйте створити інструментальні лінії з полігонів .

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