rpostgis <- R + PostGIS
Dzisiaj post dwa w jednym: baza danych PostgreSQL/PostGIS i R. Dowiecie się jak wczytać i zapisać dane wektorowe do bazy w R. Użyjemy do tego pakietu rpostgis, jeżeli go nie macie musicie go zainstalować i zainicjować (pisaliśmy już o tym). Następnie trzeba utworzyć połączenie do bazy danych z użyciem funkcji dbConnect, gdzie jako argumenty podajemy sterownik do bazy danych oraz dane do zalogowania się do niej:
con <- dbConnect(drv = "PostgreSQL",user = "postgres", password = "postgres", host = "localhost", port = 5432, dbname = "postgres")
Po utworzeniu połączenia przystąpić do importu z niej danych wektorowych. Służy do tego funkcja pgGetGeom. Dla przykładu wczytamy warstwę dróg:
roads <- pgGetGeom(con,"roads")
Zobaczmy co wczytaliśmy:
> roads class : SpatialLinesDataFrame features : 1168 extent : 641775, 685903.4, 491316.1, 523951.3 (xmin, xmax, ymin, ymax) coord. ref. : +proj=tmerc +lat_0=0 +lon_0=19 +k=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs variables : 11 names : gid, osm_id, code, fclass, name, ref, oneway, maxspeed, layer, bridge, tunnel min values : 1, 101006135, 5112, primary, 1 Maja, 1811W, B, 0, -1, F, F max values : 1168, 98529683, 5115, trunk, Zygmunta Florentego Wroblewskiego, S8, F, 120, 2, T, T
Wczytana warstwa liniowa ma 1168 odcinki dróg. Teraz wybierzemy 10 pierwszych dróg z naszej warstwy:
roads_10 <- roads[1:10,]
I zapiszmy nową warstwę do nowej tabeli z użyciem pgInsert podając połączenie do bazy, nazwę tabeli i warstwę do zapisu.
pgInsert(con,"roads_select",roads_10)
Wczytajmy zapisaną tabelę do zmiennej w R:
roads_new <- pgGetGeom(con,"roads_select")
I sprawdźmy ile ma obiektów:
> roads_new class : SpatialLinesDataFrame features : 10 extent : 642116.3, 653776.9, 492406.6, 511818.7 (xmin, xmax, ymin, ymax) coord. ref. : +proj=tmerc +lat_0=0 +lon_0=19 +k=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs variables : 11 names : gid, osm_id, code, fclass, name, ref, oneway, maxspeed, layer, bridge, tunnel min values : 1, 108531755, 5112, secondary, Aleja Jana Pawla II, 4363W, B, 0, 0, F, F max values : 10, 467618812, 5115, trunk, Sloneczna, S8, F, 120, 0, F, F
Tabela ma 10 obiektów liniowych. Zapisywanie działa:) Na koniec naszych działań należy jeszcze zamknąć połączenie z bazą używając:
dbDisconnect(con)
To tyle na dzisiaj. Życzymy miłej integracji R z bazą.