Utwórz „średnią” linię z wielu linii za pomocą QGIS


12

Mam wiele funkcji linii (mam je również w wielu punktach ...) reprezentujących podobną ścieżkę (w tym przypadku szlaki górskie) z różną precyzją GPS, co powoduje, że wiele linii jest blisko siebie, ale nie idealnie się nakładają.

Na potrzeby tego projektu szukam sposobu, aby obliczyć „średnią” linię ze wszystkich i wygenerować wynikową linię o najbardziej prawdopodobnej pozycji szlaku.

Jak byś postępował, używając QGIS lub innego narzędzia (myślałem o OGR ...)?

wprowadź opis zdjęcia tutaj


Spójrz na średnią liczbę utworów na wiki OpenStreetMap, która opisuje metodę wykorzystującą R.
Jake

2
To brzmi podobnie do „konfuzji”, a na tej stronie pojawiło się kilka wątków na ten temat: gis.stackexchange.com/search?q=conflation czy którekolwiek z pytań i odpowiedzi są bliższe?
SaultDon

Przyjrzę się dziś „konfuzji”, ale jak dotąd proponowane wcześniej „średnie trasy” wydają się załatwić. Po prostu szukam trochę więcej, aby zobaczyć, czy można to zrobić bezpośrednio za pośrednictwem QGIS, ale obie odpowiedzi są świetne, dzięki!
Horizen

Można spojrzeć na tego wątku i jej powiązań: gis.stackexchange.com/questions/70623/...
Johns

Odpowiedzi:


9

Dane testowe:

  • QGIS 2.18.16, GRASS GIS 7
  • 4 trasy GPS
  • w obrębie siatki 1x1 km

JA.)

Twórz punkty wzdłuż tras GPS za pomocą wtyczki QGIS Locate Points Along Lines( https://plugins.qgis.org/plugins/LocatePoints/ ). W moim przykładzie użyłem odstępu 5 m.

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

II.)

Utwórz za Concave Hullpomocą Processing > Toolbox > QGIS geoalgorithms >Vector geometry tools > Concave hull. Użyłem progu 0.1w moim przykładzie. Jeśli próg jest za niski, wewnątrz wielokąta wyjściowego mogą znajdować się dziury.

wprowadź opis zdjęcia tutaj

III.)

Teraz możesz obliczyć „średnią” linię za pomocą algorytmu szkieletu. Wyszukaj szkielet w Processing Toolbox. Użyj v.voronoi.skeletonnarzędzia z GRASS GIS 7 commands.

wprowadź opis zdjęcia tutaj


7

Podejście do mapy cieplnej:

Podejście to jest bardziej czasochłonne ze względu na czas obliczania etapów przetwarzania. Może to być pomysł na zbliżenie się do bardziej ogólnego rozwiązania.

Dane testowe:

  • QGIS 2.18.16, GRASS GIS 7
  • 4 trasy GPS
  • w obrębie siatki 1x1 km

JA.)

Twórz punkty wzdłuż tras GPS za pomocą wtyczki QGIS Lokalizuj punkty wzdłuż linii ( https://plugins.qgis.org/plugins/LocatePoints/ ). Do podejścia z mapą ciepła zastosowałem odstęp 2m .

II.)

Utwórz mapę cieplną za pomocą wtyczki QGIS. Użyłem promienia 40m. Zwiększam promień, aż nie będzie żadnych otworów w rastrze wyjściowym. Musisz spróbować z różnymi wartościami promienia.

wprowadź opis zdjęcia tutaj

III.)

ZMIENIONO Nie ma potrzeby przechowywania dokładnej wartości rastra mapy ciepła.

Teraz chcę przerzedzić raster do „białych” obszarów, w których skoncentrowanych jest najwięcej punktów. Dlatego ponownie obliczam raster wyjściowy. Wartości min / max rastra wyjściowego to 0i 89.7935. Używam tylko powyższych wartości 44. Dlatego zastosowałem „praktyczną zasadę”. Zaokrąglij w dół maksymalną wartość i podziel ją przez dwa. Zaokrąglij tę wartość innym razem. 89/2 = 44,5-> 44. Użyłem OSGeo4W Shell: gdal_calc -A heatmap.tif --calc="A>=44" --NoDataValue=0 --outfile=heatmap_44_NoData.tif.

wprowadź opis zdjęcia tutaj

IV.)

EDYTOWANE

a) Poligonizuj ponownie obliczoną mapę cieplną za pomocą Raster > Conversion > Polygonize ...

b) Uprość wielokąt Vector > Geometry Tools > Simplify geometries. Użyłem tolerancji na 2. Prostszy wielokąt skraca czas przetwarzania szkieletów.

c) Oblicz szkielety: wyszukaj szkielet w Przyborniku przetwarzania. Użyj v.voronoi.skeletonnarzędzia z poleceń GRASS GIS 7.

wprowadź opis zdjęcia tutaj

Widać, że wynikowa linia reprezentuje bardziej prawdopodobną pozycję szlaku niż w mojej pierwszej odpowiedzi. Zwłaszcza w przypadku zakrętu na północy linia średnia podąża za trzema torami, które są bliżej siebie. To samo dotyczy zakrętu na Wschodzie.

Zalety tego podejścia:

  • rozsądne dobre wyniki wyłącznie przy użyciu QGIS

Niedogodności:

  • czas przetwarzania dla dużych zbiorów danych
  • musisz wypróbować parametry a priori (promień mapy cieplnej, wartości min / maks)
  • trudno zautomatyzować etapy przetwarzania
  • nie testowano na wąskie zakręty / zakręty i na tory, które naprawdę wychodzą z linii

Jeśli ktoś może zoptymalizować kroki przetwarzania, witamy!


+1. Jest to skuteczne podejście do znalezienia „linii średniej”. Jednak niekoniecznie jest to najlepsza ocena prawidłowej linii. Aby zobaczyć, dlaczego nie, wyobraź sobie, że większość ścieżek została przemierzona bardzo szybko, ale jedna została przemierzona bardzo wolno, wystarczająco wolno, aby błędy w dowolnym miejscu zostały uśrednione. Ta pojedyncza ścieżka zapewniłaby najbardziej wiarygodną reprezentację prawdy, ale poprzez ponowne próbkowanie każdej ścieżki informacje te zostałyby utracone i uśrednione w przypadku wielu gorszych reprezentacji. Oczywiście jest to skrajny przypadek, ale w rzeczywistości niektóre ścieżki mogą być lepsze od innych.
whuber

Rozumiem. Dziękuję za odpowiedź. Wtyczka Heat Map w QGIS zapewnia kilka zaawansowanych opcji, w których możesz use weight from field. Czy informacje takie jak prędkość (przemierzaj powoli / szybko) lub inne mogą być wykorzystane do ważenia danych w jakiś sposób? Ważenie można wykorzystać do ulepszenia mapy ciepła.
Stefan

Tak, możesz to zrobić - ale żadna z tych technik nie rozwiązuje problemu, że dane mogą mieć (silnie dodatnią) autokorelację. Zajęcie się tym wymagałoby czegoś w rodzaju analizy szeregów czasowych poszczególnych ścieżek.
whuber
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.