GISProjekt R

Analiza odległości w R

W dzisiejszym poście zaprezentujemy Wam jak używać narzędzia gDistance z biblioteki rgeos do wyliczenia odległości pomiędzy obiektami warstw wektorowych. Do naszego przykładu użyjemy znane już z wcześniejszych postów linie kolejowe (pobierz) oraz lokalizacje jednostek straży pożarnej (pobierz). Na początku wczytujemy obie warstwy i  wyświetlamy wczytane warstwy:

Do obliczenia odległości użyjemy funkcji gDistance. Argumentami funkcji są dwie wczytane wcześniej warstwy pomiędzy, którymi analizujemy odległość:

gDistance(kolej, straz)

W wyniku otrzymujemy jedną odległość, która jest najmniejszą odległością pomiędzy obiektami warstwy:

[1] 797.3063

Do otrzymania macierzy odległości pomiędzy obiektami warstw konieczne jest dodanie dodatkowego argumentu byid, jak w przypadku funkcji gIntersects:

gDistance(kolej, straz, byid=TRUE)

W wyniku otrzymujemy macierz odległości pomiędzy wszystkimi obiektami warstw:

        0 1        2

1  8507.329 18405.56  8530.38

2 28904.945 23211.21 28942.98

3 41223.233 24220.43 41292.70

Na koniec znajdźmy z wykorzystaniem funkcji gDistance na przykład jednostkę straży, która ma w linii prostej najbliżej do jednego z odcinków linii kolejowej. Wybierzmy odcinek linii o osm_id = 294250370:

line = kolej[kolej@data$osm_id == "294250370",]

Wyselekcjonowany odcinek znajduje się w dużej odległości od wszystkich jednostek straży:

Wyliczmy odległość od wybranej linii do poszczególnych jednostek straży:

distance_to_line = gDistance(line,straz,byid = T)

Wyliczone odległości wynoszą:

> distance_to_line

       198

1  17946.62

2  20355.64

3  25133.04

4  16869.70

5  17184.11

6  23473.78

7  24575.98

8  29726.79

9  27766.93

10 19331.81

11 34468.66

12 11284.40

13 16947.43

14 27674.72

15 23531.39

16 21001.19

17 31275.48

18 30461.70

19 16756.31

20 25030.76

21 23244.33

Minimalna odległość to:

min(distance_to_line)

[1] 11284.4

Najbliżej wybranej przez nas linii znajduje się:

straz@data$name[distance_to_line == min(distance_to_line)]

[1] "Ochotnicza Straż Pożarna w Starych Grabiach"

Poznaną funkcję możecie używa do wielu różnych analiz, gdzie potrzebna jest wiedza o odległości między obiektami. Macie jakiś inny pomysł na jej zastosowanie? Piszcie w komentarzach.