library(sf) #analizy przestrzenna danych wektorowych w R
## Linking to GEOS 3.6.2, GDAL 2.2.3, PROJ 4.9.3
library(rgugik) #pobranie danych BDOT10k z GUGiK
library(ggplot2)
library(ggResidpanel) #interaktywne wykresy diagnostyczne
library(ggfortify) # wykresy diagnostyczne w stylizacji ggplot2.
<- st_read("dane_dasy/zlewnia_gp.shp") zlewnia
## Reading layer `zlewnia_gp' from data source `/home/anna/DYDAKTYKA/MODELOWANIE/dane_dasy/zlewnia_gp.shp' using driver `ESRI Shapefile'
## Simple feature collection with 1 feature and 1 field
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 328886.4 ymin: 652023.5 xmax: 342809.8 ymax: 661330.8
## proj4string: +proj=tmerc +lat_0=0 +lon_0=19 +k=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +units=m +no_defs
#wczytanie danych z pliku shp
<- st_read("dane_dasy/pop1km_gp3035.shp") pop1km_3035
## Reading layer `pop1km_gp3035' from data source `/home/anna/DYDAKTYKA/MODELOWANIE/dane_dasy/pop1km_gp3035.shp' using driver `ESRI Shapefile'
## Simple feature collection with 105 features and 16 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 4743000 ymin: 3418000 xmax: 4758000 ymax: 3429000
## proj4string: +proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +units=m +no_defs
#transformacja układów współrzędnych z układu 3035 -> 2180
<- st_transform(pop1km_3035, 2180)
pop1km <- pop1km[,c("TOT", "CODE")]
pop1km head(pop1km)
## Simple feature collection with 6 features and 2 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 328571.6 ymin: 652422.9 xmax: 330933.3 ymax: 656512.9
## CRS: EPSG:2180
## TOT CODE geometry
## 1 0 CRS3035RES1000mN3421000E4743000 POLYGON ((329689.6 654530.2...
## 2 4 CRS3035RES1000mN3420000E4743000 POLYGON ((329563.9 653538.8...
## 3 14 CRS3035RES1000mN3421000E4744000 POLYGON ((330681.8 654405.6...
## 4 16 CRS3035RES1000mN3422000E4744000 POLYGON ((330807.6 655396.9...
## 5 29 CRS3035RES1000mN3420000E4744000 POLYGON ((330556.1 653414.3...
## 6 61 CRS3035RES1000mN3419000E4744000 POLYGON ((330430.4 652422.9...
Siatka o wielkości oczka 100 na 100m posłuży do przygotowania końcowej mapy rozmieszczenia ludności. Przygotowanie takiej siatki jest łatwiejsze w QGIS.
<- st_read("dane_dasy/grid100m_2180.shp") grid100m
## Reading layer `grid100m_2180' from data source `/home/anna/DYDAKTYKA/MODELOWANIE/dane_dasy/grid100m_2180.shp' using driver `ESRI Shapefile'
## Simple feature collection with 10500 features and 5 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 328571.6 ymin: 651057.9 xmax: 343832.3 ymax: 661962.3
## proj4string: +proj=tmerc +lat_0=0 +lon_0=19 +k=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +units=m +no_defs
<- grid100m[,1] grid100m
W poprzednim przykładzie sprawdzaliśmy, czy istnieje zależność między liczbą ludności a liczbą punktów adresowych. W tym przykładzie sprawdzimy zależność między liczbą ludności a liczbą mieszkań.
Etapy analizy obejmują:
rgugik
https://cran.r-project.org/web/packages/rgugik/vignettes/topodb.htmllibrary(rgugik)
topodb_download("szczecinecki", outdir = "./dane_dasy") #POBIERANIE DANYCH - WYMAGA DOSTEPU DO INTERNETU
<- read_sf("./dane_dasy/PL.PZGiK.339.3215/BDOT10k/PL.PZGiK.339.3215__OT_BUBD_A.xml")
budynki head(budynki)
## Simple feature collection with 6 features and 36 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 325520.7 ymin: 655642.3 xmax: 333559 ymax: 670101.9
## CRS: 2180
## # A tibble: 6 x 37
## gml_id lokalnyId przestrzenNazw wersjaId czyObiektBDOO x_kod x_skrKarto
## <chr> <chr> <chr> <chr> <lgl> <chr> <chr>
## 1 OT_BUBD… 1FDCBD00-AF1… PL.PZGiK.339.… 2021-02-… FALSE BUBD… <NA>
## 2 OT_BUBD… 1FDCBD00-AF1… PL.PZGiK.339.… 2021-02-… FALSE BUBD… <NA>
## 3 OT_BUBD… 1FDCBD00-AF2… PL.PZGiK.339.… 2021-02-… FALSE BUBD… <NA>
## 4 OT_BUBD… 1FDCBD00-AF2… PL.PZGiK.339.… 2021-02-… FALSE BUBD… <NA>
## 5 OT_BUBD… 1FDCBD00-B1B… PL.PZGiK.339.… 2021-02-… FALSE BUBD… <NA>
## 6 OT_BUBD… 1FDCBD00-B9F… PL.PZGiK.339.… 2021-02-… FALSE BUBD… <NA>
## # … with 30 more variables: x_katDoklGeom <chr>, x_doklGeom <int>,
## # x_doklGeom_uom <chr>, x_zrodloDanychG <chr>, x_zrodloDanychA <chr>,
## # x_katIstnienia <chr>, x_rodzajReprGeom <chr>, x_aktualnoscG <chr>,
## # x_aktualnoscA <chr>, poczatekWersjiObiektu <chr>, x_dataUtworzenia <chr>,
## # x_kodKarto10k <chr>, x_kodKarto25k <chr>, x_kodKarto50k <chr>,
## # x_kodKarto100k <chr>, x_kodKarto250k <chr>, x_kodKarto500k <chr>,
## # x_kodKarto1000k <chr>, funOgolnaBudynku <int>, liczbaKondygnacji <int>,
## # kodKst <int>, zabytek <lgl>, x_informDodatkowa <chr>, nazwa <chr>,
## # x_uwagi <chr>, funSzczegolowaBudynku <list>,
## # EGiB|BT_ReferencjaDoObiektu|idIIP|BT_Identyfikator|lokalnyId <list>,
## # EGiB|BT_ReferencjaDoObiektu|idIIP|BT_Identyfikator|przestrzenNazw <list>,
## # EGiB|BT_ReferencjaDoObiektu|idIIP|BT_Identyfikator|wersjaId <list>,
## # geometry <POLYGON [m]>
<- budynki[,c("x_kod", "liczbaKondygnacji")]
budynki colnames(budynki) <- c("TYP_BUD", "KONDYGNACJE", "geometry")
Warstwa zawiera 4 typy budynków mieszkalnych (zmienna TYP_BUD): - “BUBD01” - budynki jednorodzinne, - “BUBD02” - budynki z dwoma mieszkaniami, - “BUBD03” - budynki z trzema i więcej mieszkaniami, - “BUBD04” - budynki zamieszkania zbiorowego (w tym bursy, akademiki, klasztory)
<- budynki[budynki$TYP_BUD%in%c("BUBD01", "BUBD02", "BUBD03", "BUBD04"),] budynki_mieszkalne
Liczba kondygnacji dla poszczególnych typów budynków.
table(budynki_mieszkalne$TYP_BUD, budynki_mieszkalne$KONDYGNACJE)
##
## 1 2 3 4 5 6 7
## BUBD01 4435 4790 237 2 0 0 0
## BUBD02 18 27 3 0 0 0 0
## BUBD03 87 417 404 112 217 1 2
## BUBD04 13 23 9 2 1 0 0
Selekcję obiektów na podstawie lokalizacji można wykonać wykorzystując funkcje st_join()
lub też indeksowanie (nawiasy kwadratowe).
<- budynki_mieszkalne[pop1km,] budynki_mieszkalne_pop1km
plot(budynki_mieszkalne_pop1km)
st_write(budynki_mieszkalne_pop1km, "out/budynki_mieszkalne_pop1km.shp", delete_dsn = TRUE)
## Warning in abbreviate_shapefile_names(obj): Field names abbreviated for ESRI
## Shapefile driver
## Deleting source `out/budynki_mieszkalne_pop1km.shp' using driver `ESRI Shapefile'
## Writing layer `budynki_mieszkalne_pop1km' to data source `out/budynki_mieszkalne_pop1km.shp' using driver `ESRI Shapefile'
## Writing 568 features with 2 fields and geometry type Polygon.
Na obszarze zlewni górnej Parsęty występują dwa typy budynków: budynki jednorodzinne (“BUBD01”) oraz budynki z trzema i więcej mieszkaniami (“BUBD03”)
Liczba kondygnacji dla poszczególnych typów budynków.
table(budynki_mieszkalne_pop1km$TYP_BUD, budynki_mieszkalne_pop1km$KONDYGNACJE)
##
## 1 2 3
## BUBD01 389 159 4
## BUBD03 2 9 5
Zakładamy, że budynki jednorodzinne składają się z 1 mieszkania. Dla typów “BUBD03” (budynki z trzema i więcej mieszkaniami) zakładamy, że liczba mieszkań równa jest liczbie kondygnacji w budynku. Takie założenie może niedoszacować liczby mieszkań w budynkach wielokondygnacyjnych, w szczególności w obszarach miejskich.
$KATEGORIA[budynki_mieszkalne_pop1km$TYP_BUD%in%c("BUBD01")]<-1 budynki_mieszkalne_pop1km
## Warning: Unknown or uninitialised column: `KATEGORIA`.
#budynki_mieszkalne_pop1km$KATEGORIA[budynki_mieszkalne_pop1km$TYP_BUD%in%c("BUBD02")]<-2
$KATEGORIA[budynki_mieszkalne_pop1km$TYP_BUD%in%c("BUBD03", "BUBD04")]<- budynki_mieszkalne_pop1km$KONDYGNACJE[budynki_mieszkalne_pop1km$TYP_BUD%in%c("BUBD03", "BUBD04")] budynki_mieszkalne_pop1km
W przypadku punktów adresowych każdy punk kontrybuował z wagą 1. W przypadku liczby mieszkań, dany budynek będzie kontrybuował z określoną wagą: 1 - dla budynków jednorodzinnych, 2 - dla budynków z dwoma mieszkaniami, 3 i więcej (w zależności od liczby kondygnacji utożsamianej tu z liczbą mieszkań) - dla budynków z 3 lub więcej mieszkaniami.
<- st_centroid(budynki_mieszkalne_pop1km) centroidy_budynki
## Warning in st_centroid.sf(budynki_mieszkalne_pop1km): st_centroid assumes
## attributes are constant over geometries of x
<- st_join(centroidy_budynki, pop1km[,c("TOT", "CODE")]) budynki_w_pop1km
<- aggregate(KATEGORIA~CODE, budynki_w_pop1km, sum, na.rm=TRUE)
count_budynki colnames(count_budynki) <- c("CODE", "N_BUDYNKI")
<- merge(pop1km, count_budynki, by = "CODE", all.x = TRUE) pop1km
head(pop1km)
## Simple feature collection with 6 features and 3 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 329438.1 ymin: 651057.9 xmax: 333532.8 ymax: 653538.8
## CRS: EPSG:2180
## CODE TOT N_BUDYNKI geometry
## 1 CRS3035RES1000mN3418000E4746000 0 NA POLYGON ((332289.2 651182.4...
## 2 CRS3035RES1000mN3418000E4747000 55 14 POLYGON ((333281.4 651057.9...
## 3 CRS3035RES1000mN3419000E4744000 61 15 POLYGON ((330430.4 652422.9...
## 4 CRS3035RES1000mN3419000E4745000 38 15 POLYGON ((331422.6 652298.3...
## 5 CRS3035RES1000mN3419000E4746000 16 8 POLYGON ((332414.9 652173.8...
## 6 CRS3035RES1000mN3419000E4747000 0 NA POLYGON ((333407.1 652049.2...
$N_BUDYNKI[is.na(pop1km$N_BUDYNKI)]<- 0 pop1km