Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Poprzednia wersja Nowa wersja | Poprzednia wersja | ||
r_mapy [2015/02/20 14:03] zozlak |
r_mapy [2015/02/26 14:07] (aktualna) zozlak |
||
---|---|---|---|
Linia 5: | Linia 5: | ||
Będziemy potrzebować pakietu //rgdal// oraz ZPD: | Będziemy potrzebować pakietu //rgdal// oraz ZPD: | ||
<code rsplus> | <code rsplus> | ||
- | install.packages('rgdal') | + | install.packages(c('rgdal', 'rgeos')) |
devtools::install_fgithub('zozlak/ZPD') | devtools::install_fgithub('zozlak/ZPD') | ||
</code> | </code> | ||
Linia 17: | Linia 17: | ||
* wczytania z bazy danych kontekstowych i opisu obszaru w formacie GeoJSON dla każdego JST | * wczytania z bazy danych kontekstowych i opisu obszaru w formacie GeoJSON dla każdego JST | ||
* ręcznego złączenia tego w jeden obiekt GeoJSON typu //FeatureCollection// | * ręcznego złączenia tego w jeden obiekt GeoJSON typu //FeatureCollection// | ||
- | * sparsowania na format pakietu //rgdal// | + | * skonwertowanie na obiekt R klasy //SpatialPolygonsDataFrame// |
+ | * skonwertowanie na ramkę danych, którą będzie potrafił zwizualizować ggplot | ||
- | Przykład dla gmin województwa dolnośląskiego w latach 2008 i 2013. | + | Przykład dla gmin województwa opolskiego w latach 2008 i 2013. |
<code rsplus> | <code rsplus> | ||
library(ZPD) | library(ZPD) | ||
library(rgdal) | library(rgdal) | ||
+ | library(ggplot2) | ||
# pobranie z bazy | # pobranie z bazy | ||
Linia 30: | Linia 32: | ||
SELECT | SELECT | ||
id_wojewodztwa * 10000 + id_powiatu * 100 + id_gminy AS teryt, | id_wojewodztwa * 10000 + id_powiatu * 100 + id_gminy AS teryt, | ||
- | rodzaj_gminy, | + | rodzaj_gminy, rok, |
- | ST_AsGeoJSON(geom) AS geojson | + | ST_AsGeoJSON(geom) AS geojson |
FROM teryt_gminy | FROM teryt_gminy | ||
- | WHERE id_wojewodztwa = 2 AND rok IN (2008, 2013) | + | WHERE id_wojewodztwa = 16 AND rok IN (2008, 2013) |
" | " | ||
podklady = tbl(src, sql(zapytanie)) %>% | podklady = tbl(src, sql(zapytanie)) %>% | ||
Linia 51: | Linia 53: | ||
mutate(geojson = paste0('{"type": "FeatureCollection", "features": [', geojson, ']}')) | mutate(geojson = paste0('{"type": "FeatureCollection", "features": [', geojson, ']}')) | ||
- | # konwersja na obiekty rgdal | + | # konwersja na SpatialPolygonsDataFrame wraz z dorzuceniem centroidów |
- | mapy = sapply(podklady$geojson, readOGR, layer = "OGRGeoJSON") | + | mapy.backup = lapply(podklady$geojson, function(x){ |
- | names(mapy) = podklady$rok | + | 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 | # weryfikacja | ||
- | plot(mapy[[1]]) | + | ggplot(mapy %>% filter(rok == 2013), aes(x = long, y = lat, fill = rodzaj_gminy, group = id)) + |
- | head(mapy[[1]]@data) | + | geom_polygon(colour = '#000000') |
</code> | </code> | ||