Nowa biblioteka SF do GIS w R
Niedawno pisaliśmy na facebooku o tym że pojawiła się nowa biblioteka sf do obsługi danych GIS. Dzisiaj pokażemy Wam jej podstawowe funkcje. Zaczynamy jak zawsze od zainstalowania i załadowania wspomnianej biblioteki. Jeżeli nie wiecie jak to zrobić zajrzyjcie tutaj. Do wczytania warstw w nowej bibliotece używamy funkcji st_read(). Wczytamy dwie używane przez nas wcześniej warstwy kolej i drogi (pobierz):
kolej <- st_read("d:/kolej.shp") drogi <- st_read(“d:/drogi.shp”)
Przyjrzyjmy się jak wczytuje się warstwa kolej:
> kolej Simple feature collection with 213 features and 4 fields geometry type: LINESTRING dimension: XY bbox: xmin: 638667.5 ymin: 490053.6 xmax: 678777.7 ymax: 519583.1 epsg (SRID): NA proj4string: +proj=tmerc +lat_0=0 +lon_0=19 +k=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +units=m +no_defs First 10 features: osm_id code fclass name geometry 1 386300178 6101 rail <NA> LINESTRING (653730.8 501223... 2 231222504 6101 rail <NA> LINESTRING (665651.8 514286... 3 386300180 6101 rail <NA> LINESTRING (653676.8 501157... 4 231222505 6101 rail <NA> LINESTRING (665642.9 514304... 5 386300181 6101 rail <NA> LINESTRING (653673.9 501161... 6 386300183 6101 rail <NA> LINESTRING (653302 500875.2... 7 386300185 6101 rail <NA> LINESTRING (653683.9 501168... 8 386300186 6101 rail <NA> LINESTRING (654124.1 501500... 9 151869141 6101 rail <NA> LINESTRING (666733 500047.1... 10 386300188 6101 rail <NA> LINESTRING (653295.8 500883…
Geometria jest zapisywana jako osobna kolumna w standardzie simple feature OGC (dokumentacja – http://www.opengeospatial.org/standards/sfa), a nie tak jak rgdal w postaci obiektowej.
W bibliotece umieszczone zostały nie tylko narzędzia do odczytywania, ale również do analiz przestrzennych. Narzędzia te korzystają z biblioteki rgeos. Na przykład intersekcję możemy wykonać funkcją st_intersection():
intersection <- st_intersection(kolej,drogi) > intersection Simple feature collection with 57 features and 14 fields geometry type: POINT dimension: XY bbox: xmin: 643117.5 ymin: 493192.1 xmax: 678538.3 ymax: 519410.1 epsg (SRID): NA proj4string: +proj=tmerc +lat_0=0 +lon_0=19 +k=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +units=m +no_defs
Na obiektach sf możemy wykonać wszystkie działania z biblioteki rgeos.
Zapis warstwy do pliku odbywa się z użyciem funkcji st_write():
st_write(kolej,"d:/intersection.shp")
A teraz wisienka na torcie:) Dlaczego biblioteka jest lepsza od bibliotek rgdal i rgeos? Została zoptymalizowana co przyspiesza znacznie proces wczytania, zapisu i analizy danych. Przykładem może być wczytanie warstwy poligonów zawierającej ok. 600 000 budynków:
Unit: seconds expr min lq mean median uq max neval f_st_read() 20.53183 20.53183 20.53183 20.53183 20.53183 20.53183 1 f_readOGR() 141.17039 141.17039 141.17039 141.17039 141.17039 141.17039 1
Narzędzia nowej biblioteki są 7x szybsze od rgdal przy wczytywaniu danych. Jej plusem jest z pewnością również integrowanie narzędzi z dwóch oddzielnych bibliotek rgdal i rgeos.
Nowa biblioteka nie ma tylko samych plusów:( O jej wadach i obejściu ich w kolejnym poście.