7.3 Übungen
7.3.1 Erstelle eine Karte der Bundesrepublik
Als erstes Laden wir unsere Geodaten der Verwaltungsgebiete im Maßstab 1:2.500.000 herunter und extrahieren sie in unseren Projektordner. “Der Datensatz umfasst sämtliche Verwaltungseinheiten der hierarchischen Verwaltungsebenen vom Staat bis zu den Kreisen mit ihren Grenzen, dem Regionalschlüssel und dem Namen der Verwaltungseinheit.”
# Als erstes müssen die wichtigen packages geladen werden
library(sf)
library(tidyverse)
# Laden der Geodaten und als Objekt speichern mit `st_read`
<- sf::st_read("data/vg2500_01-01.utm32s.shape/vg2500/vg2500_sta.shp")
map_state ## Reading layer `vg2500_sta' from data source
## `C:\Dorau\Arbeit\00. R\Book\doku\data\vg2500_01-01.utm32s.shape\vg2500\vg2500_sta.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 3 features and 4 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 280353.1 ymin: 5235878 xmax: 921021.2 ymax: 6104656
## Projected CRS: ETRS89 / UTM zone 32N
# Ein Riesenvorteil des sf packages ist die Kompatibilität mit dem tidyverse. Daher hat man alle Funktionalitäten im Zusammenhang mit ggplot und auch m Daten zu transformieren oder zu filtern
%>%
map_state ggplot() +
geom_sf()
Das sieht aber merkwürdig aus?! Zeile 1 in eurem erstellten Objekt steht für das Seeeinzugsgebiet Deutschlands. Wir können die erste Zeile mit slice
und dem pipe operator %>%
einfach entfernen:
<- map_state %>%
p1 slice(2:3) %>% # Zeile 1 codiert das Seeeinzugsgebiet. Mit `slice` entfernt man die erste Zeile in dem man bestätigt Zeile 2 bis 3 zu behalten
ggplot() +
geom_sf()
p1
Sehr schön 😄 Sylt ist wieder zu erkennen! Falls die Farbe nicht gefällt kann man das theme
einfach anpassen.
%>%
map_state slice(2:3) %>%
ggplot() +
geom_sf(fill = "grey40") +
theme_void()
Falls uns aber nicht die Bundesgrenzen interessieren sondern die Landes- oder sogar Kreisgrenzen, so können wir diese aus unseren Daten ebenfalls einlesen. Die Codierung der Datei lautet:
- Land (
lan
) - Regierungsbezirk (
rbz
) - Kreis (
krs
)
# Einlesen der Daten
<- sf::st_read("data/vg2500_01-01.utm32s.shape/vg2500/vg2500_lan.shp")
map_federal ## Reading layer `vg2500_lan' from data source
## `C:\Dorau\Arbeit\00. R\Book\doku\data\vg2500_01-01.utm32s.shape\vg2500\vg2500_lan.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 16 features and 4 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 280353.1 ymin: 5235878 xmax: 921021.2 ymax: 6101335
## Projected CRS: ETRS89 / UTM zone 32N
# Darstellen der Landesgrenzen
<- map_federal %>%
p2 ggplot() +
geom_sf()
p2
# Einlesen der Daten
<- sf::st_read("data/vg2500_01-01.utm32s.shape/vg2500/vg2500_krs.shp")
map_district ## Reading layer `vg2500_krs' from data source
## `C:\Dorau\Arbeit\00. R\Book\doku\data\vg2500_01-01.utm32s.shape\vg2500\vg2500_krs.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 401 features and 4 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 280353.1 ymin: 5235878 xmax: 921021.2 ymax: 6101335
## Projected CRS: ETRS89 / UTM zone 32N
# Darstellen der Landesgrenzen
<- map_district %>%
p3 ggplot() +
geom_sf()
p3
Es ist Zeit zu feiern! Wir haben unsere erste vektorbasierte Karte mit R erstellt 👍
Man kann weiterhin einzelne Verwaltungsbezirke auswählen und darstellen. Die Objektstruktur eines sf
Objektes ermöglicht dies.
# Stelle die ersten 5 Zeilen des Objektes map_district dar
head(map_district, 5)
## Simple feature collection with 5 features and 4 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 478836.8 ymin: 5958992 xmax: 629246.8 ymax: 6075267
## Projected CRS: ETRS89 / UTM zone 32N
## ADE ARS ARS_0 GEN geometry
## 1 4 01001 010010000000 Flensburg MULTIPOLYGON (((531471 6075...
## 2 4 01002 010020000000 Kiel MULTIPOLYGON (((577310.3 60...
## 3 4 01003 010030000000 Lübeck MULTIPOLYGON (((624204.4 59...
## 4 4 01004 010040000000 Neumünster MULTIPOLYGON (((567602.5 59...
## 5 4 01051 010510000000 Dithmarschen MULTIPOLYGON (((479551.7 59...
In der Spalte GEN sind die Namen der Bezirke codiert wohingegen die Geometrien (Formen) in der Spalte daneben gelistet sind.
%>%
map_district filter(GEN == "Berlin") %>% # mit filter() durchsuchen wir die Spalte GEN nach dem Wort Berlin
ggplot() +
labs(
title = "Berlin"
+
) geom_sf()
7.3.2 Erstelle eine Weltkarte
Shape Daten der Ländergrenzen sind im package rnaturalearth
enthalten.
# Laden der Daten und speichern als Objekt map_world
<- rnaturalearth::ne_countries(scale = "medium", returnclass = "sf")
map_world
%>%
map_world ggplot() +
geom_sf(fill = "white", color = "black") +
labs(
title = "World map",
subtitle = paste0("(", length(unique(map_world$admin)), " countries)"), # Die Funktion length() zählt die Länge des Vektors und damit die Anzahl der Länder
x = "Longitude",
y = "Latitude"
)