Страница 2 из 2

Re: Рисование длинных полигонов

Добавлено: 26 фев 2016, 10:31
Warak
konst555, на самом деле я сам не совсем понимаю чего касается мой вопрос, я постарался как можно проще объяснить что помогло бы мне ускорить выполнение задачи :) Я несколько далек от программирования и не исключено что то что я вижу как простой инструмент рисования, на самом деле на порядок сложнее когда речь заходит о внутреннем строении. Я например не до конца понимаю почему нет аналога ластика из пейнта, встретилась ситуация когда нужно было разрезать полигон на 2 части, ластиком было бы удобно и быстро, пришлось нарисовать сверху еще один полигон и вырезать один из другого что тоже довольно быстро и просто.

Ночью приснился отличный способ, выставить вершины по периметру объекта и сказать qgisу чтоб он обвел эти точки, ну ведь на словах простейшая задача, а на деле судя по всему ИИ нужен будет чтоб софтина поняла что от нее требуется :(

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

Re: Рисование длинных полигонов

Добавлено: 26 фев 2016, 17:24
Александр Мурый
Унёс "Описание проблем при создании и редактировании слоя полигонов" в отдельную тему.

Re: Рисование длинных полигонов

Добавлено: 26 фев 2016, 17:25
Александр Мурый
Warak писал(а): Ночью приснился отличный способ, выставить вершины по периметру объекта и сказать qgisу чтоб он обвел эти точки, ну ведь на словах простейшая задача, а на деле судя по всему ИИ нужен будет чтоб софтина поняла что от нее требуется :(
Примерно про это я и писал вам выше по теме — "concave hull", только со всякими хитрыми условиями.

Re: Рисование длинных полигонов

Добавлено: 27 фев 2016, 00:35
Игорь Белов
Рискну предложить нижеследующую методу.

Отключим в настройках ввод атрибутов при оцифровке:
[Установки] → [Параметры…] → [Оцифровка] → [x Отключить форму ввода атрибутов для каждого создаваемого объекта]

*** Оцифровка ***

Создадим шейп с единственным полем "id", тип точечный.

Расставим точки по краям полосы. Главное требование: они должны идти последовательно вдоль полосы и чередоваться, чётные по одной стороне, нечётные по другой. Местами для этого придётся добавлять лишние точки.

Откроем таблицу атрибутов. В калькуляторе полей обновим поле "id" выражением

Код: Выделить всё

CASE
	WHEN $id % 2 = 0 THEN $id
	ELSE 1000 - $id
END
Вместо 1000 подставляется любое число, которое не меньше удвоенного числа записей. В том же калькуляторе полей создадим текстовое поле "name" и заполним подобающим значением (например, 'M4' для дороги, или 'Sungai Mahakam' для реки на картинке). Завершим редактирование.
fig1points.png
Оцифровка шла в таком порядке: 0, 999, 2, 997, …
fig1points.png (7.36 КБ) 3369 просмотров
*** Создание контура ***

В инструментах анализа найдём подходящий инструмент. Это может быть "Превратить точки в линии (линию)" или "Points to path". Запустим его. Выберем наш шейп с точками, поле для сортировки (Order field) — "id", поле для группирования (Group field) — "name", зададим слой, куда запишется линия контура. Жмём [Run].
fig2line.png
fig2line.png (5.23 КБ) 3369 просмотров
*** Создание полигона ***

[Вектор] → [Обработка геометрии] → [Линии в полигоны…]
Выбираем слой с контуром, указываем слой для записи полигона, жмём [OK].
fig3polygon.png
fig3polygon.png (5.4 КБ) 3369 просмотров
Остаётся добавить полигон в слой векторизованных ранее полос. Можно добавлять по одному через буфер обмена, можно создать много слоёв с полигонами и использовать объединение:
[Вектор] → [Управление данными] → [Объединение shape-файлов…]
Структуры таблиц должны совпадать.