Geokodning med osmdata i R

I et tidligere indlæg demonstrerede jeg, hvordan man kan generere kortbaserede varmekortfordelingsdiagrammer ved hjælp af Leaflet-pakken i R. I det eksempel implementerede jeg en funktion, der sender placeringer som strenge til en Open Street Map API og derefter modtager bredde- og længdegradskoordinater som retur værdier i JSON-format.

Først definerer jeg et sæt byer, der skal bruges som placeringer; Jeg tilføjer dem til en tom datarammeskabelon med foruddefinerede headernavne samt række- og kolonnetællinger

I dette indlæg vil jeg demonstrere, hvordan man kan bruge osmdata-pakken til at realisere geokodning uden at skulle implementere en “kompliceret” funktion.

# definerer en dataramme tempalte til at udfylde gennem geokodningsprocessen
data_df = as.data.frame(matrix(nrow=20,ncol=4))
colnames(data_df) = c("location","lat","long","values")

# tilføjelse af by- og bynavne som placeringer
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
                     )

Dernæst geokoder jeg placeringer ved hjælp af osmdata-pakken i R.

# importerer osmdatapakke i R
library(osmdata)

# bruger getbb()-funktionen til at geokode placeringer
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
}

Nu indeholder datarammen placeringsnavne og geokodede længde- og breddegradskoordinater; derudover tilføjer jeg nogle tilfældigt distribuerede observationsværdier pr. placering (dette definerer farveintensiteten på varmekortplottet).

# tilføjelse af tilfældigt fordelte værdier efter placering (ensartet fordeling)
data_df$values = runif(n = 20, min = 0, max = 100)

I et sidste trin genererer jeg et varmekort, der viser fordelingen af ​​observationsværdier efter placering:

# importerende folder, folder. ekstra og magrittr
library(leaflet)
library(leaflet.extras)
library(magrittr)

# opretter et varmekort til burgerens søgeintensitet i henhold til Googles tendenser
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

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Close

Meta