как найти "висячие" линии

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
Аватара пользователя
nadiopt
Гуру
Сообщения: 4744
Зарегистрирован: 29 янв 2009, 13:27
Репутация: 495
Ваше звание: хрюкало
Откуда: Санкт-Петербург
Контактная информация:

как найти "висячие" линии

Сообщение nadiopt » 18 июл 2019, 15:16

имеется слой дорог, в котором некоторые дороги никуда не ведут (изолированы полностью)
вопрос: как средствами QGIS (или GRASS) все их найти (а хорошо бы еще и подсоединить к ближайшей ведущей куда-нибудь дороге. Понятно, что будет не очень корректно, но для быстрого расчета расстояний сгодится).
Вложения
2019-07-18 15_14_03-_babush1 - QGIS.png
2019-07-18 15_14_03-_babush1 - QGIS.png (15.76 КБ) 8250 просмотров
ин гроссен фамилен нихт клювен клац клац

Аватара пользователя
oldbay
Участник
Сообщения: 53
Зарегистрирован: 14 июл 2015, 11:46
Репутация: 19
Откуда: Санкт-Петербург
Контактная информация:

Re: как найти "висячие" линии

Сообщение oldbay » 22 июл 2019, 16:20

Теоретически можно попробовать используя PostGis:
1) Собрать в мультилинии все: находящиеся в контакте, пересекающиеся и соприкосающиеся между собой геометрии.
2) Определить основную сеть дорог (мультилинию) и все остальные - скажем через пересечение с точкой на основной дорожной сети, всё что не попало - это "висящие" линии
3) Чтобы соединить с основной сетью: разобрать основную сеть на точки, пройтись циклом по "висящим" линиям и выделить на них конечные точки "висясих" дорог, найти наименьшее расстояние между такими концами и ближайшей точкой на основной сети дорог, нарисовать линию между этими найденными точками. Скорее всего получится фигня - но ничего лучше в голову не приходит.

Но вот "овчинка стоит выделки" - только если данная задача не разовая, а постоянно необходимая. Так как для всего этого придётся писать функцию на plpgsql или на python с использованием psycopg2 и набором запросов.

Аватара пользователя
nadiopt
Гуру
Сообщения: 4744
Зарегистрирован: 29 янв 2009, 13:27
Репутация: 495
Ваше звание: хрюкало
Откуда: Санкт-Петербург
Контактная информация:

Re: как найти "висячие" линии

Сообщение nadiopt » 23 июл 2019, 14:19

да вот нет, задача разовая - надо собрать граф из ОСМ и лесных дорог, оцифрованных с планшетов:(
ин гроссен фамилен нихт клювен клац клац

Аватара пользователя
oldbay
Участник
Сообщения: 53
Зарегистрирован: 14 июл 2015, 11:46
Репутация: 19
Откуда: Санкт-Петербург
Контактная информация:

Re: как найти "висячие" линии

Сообщение oldbay » 23 июл 2019, 16:18

nadiopt писал(а):
23 июл 2019, 14:19
надо собрать граф из ОСМ и лесных дорог
Тогда понятно зачем соединять.

В принципе если сбросите векторный исходник - могу попробовать поколдовать с ним на выходных.
Конечно ничего не обещаю - особенно если погода не испортится )

konst555
Активный участник
Сообщения: 211
Зарегистрирован: 11 авг 2015, 16:13
Репутация: 45

Re: как найти "висячие" линии

Сообщение konst555 » 24 июл 2019, 11:27

А при помощи топологии вы не пробовали?
Задайте соответствующие условия и они должны выбраться автоматически. Заодно проверите качество пересечений.
Может я и ошибаюсь, но час назад успешно нашел все зазоры между полигонами. Может и для вашего случая правило можно сформулировать.
Удачи!

bim2010
Гуру
Сообщения: 977
Зарегистрирован: 27 янв 2009, 22:57
Репутация: 258

Re: как найти "висячие" линии

Сообщение bim2010 » 24 июл 2019, 16:00

Наиболее известный из алгоритмов: depth-first search algorithm
Плагин QGIS Topology Checker Plugin
https://www.youtube.com/watch?v=_GK2ll_TcQo
В GRASS есть grass topology tools.
Я делаю по другому: все дороги рисую в OSM. Там много разных валидаторов для Online-контроля качества.
https://www.keepright.at/report_map.php ... C360%2C390
Универсальный валидатор на основе конвертации в СГ
OSM Inspector

Аватара пользователя
nadiopt
Гуру
Сообщения: 4744
Зарегистрирован: 29 янв 2009, 13:27
Репутация: 495
Ваше звание: хрюкало
Откуда: Санкт-Петербург
Контактная информация:

Re: как найти "висячие" линии

Сообщение nadiopt » 26 июл 2019, 11:20

oldbay писал(а):
23 июл 2019, 16:18
В принципе если сбросите векторный исходник - могу попробовать поколдовать с ним на выходных.
Конечно ничего не обещаю - особенно если погода не испортится )
спасибо на добром слове! только вектор пока не полностью готов (собираю лесные дороги из 100500 папок по каждому участковому лесничеству). А давать на допиливание не конечный слой мне совесть не позволяет
bim2010 - но ведь ОСМ внимательно относится к происхождению данных. Если бы я сама рисовала, например, по снимкам, я бы конечно сразу рисовала в ОСМ. А тут готовые пропиетарные
ин гроссен фамилен нихт клювен клац клац

Sibit
Активный участник
Сообщения: 216
Зарегистрирован: 21 окт 2009, 13:29
Репутация: 28
Откуда: Новосибирск

Re: как найти "висячие" линии

Сообщение Sibit » 26 июл 2019, 11:28

Можно попробовать сделать из сети полигоны с небольшим буфером, потом объединить, потом разделить на отельные области. Кто сам по себе - не имеет связи с сетью.

bim2010
Гуру
Сообщения: 977
Зарегистрирован: 27 янв 2009, 22:57
Репутация: 258

Re: как найти "висячие" линии

Сообщение bim2010 » 26 июл 2019, 13:55

Nadiopt писала:
но ведь ОСМ внимательно относится к происхождению данных. Если бы я сама рисовала, например, по снимкам, я бы конечно сразу рисовала в ОСМ.
Сначала я получил разрешение от администрации парка:
На ваше письмо от 06 декабря 2013 об использовании материалов с интернет ресурсов официального портала Национального парка “Смоленское Поозерье” сообщаем, что администрация Национального парка “Смоленское Поозерье” не возражает против использования открытых материалов с сайта http://www.poozerie.ru/ и геопортала http://park.smolensk.rekod.ru/ для обрисовки карт проекта OpenStreetMap.
Подобные разрешения получил от администрации области и города. Затем отрисовал дороги в OSM по снимкам сверхвысокого разрешения, т.е. геометрия моя. Текущая задача - отредактировать к реальному состоянию т.к. то, что хорошо читаемо на снимках и даже имеет местами асфальтобетонное покрытие в реале нет возможности проехать по разным причинам (нет мостов, шлагбаум на въезде, заборы, заросло, ветровал, и т.п.).
В OSM удобно наличие выгрузок карт под разные навигаторы. Процесс итерационный: загружаю в гармин и отмечаю все различия.

Аватара пользователя
nadiopt
Гуру
Сообщения: 4744
Зарегистрирован: 29 янв 2009, 13:27
Репутация: 495
Ваше звание: хрюкало
Откуда: Санкт-Петербург
Контактная информация:

Re: как найти "висячие" линии

Сообщение nadiopt » 09 авг 2019, 15:43

некоторое приближение к решению проблемы - плагин Disconnected Islands. Он ищет изолированные куски и показывает их цветом, а там уж вручную поправить можно
ин гроссен фамилен нихт клювен клац клац

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей