gIntersects i gIntersection
Biblioteka rgeos zawiera wiele narzędzi do analizy warstw wektorowych. Dwoma podstawowymi funkcjami są gIntersects i gIntersection. Nazwy funkcji są podobne, ale każda zwraca co innego.
library(rgdal) library(rgeos)
Wczytujemy dwie warstwy wektorowe kolej (kolor czarny) i drogi (kolor brązowy) z wykorzystaniem narzędzi biblioteki rgdal.
kolej <- readOGR("D:/", "kolej", stringsAsFactors = FALSE) drogi <- readOGR("D:/", "drogi", stringsAsFactors = FALSE)
Funkcja gIntersects służy do wskazania elementów jednej warstwy przecinających się z obiektami drugiej warstwy.
int <- gIntersects(kolej,drogi)
> int [1] TRUE
Funkcja zdefiniowana w ten sposób zwraca tylko informację czy warstwy posiadają jakieś punkty wspólne (przecinają się). Dodając argument byid uzyskamy na wyjściu macierz zawierającą informacje o przecinaniu się poszczególnych elementów pomiędzy warstwami:
int <- gIntersects(kolej, drogi, byid = TRUE)
> int 0 1 2 3 4 .. 0 FALSE FALSE FALSE FALSE FALSE .. 1 FALSE FALSE FALSE FALSE FALSE .. 2 FALSE FALSE FALSE FALSE FALSE .. 3 FALSE FALSE FALSE FALSE FALSE .. 4 FALSE FALSE FALSE FALSE FALSE .. . .. .. .. .. ..
Korzystając z funkcji apply możemy wybrać odcinki dróg przecinające się z kolejami:
sel <- apply(int, 1, any)
Wybrane odcinki w zmiennej sel wyświetlone zostały kolorem czerwonym na mapie.
Funkcja gIntersection umożliwia tworzenie warstwy przecięć pomiędzy dwoma zbiorami. W naszym przypadku będą to punkty (przejazdy), gdzie drogi przebiegają przez linie kolejowe.
przeciecia <- gIntersection(kolej, drogi)
Wynikowa warstwa to punkty zaznaczone na mapie czerwonymi kropkami.
Podsumowując:
gIntersects – służy do sprawdzenia, czy elementy/warstwy przecinają się wzajemnie.
gIntersection – służy do tworzenia warstwy elementów wspólnych dla dwóch zbiorów.