Створіть середню лінію з декількох рядків за допомогою QGIS


12

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

Для цього проекту я шукаю спосіб обчислити "середню" лінію з усіх них та генерувати результуючу лінію найбільш ймовірної позиції сліду.

Як би ви діяли, використовуючи QGIS або будь-який інший інструмент (я думав про OGR ...)?

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


Погляньте на середні треки у вікі OpenStreetMap, де описано метод, що використовує R.
Джейк

2
Це схоже на "конфлікт", і на цьому веб-сайті було кілька тем про нього: gis.stackexchange.com/search?q=conflation чи наблизиться до будь-якого з питань і відповідей?
SaultDon

Я сьогодні погляну на "конфлікт", але поки що "середні треки", запропоновані раніше, здається, справді виправдали свою справу. Я просто ще раз переглядаю, чи можна це зробити безпосередньо через QGIS, але обидва ваші відповіді чудові, дякую!
Horizen

Ви можете подивитися на цій темі і її ланках: gis.stackexchange.com/questions/70623 / ...
Johns

Відповіді:


9

Дані тесту:

  • QGIS 2.18.16, GASS GIS 7
  • 4 GPS-доріжки
  • в межах сітки 1х1км

І.)

Створюйте точки уздовж своїх треків 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, GASS GIS 7
  • 4 GPS-доріжки
  • в межах сітки 1х1км

І.)

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

II.)

Створіть теплову карту за допомогою плагіна QGIS теплової карти. Я використав радіус 40м. Я збільшую радіус до тих пір, поки у вихідному растрі немає дірок. Ви повинні спробувати це з різними значеннями радіуса.

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

III.)

ВЕДЕНО Не потрібно проводити точне значення растру на тепловій карті.

Тепер я хочу відточити растр до «білих» областей, де зосереджено найбільше балів. Для цього я перерахую вихідний растр. Значення min / max вихідного растру є 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

Недоліки:

  • час обробки великих наборів даних
  • Ви повинні спробувати параметри апріорі (радіус теплової карти, значення min / max)
  • важко автоматизувати етапи обробки
  • не перевірено на вузькі вигини / криві та на сліди, які дійсно виходять з лінії

Якщо хтось може оптимізувати етапи обробки, ласкаво просимо!


+1. Це ефективний підхід до пошуку "середньої лінії". Однак це не обов'язково найкраща оцінка правильної лінії. Щоб зрозуміти, чому ні, уявіть, що більшість шляхів проходять дуже швидко, але проходять дуже повільно, досить повільно, щоб помилки в будь-якій точці були б усередненими. Цей єдиний шлях забезпечив би найбільш надійне уявлення про істину, але, переставляючи кожний шлях, ця інформація буде втрачена і усереднена у багатьох бідніших уявленнях. Очевидно, це крайній випадок, але насправді деякі шляхи можуть бути кращими за інші.
whuber

Я розумію. Спасибі за вашу відповідь. Плагін Heat Map у QGIS надає деякі вдосконалені варіанти, де можна use weight from field. Чи може така інформація, як швидкість (прохідна повільна / швидка) чи інші, використовуватися для зважування даних певним чином? Зважування може бути використане для покращення теплової карти.
Стефан

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