ReconstructLine - восстановление линий по точкам в QGIS: различия между версиями

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Нет описания правки
Строка 21: Строка 21:


=== Алгоритм ===
=== Алгоритм ===
При разработке модуля принималось во внимание то, что точки можно соединить между собой "логичным" образом, если они образуют "видимую глазами" кривую линию. В этом случае задачу можно сформулировать следующим образом:
* Дан набор точек T1, T2, ... Tn.
* Дана метрика d(Ti, Tj) -- функция, которая измеряет расстояния между произвольной парой точек. Тогда потенциальной восстановленной кривой (т.е. последовательности точек (Ti1, Ti2, ..., Tin)) можно поставить в соответствие её длину, равную сумме растояний между парами точек, составляющих восстановленную кривую: L = d(Ti1, Ti2) + d(Ti2, Ti3) + .... + d(Tin-1, Tin).
* Требуется найти среди всех комбинаций (Ti1, Ti2, ..., Tin) такую комбинацию, для которой ее длина L будет минимальной.
Требование того, что восстановленная кривая должна иметь минимальную длину из всех возможных комбинаций -- чисто эвристическое допущение, которое, тем не менее, хорошо согласуется с реальным положением дел. (Чтобы убедиться в этом достаточно нарисовать кривую, измерить ее длину, затем "перепутать" в ней пару или несколько пар точек и измерить длину новой кривой).


=== Работа с расширением ===
=== Работа с расширением ===

Версия от 05:58, 28 апреля 2015

Эта страница является черновиком статьи.


Описание инструмента для создания линейных объектов в QGIS.

ReconstructLine - это инструмент для интерактивного создания линейных объектов по точечным.

Вы наверняка сталкивались с инструментом объединяющим точки в линии. Все такие инструменты работают либо последовательно, т.е. точки объединяются в линии так, как они идут в таблице, либо про атрибутам. Теперь представьте, что вам не важен порядок записей в таблице и атрибутивная информация отсутствует или бесполезна, что вам все равно нужно объединить точки в линию.

Расширение ReconstructLine умеет восстанавливать линии по точкам используя только их пространственное расположение, "восстанавливая" линию. Поскольку восстановление это сложный алгоритм, ReconstructLine работает только интерактивно. Процесс восстановления может занять значительное время, если точек много.

ReconstructLine плохо подходит для облаков точек.

Создано в Nextgis.png Веб ГИС для вашей организации по доступной цене

Замечания по установке

Расширение доступно из официального репозитория.

ReconstructLine находится в разработке и протестирован с QGIS 2.6 и выше. Расширение работает в Windows и Linux (Ubuntu).

Исходный код модуля доступен в (репозитории на Github).

Алгоритм

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

* Дан набор точек T1, T2, ... Tn.
* Дана метрика d(Ti, Tj) -- функция, которая измеряет расстояния между произвольной парой точек. Тогда потенциальной восстановленной кривой (т.е. последовательности точек (Ti1, Ti2, ..., Tin)) можно поставить в соответствие её длину, равную сумме растояний между парами точек, составляющих восстановленную кривую: L = d(Ti1, Ti2) + d(Ti2, Ti3) + .... + d(Tin-1, Tin).
* Требуется найти среди всех комбинаций (Ti1, Ti2, ..., Tin) такую комбинацию, для которой ее длина L будет минимальной.

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

Работа с расширением

После установки расширения появится новая панель инструментов с двумя кнопками: "копировать точки" и "вставить линию".

Reconstructline-01.png

Предположим, что исходный набор точек выглядит следующим образом (обратите внимание на нумерацию, она отражает последовательность точек в таблице):

Исходные точки

Что будет, если просто соединить их в линию (например с помощью расширения Points2One):

Последовательное объединение точек в линию

Для объединения с помощью ReconstructLine:

1. Инструментом выделения выделите нужные точки, нажмите на кнопку "копировать точки" в панели инструментов ReconstructLine

2. Вставьте линию в существующий или новый линейный слой, нажмите на кнопку "вставить линию" в панели инструментов ReconstructLine

Результат должен выглядеть более логично:

Объединение точек в линию с помощью ReconstructLine

Контакты

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

Ссылки по теме