GISProjekt R

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.