przejście do zawartości
Zespół Pomiaru Dydaktycznego
Narzędzia użytkownika
Zaloguj
Narzędzia witryny
Narzędzia
Pokaż stronę
Poprzednie wersje
Odnośniki
Menadżer multimediów
Zaloguj
Menadżer multimediów
Ślad:
r_mapy
Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
====== Generowanie map w R ====== ===== Instalacja pakietów ===== Będziemy potrzebować pakietu //rgdal// oraz ZPD: <code rsplus> install.packages(c('rgdal', 'rgeos')) devtools::install_fgithub('zozlak/ZPD') </code> Pod linuksem do skompilowania pakietu potrzebne będą w systemie biblioteki //libgdal-dev// oraz //libproj-dev//. ===== Wczytywanie podkładów z bazy danych ===== Wczytywanie podkładów jest nieco złożone, wymaga bowiem: * 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// * skonwertowanie na obiekt R klasy //SpatialPolygonsDataFrame// * skonwertowanie na ramkę danych, którą będzie potrafił zwizualizować ggplot Przykład dla gmin województwa opolskiego w latach 2008 i 2013. <code rsplus> 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') </code>
r_mapy.txt
· ostatnio zmienione: 2015/02/26 14:07 przez
zozlak
Narzędzia strony
Pokaż stronę
Poprzednie wersje
Odnośniki
Do góry