Обобщать файл полигона при сохранении топологии в QGIS?

35

У меня есть многоугольник Shapefile, который мне нужно обобщить. Как я могу обобщить полигоны и убедиться, что нет топологических ошибок, таких как «осколки».

Я уже попробовал:

  1. Вектор -> Инструменты геометрии -> полигоны к линиям
  2. Vector -> Geometry Tools -> упрощенные геометрии ... здесь я уже вижу на экране, что я создаю перекрытия и промежутки, тем не менее теперь я пытаюсь
  3. Вектор -> Инструменты геометрии -> линии в полигоны

а вот программа показывает ошибку и вылетает

введите описание изображения здесь

Kurt
источник
Есть ли новости по этому вопросу?
Ойстейн
к сожалению: нет
Курт

Ответы:

16

GRASS учитывает топологию. Вы можете использовать v.generalize из набора инструментов Обработка, чтобы упростить полигоны, и если входные данные топологически корректны, то и результат будет.

введите описание изображения здесь

Подземье
источник
с помощью установщика Windows я получаю сообщение об ошибке (отсутствует зависимость) при попытке запустить v.generalize. Нужен ли специальный конфиг?
Курт
@Kurt: Автономный установщик? Не уверен, какую версию GRASS он включает. В настройках обработки вы можете указать, если GRASS 6.x или 7.x и где он установлен. Попробуйте настроить эти конфигурации в соответствии с вашими настройками.
Подземье
да, я использую установщик stanalone. Следуя вашим советам, я деактивировал grass 7 с помощью параметров обработки и правильно настроил путь к qrass 6. этот путь был неправильным, пережиток старого QGIS. Теперь я могу запустить v.generalize, но в конце я получаю новую ошибку: не удалось открыть выходной слой, и, наконец, в сообщении говорится, что трава, кажется, правильно установлена ​​и настроена. не могли бы вы дать мне какие-либо предложения или советы?
Курт
Обычно эта ошибка означает, что геообработка на каком-то этапе не удалась. Вы должны изучить журнал, который генерируется во время работы инструментов, чтобы увидеть, где происходит ошибка.
Подземье
7

Это можно рассматривать как предварительный ответ @ Underdark, согласно которому вы можете очистить топологию векторного слоя перед обобщением. GRASS имеет функцию v.clean, которая содержит ряд инструментов для восстановления слоя, таких как:

  • привязка, которая «привязывает» линии к ближайшей вершине
  • rmdangle, который удаляет любые раздражающие висячие
  • rmdupl, который удаляет дублированные геометрические объекты

и различные другие, показанные на изображении ниже:

v.clean

Вы также можете установить порог в зависимости от того, насколько чувствительными вы хотите, чтобы инструменты запускались. Лично я склонен использовать функцию Проверить правильность геометрии в QGIS ( Вектор > Инструменты геометрии > Проверить правильность геометрии ), чтобы проверить наличие ошибок и, если они есть, использовать соответствующий инструмент в v.clean . После того, как ошибки будут устранены, вы сможете лучше обобщать.

Надеюсь это поможет!

Джозеф
источник
3
И если достаточно простого сокращения вершин, v.generalize не требуется, так как инструмент удаления может сделать это.
Габор Фаркас
спасибо за предварительный ответ @ Underdark, содержащий ценную информацию. хотя я прямо не сказал этого, конечно, файл-полигон, который я хотел обобщить, является топологически чистым [потому что; мусор - мусор вышел :-)]
Курт
@ Курт, это имеет смысл :)
Джозеф
2

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

Альтернативой может быть преобразование этого в GeoJson, а затем TopoJson, который поддерживает «упрощение форм с сохранением топологии» https://github.com/mbostock/topojson

djq
источник
Попробовал Mapshaper, это действительно отличный инструмент
Курт
1
еще один комментарий: Как видно из заголовка: я ищу решение с помощью qgis. Mapshaper imho не сохраняет топологию (докажите для себя, сделав очень сильное обобщение!). Топойсон: это набор javascript-исходного кода, который имхо полезен только для программистов
Курт
упс, пропустил только аспект QGIS. QGIS все же обрабатывает геойсон; Интересно, имеет ли смысл работать с функциональностью упрощения topojson в плагине QGIS, чтобы сделать его доступным для непрограммистов
djq
Я продолжаю не по теме: для этой цели в OpenJUMP есть инструмент «Упростить покрытие полигонов».
user30184
0

Я только что провел быструю проверку, и инструмент «Упростить геометрию» в меню «Вектор», по-видимому, учитывает топологию. Я пробовал с и без «Включить топологическое редактирование», отмеченный в разделе «Параметры привязки». Вы пробовали это?

РЕДАКТИРОВАТЬ: Это было сделано непосредственно в файле многоугольника - зачем вам сначала конвертировать в строки?

Даррен Коуп
источник
Привет, Даррен, спасибо за подсказку, я попробую это с топологическим редактированием enablr
Курт
1
Привет Даррен, имхо это не уважает топологию. нет разницы с «включить топологическое редактирование». Я полагаю, это потому, что обобщение генерирует новый слой, в то время как «включить топологическое редактирование», похоже, работает только с -selected - существующими слоями. Не могли бы вы выполнить очень сильную гернерализацию и еще раз проверить, правильная ли у вас топология сейчас? спасибо
Курт
1
Курт; Интересный. Похоже, вы правы, когда делаете сильное обобщение! Сожалею!
Даррен Коуп
1
Этот флажок пропал в QGIS 2.2 (возможно, раньше) на случай, если кто-то будет искать.
lynxlynxlynx
0

Существует та же дискуссия здесь , мой окончательный ответ в том , что SAGA делает работу для вас.

Никулита Михай
источник
После вашего ответа в этой дискуссии кажется, что SAGA не сохраняет топологию. По крайней мере, больше.
Ойстейн