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 ...)?
Odpowiedzi:
Dane testowe:
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.II.)
Utwórz za
Concave Hull
pomocąProcessing > Toolbox > QGIS geoalgorithms >Vector geometry tools > Concave hull
. Użyłem progu0.1
w moim przykładzie. Jeśli próg jest za niski, wewnątrz wielokąta wyjściowego mogą znajdować się dziury.III.)
Teraz możesz obliczyć „średnią” linię za pomocą algorytmu szkieletu. Wyszukaj szkielet w
Processing Toolbox
. Użyjv.voronoi.skeleton
narzędzia zGRASS GIS 7 commands
.źródło
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:
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.
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
0
i89.7935
. Używam tylko powyższych wartości44
. 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
.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 na2
. Prostszy wielokąt skraca czas przetwarzania szkieletów.c) Oblicz szkielety: wyszukaj szkielet w Przyborniku przetwarzania. Użyj
v.voronoi.skeleton
narzędzia z poleceń GRASS GIS 7.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:
Niedogodności:
Jeśli ktoś może zoptymalizować kroki przetwarzania, witamy!
źródło
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.