Narzędzia użytkownika

Narzędzia witryny


r_mapy

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Nowa wersja
Poprzednia wersja
r_mapy [2015/02/20 12:55]
zozlak utworzono
r_mapy [2015/02/26 14:07]
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 11: Linia 11:
 Pod linuksem do skompilowania pakietu potrzebne będą w systemie biblioteki //​libgdal-dev//​ oraz //​libproj-dev//​. Pod linuksem do skompilowania pakietu potrzebne będą w systemie biblioteki //​libgdal-dev//​ oraz //​libproj-dev//​.
  
-===== Pobieramy ​podkład z bazy danych =====+===== Wczytywanie ​podkładów z bazy danych =====
  
-Przykład dla powiatów z roku 2014:+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> <code rsplus>
 library(ZPD) library(ZPD)
 +library(rgdal)
 +library(ggplot2)
 +
 +# pobranie z bazy
 src = polacz() src = polacz()
 zapytanie = " zapytanie = "
-  SELECT id_wojewodztwaid_powiatu, ST_AsGeoJSON(geom, 3) AS geojson  +  SELECT ​ 
-  FROM teryt_powiaty ​ +    ​id_wojewodztwa ​* 10000 + id_powiatu ​* 100 + id_gminy AS teryt, 
-  WHERE rok 2014+    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)) %>% podklady = tbl(src, sql(zapytanie)) %>%
   collect()   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>​ </​code>​
  
  
r_mapy.txt · ostatnio zmienione: 2015/02/26 14:07 przez zozlak