Создать «среднюю» линию из нескольких строк, используя QGIS


12

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

Для целей этого проекта я ищу способ вычислить «среднюю» линию из всех них и сгенерировать результирующую линию наиболее вероятного положения следа.

Как бы вы поступили, используя QGIS или любой другой инструмент (я думал об OGR ...)?

введите описание изображения здесь


Взгляните на средние треки в вики OpenStreetMap, в которых описывается метод с использованием R.
Джейк,

2
Это похоже на «слияние», и на этом сайте было несколько тем об этом: gis.stackexchange.com/search?q=conflation. Есть ли какие-нибудь вопросы и ответы, которые вам ближе?
SaultDon

Сегодня я посмотрю на «слияние», но пока что «Средние треки», предложенные ранее, похоже, делают свое дело. Я просто смотрю немного больше, чтобы увидеть, можно ли это сделать напрямую через QGIS, но оба ваших ответа великолепны, спасибо!
Горизонт

Вы можете посмотреть на этой теме и ее звеньях: gis.stackexchange.com/questions/70623/...
Johns

Ответы:


9

Тестовые данные:

  • QGIS 2.18.16, GRASS GIS 7
  • 4 трека GPS
  • в пределах сетки 1x1 км

Я.)

Создавайте точки вдоль ваших GPS-треков с помощью плагина QGIS Locate Points Along Lines( https://plugins.qgis.org/plugins/LocatePoints/ ). Я использовал интервал 5 м в моем примере.

введите описание изображения здесь

введите описание изображения здесь

II.)

Создать Concave Hullс Processing > Toolbox > QGIS geoalgorithms >Vector geometry tools > Concave hull. Я использовал порог 0.1в моем примере. Если порог слишком низкий, в выходном многоугольнике могут быть дыры.

введите описание изображения здесь

III.)

Теперь вы можете вычислить «среднюю» линию с помощью алгоритма скелета. Ищите скелет в Processing Toolbox. Используйте v.voronoi.skeletonинструмент из GRASS GIS 7 commands.

введите описание изображения здесь


7

Подход тепловой карты:

Этот подход требует больше времени из-за времени вычисления этапов обработки. Это можно рассматривать как идею, возможно, чтобы приблизиться к более общему решению.

Тестовые данные:

  • QGIS 2.18.16, GRASS GIS 7
  • 4 трека GPS
  • в пределах сетки 1x1 км

Я.)

Создавайте точки вдоль ваших GPS-треков с помощью плагина QGIS. Найдите точки вдоль линий ( https://plugins.qgis.org/plugins/LocatePoints/ ). Для подхода тепловой карты я использовал интервал .

II.)

Создайте тепловую карту с помощью плагина QGIS. Я использовал радиус 40м. Я увеличиваю радиус, пока в выходном растре нет дыр. Вы должны попробовать это с разными значениями радиуса.

введите описание изображения здесь

III.)

РЕДАКТИРОВАНИЕ Нет необходимости хранить точное значение растра тепловой карты.

Теперь я хочу прореживать растр до «белых» областей, где сосредоточено наибольшее количество точек. Для этого я пересчитываю выходной растр. Мин. / Макс. Значения выходного растра - это 0и 89.7935. Я использую только значения выше 44. Для этого я использовал «правило большого пальца». Округлите максимальное значение и разделите его на два. Округлите это значение в другой раз. 89/2 = 44,5-> 44. Я использовал OSGeo4W Shell: gdal_calc -A heatmap.tif --calc="A>=44" --NoDataValue=0 --outfile=heatmap_44_NoData.tif.

введите описание изображения здесь

IV.)

отредактированный

а) полигонизировать пересчитанную тепловую карту с Raster > Conversion > Polygonize ...

б) Упростить многоугольник Vector > Geometry Tools > Simplify geometries. Я использовал допуск 2. Более простой многоугольник сокращает время обработки скелетов.

в) Рассчитать скелеты: поиск скелета в панели инструментов обработки. Используйте v.voronoi.skeletonинструмент из команды GRASS GIS 7.

введите описание изображения здесь

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

Преимущества подхода:

  • разумные хорошие результаты исключительно с использованием QGIS

Недостатки:

  • время обработки больших наборов данных
  • вы должны попробовать параметры априори (радиус карты тепла, мин / макс значения)
  • сложно автоматизировать этапы обработки
  • не проверено на узкие изгибы / кривые и на треки, которые действительно выходят за пределы линии

Если кто-то может оптимизировать этапы обработки, добро пожаловать!


+1. Это эффективный подход к поиску «средней линии». Однако это не обязательно лучшая оценка правильной линии. Чтобы понять, почему нет, представьте, что большинство путей было пройдено очень быстро, но один путь был пройден очень медленно, достаточно медленно, чтобы ошибки в любом месте могли усредняться. Этот единственный путь обеспечил бы наиболее надежное представление правды, но при повторной выборке каждого пути эта информация была бы потеряна и усреднена по многим более плохим представлениям. Очевидно, что это крайний случай, но в действительности некоторые пути могут быть лучше, чем другие.
whuber

Я понимаю. Благодарю за ваш ответ. Плагин «Тепловая карта» в QGIS предоставляет несколько дополнительных возможностей, где вы можете use weight from field. Может ли такая информация, как скорость (проходить медленно / быстро) или другие, использоваться для взвешивания данных каким-либо образом? Взвешивание может быть использовано для улучшения тепловой карты.
Стефан

Да, вы могли бы сделать это, но ни один из этих методов не решает проблему, что данные могут иметь (сильную положительную) автокорреляцию. Чтобы справиться с этим, потребуется что-то вроде анализа временных рядов отдельных путей.
whuber
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.