Geokodierung mit osmdaten in R

In einem früheren Beitrag habe ich gezeigt, wie man mit dem Leaflet-Paket in R kartenbasierte Wärmekarten-Verteilungsdiagramme erstellen kann. In diesem Beispiel habe ich eine Funktion implementiert, die Standorte als Zeichenfolgen an eine Open Street Map-API sendet und dann als Rückgabe Längen- und Breitengradkoordinaten empfängt. Rückgaben werden als Werte im JSON-Format empfangen.

In diesem Beitrag werde ich zeigen, wie man das osmdata-Paket verwenden kann, um eine Geokodierung zu realisieren, ohne eine „komplizierte“ Funktion implementieren zu müssen.

Zuerst definiere ich eine Reihe von Städten und Gemeinden, die als Standorte verwendet werden sollen. Ich füge sie einer leeren Datenrahmenvorlage mit vordefinierten Kopfzeilennamen sowie Zeilen- und Spaltenanzahl hinzu

# Definieren eines Datenrahmen-Tempaltes zum Auffüllen des Geokodierungsprozesses
data_df = as.data.frame(matrix(nrow=20,ncol=4))
colnames(data_df) = c("location","lat","long","values")

# Hinzufügen von Stadt- und Ortsnamen als Standorte
data_df$location = c("Siegen, Germany",      #1
                     "Kreuztal, Germany",    #2
                     "Netphen, Germany",     #3
                     "Olpe, Germany",        #4 
                     "Freudenberg, Germany", #5
                     "Hilchenbach, Germany", #6
                     "Wilnsdorf, Germany",   #7
                     "Betzdorf, Germany",    #8
                     "Dillenburg, Germany",  #9
                     "Marburg, Germany",     #10
                     "Biedenkopf, Germany",  #11
                     "Koblenz, Germany",     #12
                     "Erndtebrück, Germany", #13
                     "Herborn, Germany",     #14
                     "Cölbe, Germany",       #15
                     "Haiger, Germany",      #16
                     "Krombach, Germany",    #17
                     "Wenden, Germany",      #18
                     "Betzdorf, Germany",    #19
                     "Münchhausen, Germany"  #20
                     )

Als nächstes geokodiere ich die Standorte mit dem osmdata-Paket in R.

# Importieren eines Osmdata-Pakets in R.
library(osmdata)

# Verwenden der Funktion getbb () zum Geocodieren von Standorten
for(i in 1:nrow(data_df)){
  coordinates = getbb(data_df$location[i])
  data_df$long[i] = (coordinates[1,1] + coordinates[1,2])/2
  data_df$lat[i] = (coordinates[2,1] + coordinates[2,2])/2
}

Jetzt enthält der Datenrahmen Ortsnamen und geokodierte Längen- und Breitengradkoordinaten. Zusätzlich füge ich einen zufällig verteilten Beobachtungswert pro Standort hinzu (dies definiert die Farbintensität des kartenbasierten Dichtediagramms; sprich “Wärmekarte”).

# zufällig verteilte Werte je Standort (gleichmäßige Verteilung) hinzufügen
data_df$values = runif(n = 20, min = 0, max = 100)

In einem letzten Schritt erstelle ich eine Wärmekarte, in der die Verteilung der Beobachtungswerte nach Ort unter Verwendung von Leaflet in R angezeigt wird.

# Faltblatt, leaflet.extras und magrittr importieren
library(leaflet)
library(leaflet.extras)
library(magrittr)

# Erstellen einer Heatmap für die Intensität der Burger-Suche gemäß Google-Trends
data_df %>%
  leaflet() %>% 
  addTiles() %>% 
  addProviderTiles(providers$OpenStreetMap.DE) %>% 
  setView(mean(data_df$long),mean(data_df$lat),8) %>%
  addHeatmap(lng=~long,lat=~lat,intensity=~values,max=100,radius=30,blur=20)

Leave a Reply

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Close

Meta