# install.packages("mapview")
library(mapview)
library(sf)
library(tidyr)R Tutorial: mapview
Dieses Tutorial basiert auf Arbeiten von BMARSYS-Studierenden im begleitenden Seminar zum DS2-Modul und wurde redaktionell überarbeitet.
Das R-Paket mapview ermöglicht die schnelle Erstellung interaktiver Karten aus räumlichen Daten. Im Gegensatz zu statischen ggplot2-Karten können Nutzer in mapview-Karten zoomen, verschieben und auf Features klicken, um Detailinformationen in Popups zu sehen. mapview eignet sich hervorragend zur explorativen Datenanalyse — für hochqualitative Präsentationskarten sind dagegen Pakete wie ggplot2 + sf oder tmap besser geeignet.
Installation
mapview baut intern auf dem leaflet-Paket auf und erzeugt HTML-Widgets, die in RStudio, Quarto-Dokumenten und Shiny-Apps angezeigt werden können.
Erste Karte erstellen
mapview enthält einige Beispieldatensätze zum Ausprobieren. Der Datensatz breweries enthält Standorte von Brauereien in Franken (Bayern) als sf-Punkte. Ein einziger Aufruf von mapview() erzeugt eine vollständige interaktive Karte mit Hintergrundkarte, Zoom-Steuerung und klickbaren Punkten:
mapview(breweries)Die Karte ist sofort interaktiv: Zoomen (Mausrad oder +/- Buttons), Verschieben (Klicken und Ziehen) und Klicken auf einzelne Punkte für Popup-Informationen funktionieren automatisch. Im Layer-Control (oben rechts) kann zwischen verschiedenen Hintergrundkarten gewechselt werden.
Falls eigene Daten als normaler Data Frame mit Längen- und Breitengradspalten vorliegen, müssen diese zuerst mit dem sf-Paket in ein räumliches Objekt umgewandelt werden:
# x <- st_as_sf(x, coords = c("long", "lat"), crs = 4326)Attribute darstellen
Mit dem Argument zcol lassen sich die Features nach einer Variablen einfärben. mapview wählt automatisch eine passende Farbskala und erstellt eine Legende. Kategorische und numerische Variablen werden unterschiedlich behandelt:
mapview(breweries, zcol = "number.of.types")Die Farbpalette kann mit col.regions angepasst werden — entweder als Farbfunktion (z.B. rainbow, heat.colors) oder als Vektor von Farbnamen:
mapview(breweries, zcol = "number.of.types", col.regions = rainbow)Für eine differenziertere Darstellung mit selbst definierten Klassenbruchpunkten dient das Argument at. Im folgenden Beispiel werden die Brauereien nach Gründungsjahr eingefärbt. drop_na() entfernt vorher Einträge ohne Gründungsdatum:
mapview(
drop_na(breweries),
zcol = "founded",
col.regions = rainbow,
at = c(0, 1500, 1800, 2000, 2013),
legend = TRUE,
layer.name = "Brauereien nach Gründungsjahr"
)Polygone darstellen
mapview kann neben Punkten auch Polygone und Linien darstellen. Der Datensatz franconia enthält die drei Regierungsbezirke Frankens als Polygone. Die Argumente color (Randfarbe) und col.regions (Flächenfarbe) steuern die Darstellung:
mapview(franconia, color = "white", col.regions = "red")Mit zcol lassen sich die Polygone auch nach Attributen einfärben — hier die Aufteilung nach Ober-, Unter- und Mittelfranken:
mapview(franconia, zcol = "district", legend = TRUE)Mehrere Layer kombinieren
Ein großer Vorteil von mapview: Mehrere Layer lassen sich einfach mit dem +-Operator übereinanderlegen. Im Layer-Control (oben rechts) können einzelne Layer ein- und ausgeblendet werden:
mapview(franconia) + breweriesFür eine differenziertere Darstellung — z.B. mit unterschiedlichen zcol-Variablen und Farbskalen pro Layer — können die Datensätze als Liste übergeben werden. Die Argumente werden dann ebenfalls als Listen angegeben, wobei jedes Listenelement einem Layer entspricht:
mapview(
list(franconia, drop_na(breweries)),
zcol = list("district", "founded"),
legend = list(TRUE, TRUE),
at = list(NULL, c(1500, 1800, 2000, 2013))
)Hintergrundkarten ändern
Standardmäßig bietet mapview mehrere Hintergrundkarten (Basemaps) an, zwischen denen über das Layer-Control gewechselt werden kann. Mit map.types lassen sich gezielt bestimmte Karten auswählen. Verfügbare Anbieter sind u.a. OpenStreetMap, Esri, CartoDB und Stamen:
mapview(
franconia,
zcol = "SHAPE_AREA",
map.types = c("Esri.WorldShadedRelief", "OpenStreetMap.DE"),
color = "orange"
)Eine vollständige Liste verfügbarer Basemaps findet man mit mapviewGetOption("basemaps") oder auf der Leaflet Providers Demo-Seite.