У меня есть векторный слой многоугольника, представляющий область, затопленную во время наводнения. Слой был создан таким образом, что некоторые области состоят из нескольких меньших соприкасающихся полигонов (см. Скриншот ниже, помеченный как «исходные данные»).
Я хотел бы распустить полигоны там, где они соприкасаются. Если я использую инструмент геообработки растворения в fTools QGIS, который использует библиотеку GEOS, я получу некоторые неожиданные результаты (см. «Растворение в QTIS fTools»). Похоже, что GEOS не использует порог при определении касания полигонов, как упоминалось в следующих выпусках:
http://trac.osgeo.org/qgis/ticket/3126
http://trac.osgeo.org/qgis/ticket/3184
http://hub.qgis.org/issues/2806
Тот же подход в ArcGIS дает ожидаемый результат (см. «Слияние с ArcGIS 10.1»).
Видимо, это «особенность» GEOS, а не ошибка. Есть ли способ исправить данные, которые я должен дать ожидаемый результат? Небольшая потеря точности (несколько см?) Может быть приемлемой для меня. В идеале решением было бы то, что я мог бы написать в плагин QGIS, в качестве шага предварительной обработки.
Смежный вопрос (без ответов): Как установить значение допуска инструмента геообработки в QGIS?
Ссылка на образец данных в виде шейп-файла: https://www.dropbox.com/s/c8ns7wwfv289ad0/sample.zip
Ответы:
В этом случае, похоже, вам нужно помочь инструменту растворения, сначала исправив топологию. Вот как вы можете сделать это в GRASS.
Когда вы загружаете шейп-файл, GRASS видит его так:
Каждый крест отмечает область. Вы можете видеть, что на граничных линиях есть несколько крестиков: это скользящие многоугольники, вызванные небольшим смещением между граничными линиями.
Удалите отрезанные многоугольники, образованные промежутками между настоящими многоугольниками:
Привязать граничные линии:
Разорвите граничные линии на новых перекрестках:
Удалите дублирующие граничные линии:
Растворить полигоны
И вуаля:
источник
Используйте команду GRASS GIS v.dissolve (в плагине Sextante -> Команды GRASS -> Вектор)
Если я быстро воспроизведу вам пример:
Результат с v.dissolve:
объяснение
Проблема проста для понимания. Шейп-файл не имеет топологии, если две области имеют общую границу, эта граница будет оцифрована два раза, а также сохранена в двух экземплярах.
Вы ясно видите это, когда пытаетесь редактировать шейп-файл:
GRASS GIS (как ArcGIS) является топологической ГИС. Когда вы импортируете шейп-файл в GRASS, полученный слой имеет топологию: общая граница между двумя областями существует один раз и является общей.
По этой причине, когда вы хотите слить шейп-файл (слить две границы ), вы можете столкнуться с проблемами (в QGIS, GvSIG, OpenJUMP или старом ArcView 3.x), см. ArcUserI: Общие сведения о топологии и шейп-файлах .
В GRASS v.dissolve предназначен для растворения общих границ между областями с одинаковым номером категории.
источник
v.dissolve
имеет параметр допуска, который решает проблему ОП.v.dissolve
его, кажется, что он работает, за исключением того, что он «заполняет» маленький квадрат в середине функций. i.stack.imgur.com/AA59l.png