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)
Industriingeniør som gerne beskæftiger sig med optimering, simulation og matematisk modellering i R, SQL, VBA og Python
Leave a Reply