I tidligere indlæg har jeg demonstreret, hvordan man geokoder placeringser ved hjælp af Open Street Map API på to forskellige måder.
Den første tilgang var at implementere en funktion, der sender en streng direkte til OSM API ved hjælp af http. API’en returnerer derefter rumlige koordinater i json-format.
Den anden tilgang var at bruge osmdata-pakken i R, mere specifikt dens getbb() -funktion. Denne funktion returnerer en matrix med bredde- og længdegradsværdier for en given placeringsstreng, dvs. den gør det samme som den første funktion uden at skulle implementeres fra bunden af.
I dette indlæg viser jeg en anden pakke i R som giver mulighed for simpel geokodning ved hjælp af OSM API: Tidygeocoder R-pakken.
I nedenstående linjer konstruerer jeg en datarammeskabelon med foruddefinerede placeringsnavne (tegnstrenge).
# definerer en datarammeskabelon, der skal udfyldes gennem geokodningsprocessen
data_df = as.data.frame(matrix(nrow=20,ncol=3))
colnames(data_df) = c("location","lat","long")
# tilføjelse af by- og bynavne som placeringer
data_df$location = c("Hamburg, Germany", #1
"Dortmund, Germany", #2
"Stuttgart, Germany", #3
"Berlin, Germany", #4
"Dresden, Germany", #5
"Bremen, Germany", #6
"Leipzig, Germany", #7
"Kiel, Germany", #8
"Rostock, Germany", #9
"Karlsruhe, Germany", #10
"Siegen, Germany", #11
"Bonn, Germany", #12
"Essen, Germany", #13
"Gelsenkirchen, Germany", #14
"Marburg, Germany", #15
"Frankfurt am Main, Germany", #16
"Heidelberg, Germany", #17
"Freiburg, Germany", #18
"Pforzheim, Germany", #19
"Flensburg, Germany" #20
)
Dernæst geokoder jeg placeringerne ved hjælp af tidygeocoder-pakken i R. Mere specifikt bruger jeg dens geo_osm-funktion:
# importer tidygeocoder-pakke i R
library(tidygeocoder)
# gekodning ved hjælp af geo_osm ()-funktionen til at geokode placeringer
for(i in 1:nrow(data_df)){
coordinates = geo_osm(data_df$location[i])
data_df$long[i] = coordinates$long
data_df$lat[i] = coordinates$lat
}
Datarammen er nu fuldt udfyldt. Den indeholder placeringsnavne og deres respektive bredde- og længdegradskoordinater.
I et sidste trin plotter jeg placeringerne i datarammen på et kort ved hjælp af markører.
# 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),5) %>%
addMarkers()
Industriingeniør som gerne beskæftiger sig med optimering, simulation og matematisk modellering i R, SQL, VBA og Python
Leave a Reply