Упрощение полигонов для линейных линий?


16

Я хотел бы упростить некоторые полигоны, которые представляют реки в линии линий. Я предполагаю, что дыры в многоугольниках могут быть опущены. У кого-нибудь есть хорошая идея, как просто сделать это?

Было бы неплохо, если бы это было возможно сделать непосредственно в postgis или с помощью другого инструмента с открытым исходным кодом, но краткого описания алгоритма будет достаточно.

Ответы:


13

То, что вам нужно, называется «алгоритм скелетизации».

Посмотрите на эту статью:

Haunert, J.-H., Sester, M., Jun. 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.