Bazy danychGISProjekt R

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ą.