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

16

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

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

stachu
источник

Ответы:

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 , в зависимости от ваших критериев.

dbaston
источник
2

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

blackholesunn
источник
1

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

Итак, думайте о многоугольнике как о полосе треугольников. Каждый треугольник соединяется с вершиной на противоположной стороне коридора с ребром. Теперь для каждого из ребер в коридоре просто поместите вершинный привкус в центре. Эти новые вершины являются точками вашей линейной линии. Вероятно, вы можете поиграть с тем, как выбрать среднюю точку на краю для большей точности.

Джон Брингхерст
источник
0

Еще раз, ET GeoWizards может быть ответом. Попробуйте инструмент Создать осевые линии из полигонов .

Дон мельц
источник