Będziemy potrzebować pakietu rgdal oraz ZPD:
install.packages(c('rgdal', 'rgeos')) devtools::install_fgithub('zozlak/ZPD')
Pod linuksem do skompilowania pakietu potrzebne będą w systemie biblioteki libgdal-dev oraz libproj-dev.
Wczytywanie podkładów jest nieco złożone, wymaga bowiem:
Przykład dla gmin województwa opolskiego w latach 2008 i 2013.
library(ZPD) library(rgdal) library(ggplot2) # pobranie z bazy src = polacz() zapytanie = " SELECT id_wojewodztwa * 10000 + id_powiatu * 100 + id_gminy AS teryt, rodzaj_gminy, rok, ST_AsGeoJSON(geom) AS geojson FROM teryt_gminy WHERE id_wojewodztwa = 16 AND rok IN (2008, 2013) " podklady = tbl(src, sql(zapytanie)) %>% collect() # konwersja na FeatureCollection podklady = podklady %>% group_by(rok) %>% summarize( geojson = paste0(collapse = ',', '{"type": "Feature", ', '"properties": { "teryt": ', podklady$teryt, ', "rodzaj_gminy": "', podklady$rodzaj_gminy, '"},', '"geometry": ', podklady$geojson, '}' ) ) %>% mutate(geojson = paste0('{"type": "FeatureCollection", "features": [', geojson, ']}')) # konwersja na SpatialPolygonsDataFrame wraz z dorzuceniem centroidów mapy.backup = lapply(podklady$geojson, function(x){ x = readOGR(x, layer = "OGRGeoJSON", stringsAsFactors = F) x@data = cbind(x@data, setNames(as.data.frame(coordinates(x)), c('x', 'y'))) return(x) }) # konwersja na ramkę danych rysowalną dla ggplot-a mapy = lapply(mapy.backup, function(mapa){ ramkaDanych = fortify(mapa) ramkaDanych$id = as.numeric(ramkaDanych$id) return(left_join(ramkaDanych, mapa@data)) }) mapy = bind_rows(mapy) # weryfikacja ggplot(mapy %>% filter(rok == 2013), aes(x = long, y = lat, fill = rodzaj_gminy, group = id)) + geom_polygon(colour = '#000000')