Создание полигонов из GPX треков

Вопросы по нескольким пакетам сразу, или вопросы, которые непонятно к какой ГИС отнести
Ответить
gornak
Активный участник
Сообщения: 146
Зарегистрирован: 30 авг 2015, 16:38
Репутация: 25
Контактная информация:

Создание полигонов из GPX треков

Сообщение gornak » 02 июн 2016, 16:44

Уважаемые форумчане, подскажите пожалуйста как/с помощью чего и можно ли решить следующую задачу:
-имеется GPX-трек
-отдельные части трека образуют замкнутые полигоны
необходимо("автоматом")
-создать для каждого замкнутого контура объект в полигональном слое
при условии
-для каждого контура интерактивно пользователь задает необходимое количество вершин
-линия границы создаваемого полигона должны являться некой аппроксимацией координат точек между вершинами
поскольку процесс задания количества вершин интерактивный, могу предположить, что необходимо начальное действие:
-пользователь интерактивно задает некий минимальный охват или начальную/конечную точки трека, в пределах которого задается количество вершин и создается один полигон
Пример:то что есть
gpx_inp.jpg
gpx_inp.jpg (16.5 КБ) 4656 просмотров
нужно получить (количество вершин 9 и 15)
gpx_out.jpg
gpx_out.jpg (25.32 КБ) 4656 просмотров

Boris
Гуру
Сообщения: 4205
Зарегистрирован: 10 апр 2006, 22:34
Репутация: 433
Откуда: Париж

Re: Создание полигонов из GPX треков

Сообщение Boris » 02 июн 2016, 20:08

Я знаю как минимум два программных продукта Geomedia Pro и Bentley MicroStation, в которых есть интерактивное и/или автоматическое построение полигона по указанию внутренней точки внутри контура. Количество точек уменьшается утилитами аппроксимации по настраиваемо алгоритму: как часто точки, какое условие на спрямление и т.п.
Но раз зашел разговор о наличии "пользователя", осуществляющего ввод данных к созданным полу-данным, то чем эта задача отличается от ввода контура оператором, использующим опорные точки для формирования контура. Большинство ГИС пакетов, предназначенных для ввода, позволяют использовать точки существующих объектов в качестве опорных точек. На мой взгляд, это выйдет в разы быстрее, чем пытаться настраивать алгоритмы "разумной генерализации" после получения а-бы каких контуров.

gornak
Активный участник
Сообщения: 146
Зарегистрирован: 30 авг 2015, 16:38
Репутация: 25
Контактная информация:

Re: Создание полигонов из GPX треков

Сообщение gornak » 02 июн 2016, 23:15

Спасибо.
Boris писал(а):Большинство ГИС пакетов, предназначенных для ввода, позволяют использовать точки существующих объектов в качестве опорных точек.
можно немного подробнее?

проблема в том, что поворотные точки, как правило не принадлежат самому треку, т.к. gps дает +-10-15 м и истина где-то посередине
тогда задача сводится просто визуально к ручному построению
а если не привязываться к количеству вершин, а просто автомат-построение контура- что-нибудь помимо указанного ПО, ближе к QGIS? или просто-идея - описание алгоритма, который можно реализовать допустим на питоне

Boris
Гуру
Сообщения: 4205
Зарегистрирован: 10 апр 2006, 22:34
Репутация: 433
Откуда: Париж

Re: Создание полигонов из GPX треков

Сообщение Boris » 03 июн 2016, 01:05

Я просто не понимаю вашей проблемы: опытный оператор вводит такие упрощенные контура, используя понятные ему точки на существующем векторе за 10-15 секунд в типовом ПО и за 5-10 в ПО качественно подогнанном именно к потоковому вводу контуров. Есть ли такое в QGIS надо узнавать в их разделе, а не в разделе "Общий-ПО".
Тот же самый оператор для автоматически созданных контуров тратит 5 секунд для выбора контура и ввода некоего умозрительного числа вершин для алгоритма генерализации, которые либо тупы как танк, либо состоят из сплошных "но в этом случае переходим к следующему алгоритму упрощения", что в результате все равно больше 15 секунд. Так для чего такие не очевидные изыски?
Теперь рассмотрим алгоритм, для начала, полностью автоматический:
1. найти все полностью замкнутые контура. в той мешанине, которую дает GPS трекер их там будут десятки на один трек. И это с вероятностью 1/2. В половине случае окажется, что где-то есть маленькая дырка из-за которой вроде замкнутый контур на самом деле - не очевидная спираль.
2. отделить крупные - настоящие контура от мелких ложных.
3. разобраться с самопересечениями.
4. получить неизвестно что для кропотливой ручной работы.
Ручной:
1. поставить точку внутри предполагаемого контура.
2. найти расстояние от этой точки до ближайшего трек = перебор всех точек во всех треках. выбор ближайшего по некоторому взвешенному или минимальному алгоритму.
3. найти все самопересечения ближайшего трека и местах пересечения проставить вершины.
4. для ближайшего трека построить отрезки от выбранной точки до всех вершин этого трека.
5. построить треугольники на соседних вершинах и начальной точке.
6. выделить подмножество треугольников, дающих минимальную замкнутую фигуру. Очень "затратный" алгоритм с множественным перебором: поиск пересечений треугольников, с разбиением их на части в случае пересечения, и удаления внешних частей треугольников, являющихся дополнением к пересечению.
Оптимальный если уж точно хочется полуавтоматической работы:
1. толщина линии на экране выбирается равной 1/2 от минимального расстояния между вершинами.
2. полученные фигуры экспортируются в растр
3. запускается EasyTrace в полуавтоматическом режиме в сценарии "полигоны".
4. получаете ваши контура с заданной степень генерализации.
Просто оптимальный - указан выше: хорошо обученный мотивированный и хорошо проинструктированный оператор в режиме:
1. выбираю начальную точку с привязкой к имеющемуся контуру
2. выбираю следующую или скольжу по линии до следующей
3. повторяю 2 ... немного раз
4. возвращаюсь к 1-ой точке.

Ответить

Вернуться в «Общий - ПО»

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

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