title | author | date | output | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
B2 - Geokodierung |
Jan-Philipp Kolb |
23 Oktober 2018 |
|
- Das Konzept der Geokoordinaten erklären
- Möglichkeiten vorstellen, die Geokodierung mit R durchzuführen
- Nutzung der Nominatim API
Geocoding (...) uses a description of a location, most typically a postal address or place name, to find geographic coordinates from spatial reference data ...
- Einer der ersten Ansätze Geokodierung mit R durchzuführen
- Wenn Geokodierung mit R durchgeführt wird dieses Paket wohl am häufigsten verwendet.
- Das führt auch dazu, dass im Internet zahlreiche Anwendungsbeispiele zu finden sind.
library(ggmap)
geocode("Heidelberg")
Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=Heidelberg&sensor=false
lon lat
1 8.672434 49.39875
mapdist("Q1, 4 Mannheim","B2, 1 Mannheim")
mapdist("Q1, 4 Mannheim","B2, 1 Mannheim",mode="walking")
mapdist("Q1, 4 Mannheim","B2, 1 Mannheim",mode="bicycling")
- Beim Paket
tmaptools
wird die Nominatim API zur Geokodierung verwendet. - Diese Funktion hat den Vorteil, dass eine Projektion ausgewählt werden kann, in der die Geokodierungen zurück gegeben werden.
library("tmaptools")
?geocode_OSM
cities <- c("Hamburg","Koeln","Dresden","Muenchen")
lat <- vector()
lon <- vector()
for (i in 1:length(cities)){
gc <- geocode_OSM(cities[i])
lat[i] <- gc$coords[1]
lon[i] <- gc$coords[2]
}
Dat <- data.frame(cities,lon,lat)
kable(Dat)
cities lon lat
Hamburg 53.55034 10.000654 Koeln 50.93836 6.959974 Dresden 51.04933 13.738144 Muenchen 48.13711 11.575382
Reverse geocoding is the process of back (reverse) coding of a point location (latitude, longitude) to a readable address or place name. This permits the identification of nearby street addresses, places, and/or areal subdivisions such as neighbourhoods, county, state, or country.
Quelle: Wikipedia
revgeocode(c(48,8))
- Hier wird ein Beispieldatensatz eingelesen, den ich über räumliche Stichproben und reverse geocoding erzeugt habe.
load("../data/addr_list_t_68239.RData")
head(addr_list_t)
## [1] "Lilienstraße 32A, 68535 Edingen-Neckarhausen, Germany"
## [2] "Waldspitze 6, 68239 Mannheim, Germany"
## [3] "Holzweg 51, 68239 Mannheim, Germany"
## [4] "Kloppenheimer Str. 247, 68239 Mannheim, Germany"
## [5] "Mallaustraße 121, 68219 Mannheim, Germany"
## [6] "Holzweg 33A, 68239 Mannheim, Germany"
geocode_OSM(addr_list_t[1])
## $query
## [1] "Lilienstraße 32A, 68535 Edingen-Neckarhausen, Germany"
##
## $coords
## x y
## 8.584601 49.445360
##
## $bbox
## min max
## x 8.584494 8.584708
## y 49.445276 49.445443
- im Objekt
gc_list
werden die Ergebnisse gespeichert.
gc_list <- list()
for (i in 1:length(addr_list_t)){
gc_list[[i]] <- geocode_OSM(addr_list_t[i])
}
- Um dieses Paket zu nutzen muss man sich vorher bei der API registrieren
library(opencage)
gc_info<-opencage_forward(placename =
"Amsterdam, Van Woustraat")
- Hinweise, wie das Paket genutzt erden kann sind im opencage Tutorial zu finden.
Das Paket geonames
- Ein Account ist notwendig um die meisten Funktionen des Paketes
geonames
zu nutzen.
library(geonames)
options(geonamesUsername="myusername")
MAwiki<-GNfindNearbyWikipedia(postalcode=68239,country="DE",
radius=10)
-
Login für die Nutzung des Web-Services Geonames.
-
Hier kann man das Arbeiten mit dem Webservice starten.
library(osmdata)
bbox <- getbb("Mannheim")
erg <- geonames::GNcities(49.649591,8.627236,
49.329591,8.307236)
library("RJSONIO")
api_adress <- "http://nominatim.openstreetmap.org/search?format="
file_format <- "json"
search_query <- "&addressdetails=1&extratags=1&q="
adress <- "Amsterdam+Niederlande+Rozengracht+1"
link <- paste0(api_adress,file_format,search_query,adress)
link
## [1] "http://nominatim.openstreetmap.org/search?format=json&addressdetails=1&extratags=1&q=Amsterdam+Niederlande+Rozengracht+1"
con <- url(link)
geoc <- fromJSON(paste(readLines(con,warn=F),
collapse = ''))
close(con)
names(geoc[[1]])
## [1] "place_id" "licence" "osm_type" "osm_id"
## [5] "boundingbox" "lat" "lon" "display_name"
## [9] "class" "type" "importance" "address"
## [13] "extratags"
geoc[[1]]$address
## house_number road residential suburb
## "1" "Rozengracht" "Jordaan" "Amsterdam"
## city_district city state postcode
## "Centrum" "Amsterdam" "Noord-Holland" "1016LP"
## country country_code
## "Nederland" "nl"
con <- url("http://nominatim.openstreetmap.org/search?format=json&
addressdetails=1&extratags=1&q=Amsterdam+Niederlande+Rozengracht+1")
geoc2 <- jsonlite::fromJSON(con)
geoc2df <- with(geoc2,data.frame(osm_id,lat,lon))
geoc2df$house_number <- geoc2$address$house_number
Wir erhalten nun Daten für mehrere Anschriften:
osm_id lat lon house_number
2721815875 52.3737223 4.8826404 1
2743624072 52.3719482 4.8755534 237-1
2721830930 52.3736673 4.8823914 7-1
2721827922 52.3734021 4.8813371 53-1
2721824637 52.372232 4.8767542 231-1
2721823434 52.3724786 4.8776618 187-1
2721820122 52.3727335 4.8786657 137-1
2721816644 52.3729874 4.8797588 105E-1
2720971311 52.3727658 4.8775263 194-1
2720971056 52.3728019 4.8775994 184-1
Accesses Google Maps APIs to Retrieve Data and Plot Maps
library(googleway)
- Ein API Schlüssel ist notwendig um die meisten Funktionen des Paketes zu nutzen.
-
Das Paket
bbox
ist auf github zu finden. -
Beispieldatensatz laden:
load("../data/ddat.RData")
- Rahmen für das räumliche Objekt bestimmen:
library(bbox)
b_box(ddat)
## [1] 5.866286 47.273602 15.048632 55.058262
citation("bbox")
-
Überblick von Jesse Sadler zur Geokodierung mit R
-
Ein Schummelzettel für
ggmap
-
Die Vignette zum Paket
tmap
- tmap: get started -
latlong.net - eine Homepage um Koordinaaten zu bestimmen.