У меня есть шейп-файл линий и еще один полигонов. Когда две или более линии пересекают многоугольник, они должны быть соединены (защелкнуты), но иногда при ручной оцифровке это не происходит. Мне нужно найти и исправить все эти ошибки. Я использовал v.clean
GRASS GIS, и он автоматически отключил много вершин, что было хорошо, но некоторые из этих отключенных линий далеки от допусков, которые я дал, и, если я слишком увеличу допуск, он начнет генерировать другие типы ошибок.
Есть идеи?
Ответы:
Мое понимание проблемы заключается в следующем:
Если конечная точка полилинии пересекает многоугольник, то полилинию необходимо соединить (путем добавления или корректировки вершин) со всеми дополнительными конечными точками полилинии, которые пересекают один и тот же многоугольник.
Некоторые конечные точки ломаной линии не пересекают многоугольник, будучи недолговечными, но они должны быть связаны, как указано выше.
Этот ответ основан на некоторых уже полученных, но не завершен, так как я не знаю всех команд QGIS - возможно, кто-то еще может добавить к этому?
Для каждой полилинии извлеките координаты конечной точки ( Вектор> Инструменты геометрии> Извлечь узлы, затем навести порядок) и рассчитайте, находятся ли они внутри многоугольника ( Вектор> Инструменты исследования> Выбрать по местоположению ).
Для конечных точек ломаной линии, которые находятся в пределах многоугольника, вытяните этот конец ломаной линии к центру многоугольника (Извлеките центр многоугольника, используя Вектор> Инструменты геометрии> Центроид многоугольника , не уверен в модификации линии, хотя вы могли бы работать с вершины полилинии в виде точек и добавление дополнительных с соответствующей нумерацией перед восстановлением модифицированной полилинии с помощью плагина «Точки на пути»)
Вы упоминаете, что могут быть ситуации, когда некоторые или все линии были правильно соединены, в этих ситуациях (идентифицируемых по совпадающим конечным точкам полилинии) вы можете выбрать использование совпадающего местоположения конечной точки вместо центроида многоугольника в качестве точки для расширения. любые дополнительные несвязанные полилинии для этого многоугольника.
Если конечные точки ломаной линии выходят за пределы многоугольника, вытяните этот конец ломаной линии до центра ближайшего многоугольника. Опять же, я не уверен насчет вычисления ближайшего многоугольника, хотя модуль GRASS v.distance выглядит для этого.
источник
Я думаю, что я мог бы сделать это с помощью некоторого пользовательского алгоритма ... Обратите внимание, конечно, как вы хотели бы реализовать это, но я думаю, что это будет работать.
Для каждой линии, для каждой конечной точки сделайте точку в многоугольнике для вершины в конечной точке и свяжите ее с многоугольником.
Затем, для каждого многоугольника, если существует более одной связанной конечной точки линии, я бы объединил (переместил) их все в среднюю координату или, возможно, в центр тяжести многоугольника.
Это довольно просто. Но не доступно в стандартных операторах. Я думаю, что это можно сделать в ArcGIS за несколько дней.
Еще одно примечание: на изображении, которое вы разместили, одна из линий находится за пределами многоугольника ... Вы можете обработать это более простым способом, просто найдя самую близкую вершину к каждой конечной вершине, гарантируя, что близость является взаимной (я думаю, что это необходимо, чтобы у вас были привязки вершин только одним способом), тогда вы можете переместить их в среднее положение вершин.
источник
Интересная проблема! Я не могу придумать способ автоматического выполнения привязки, но вот шаг в определении областей, по крайней мере, для ручного исправления:
В зависимости от ситуации (количество функций, количество находящихся в этой ситуации и других и т. Д.) Это может сэкономить вам время.
РЕДАКТИРОВАТЬ: Вы также можете использовать полигоны с суммой 2, чтобы создать подмножество ваших линейных слоев, а затем запустить очистку на тех с большим допуском, чтобы не изменять другие функции.
источник
как только у вас появятся конечные точки, я сделаю диаграмму паука, в которой центроиды многоугольников станут объектами, а конечные точки соседних линий - целями. Вы выполняете анализ диаграммы паука, и в результате у вас будет сегмент для каждой полилинии.
Это будет работать даже для тех, кто заканчивается за пределами полигонов. Как это сделать в QGIS, я не знаю, извините, но я бы сделал это в продуктах ESRI, которые я хорошо знаю. Это я понял, когда в первом ответе предложил построить «звезду».
Я почти уверен, что здесь есть люди, которые знают, как проводить такой анализ в QGIS.
источник