Уважаемые форумчане, подскажите пожалуйста как/с помощью чего и можно ли решить следующую задачу:
-имеется GPX-трек
-отдельные части трека образуют замкнутые полигоны
необходимо("автоматом")
-создать для каждого замкнутого контура объект в полигональном слое
при условии
-для каждого контура интерактивно пользователь задает необходимое количество вершин
-линия границы создаваемого полигона должны являться некой аппроксимацией координат точек между вершинами
поскольку процесс задания количества вершин интерактивный, могу предположить, что необходимо начальное действие:
-пользователь интерактивно задает некий минимальный охват или начальную/конечную точки трека, в пределах которого задается количество вершин и создается один полигон
Пример:то что есть
нужно получить (количество вершин 9 и 15)
Создание полигонов из GPX треков
-
- Активный участник
- Сообщения: 146
- Зарегистрирован: 30 авг 2015, 16:38
- Репутация: 25
- Контактная информация:
-
- Гуру
- Сообщения: 4205
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: 433
- Откуда: Париж
Re: Создание полигонов из GPX треков
Я знаю как минимум два программных продукта Geomedia Pro и Bentley MicroStation, в которых есть интерактивное и/или автоматическое построение полигона по указанию внутренней точки внутри контура. Количество точек уменьшается утилитами аппроксимации по настраиваемо алгоритму: как часто точки, какое условие на спрямление и т.п.
Но раз зашел разговор о наличии "пользователя", осуществляющего ввод данных к созданным полу-данным, то чем эта задача отличается от ввода контура оператором, использующим опорные точки для формирования контура. Большинство ГИС пакетов, предназначенных для ввода, позволяют использовать точки существующих объектов в качестве опорных точек. На мой взгляд, это выйдет в разы быстрее, чем пытаться настраивать алгоритмы "разумной генерализации" после получения а-бы каких контуров.
Но раз зашел разговор о наличии "пользователя", осуществляющего ввод данных к созданным полу-данным, то чем эта задача отличается от ввода контура оператором, использующим опорные точки для формирования контура. Большинство ГИС пакетов, предназначенных для ввода, позволяют использовать точки существующих объектов в качестве опорных точек. На мой взгляд, это выйдет в разы быстрее, чем пытаться настраивать алгоритмы "разумной генерализации" после получения а-бы каких контуров.
-
- Активный участник
- Сообщения: 146
- Зарегистрирован: 30 авг 2015, 16:38
- Репутация: 25
- Контактная информация:
Re: Создание полигонов из GPX треков
Спасибо.
проблема в том, что поворотные точки, как правило не принадлежат самому треку, т.к. gps дает +-10-15 м и истина где-то посередине
тогда задача сводится просто визуально к ручному построению
а если не привязываться к количеству вершин, а просто автомат-построение контура- что-нибудь помимо указанного ПО, ближе к QGIS? или просто-идея - описание алгоритма, который можно реализовать допустим на питоне
можно немного подробнее?Boris писал(а):Большинство ГИС пакетов, предназначенных для ввода, позволяют использовать точки существующих объектов в качестве опорных точек.
проблема в том, что поворотные точки, как правило не принадлежат самому треку, т.к. gps дает +-10-15 м и истина где-то посередине
тогда задача сводится просто визуально к ручному построению
а если не привязываться к количеству вершин, а просто автомат-построение контура- что-нибудь помимо указанного ПО, ближе к QGIS? или просто-идея - описание алгоритма, который можно реализовать допустим на питоне
-
- Гуру
- Сообщения: 4205
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: 433
- Откуда: Париж
Re: Создание полигонов из GPX треков
Я просто не понимаю вашей проблемы: опытный оператор вводит такие упрощенные контура, используя понятные ему точки на существующем векторе за 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-ой точке.
Тот же самый оператор для автоматически созданных контуров тратит 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 гостей