12
Geographisches Institut / Abteilung Geomatik Geocodierung mit RStudio am Beispiel Google Maps API Thomas Mönkemeier, B.Eng. Prof. Dr. Tobia Lakes Humboldt-Universität zu Berlin [email protected]

GISDday 2014 Geocodierung mit R am Beispiel Google Maps API

Embed Size (px)

DESCRIPTION

Vortrag am 19.11.2014 14:40 am GFZ Potsdam: Geocodierung mit R am Beispiel Google Maps API #gdmoen

Citation preview

Page 1: GISDday 2014 Geocodierung mit R am Beispiel Google Maps API

Geographisches Institut / Abteilung Geomatik

Geocodierung mit RStudio am Beispiel Google Maps API

Thomas Mönkemeier, B.Eng.

Prof. Dr. Tobia Lakes

Humboldt-Universität zu Berlin

[email protected]

Page 2: GISDday 2014 Geocodierung mit R am Beispiel Google Maps API

Geographisches Institut / Abteilung Geomatik

Aufgabe: Geocodierung

• Häufige Anforderung aus der Praxis am Institut: „Liste mit Adressen in ein Shape umwandeln“

• Gegeben: Liste mit Adressen

• Gewünscht: Shape für irgendeine GIS-Software

• Verwendung von RStudio mit der Google Maps API als kleines Beispiel für Flexibilität von R

Page 3: GISDday 2014 Geocodierung mit R am Beispiel Google Maps API

Geographisches Institut / Abteilung Geomatik

Umgebung: RStudio

• R ist eine freie Programmiersprache für statistisches Rechnen (z.B. Regressionsanalyse, ANOVA...) und statistische Grafiken

• R gilt zunehmend als Standardsprache für statistische Problemstellungen

• R ist open source und Teil des GNU-Projekts

• Kommandozeilenkonsole führt Befehle direkt aus

• RStudio wohl die beliebteste Entwicklungsumgebung

• Packages für R stellen weitere Funktionen bereit

Page 4: GISDday 2014 Geocodierung mit R am Beispiel Google Maps API

Geographisches Institut / Abteilung Geomatik

Beispiel: Google Maps API

• Aufgabe: Geocodierung

• Vorteil: Toleranz bei Eingabefehlern

• Webservice, ohne Registrierung verfügbar

• Kein API-Schlüssel mehr erforderlich

• Lizenzbedingungen: Maximal 2500 Anfragen pro Tag,Ergebnisse müssen auf einer GoogleMap angezeigt werden

• Beispiel übertragbar auf andere Geocoder wie OpenCage, Nominatim, BingMaps...

Page 5: GISDday 2014 Geocodierung mit R am Beispiel Google Maps API

Geographisches Institut / Abteilung Geomatik

Funktion für Google Maps API

library(RCurl)

library(RJSONIO)

googleurl=function(address, format = "json", sensor = "false") {

root="http://maps.google.com/maps/api/geocode/"

url=paste(root, format, "?address=", address, "&sensor=", sensor, sep = "")

return(URLencode(url))

}

Page 6: GISDday 2014 Geocodierung mit R am Beispiel Google Maps API

Geographisches Institut / Abteilung Geomatik

Liste der Adressen einlesen

• Komplette Adressen in erster Spalte (für Google Maps)

• Optional: Weitere Attribute CSV-getrennt

• Adress-Liste einlesen in R-Studio Dataframe:

liste=read.csv("adressen.txt", header=FALSE, sep=";", fileEncoding="UTF-8")

zeilen=nrow(liste)

spalten=ncol(liste)

Page 7: GISDday 2014 Geocodierung mit R am Beispiel Google Maps API

Geographisches Institut / Abteilung Geomatik

Old School: Schleife

for(i in 1:zeilen) {

url=googleurl(liste$V1[i])

doc=getURL(url)

coords=fromJSON(doc,simplify = FALSE)

if(coords$status=="OK") {

liste$x[i]=coords$results[[1]]$geometry$location$lng

liste$y[i]=coords$results[[1]]$geometry$location$lat

liste$type[i]=coords$results[[1]]$geometry$location_type

}

Sys.sleep(1)

}

Page 8: GISDday 2014 Geocodierung mit R am Beispiel Google Maps API

Geographisches Institut / Abteilung Geomatik

Punkte aus Liste erzeugen

• Spatial Data Packages für R einbinden:

library(sp)

library(rgdal)

library(raster)

• Spatial Dataframe erzeugen aus Liste:

shapefile = SpatialPointsDataFrame(liste[(spalten+1):(spalten+2)], liste)

• Räumliches Bezugssystem festlegen:

projection(shapefile)=CRS("+proj=longlat +datum=WGS84")

Page 9: GISDday 2014 Geocodierung mit R am Beispiel Google Maps API

Geographisches Institut / Abteilung Geomatik

Optional: Höhenangaben

• SRTM-Daten für die Höhe bei Bedarf vorher ergänzen

• Raster-Package hält geographische Daten vor:

srtm=getData('alt',country="DEU")

• Spalte für Höhe anbinden:

liste=cbind(liste,ele=extract(srtm,liste[(spalten+1):(spalten+2)],method="bilinear"))

Page 10: GISDday 2014 Geocodierung mit R am Beispiel Google Maps API

Geographisches Institut / Abteilung Geomatik

Punkte als Shape speichern

• Spatial Dataframe zur Kontrolle plotten:

plot(shapefile)

• Und schließlich abspeichern:

writeOGR(shapefile, dsn = '.', layer ='adressen', driver = 'ESRI Shapefile')

• Fertig!

Page 11: GISDday 2014 Geocodierung mit R am Beispiel Google Maps API

Geographisches Institut / Abteilung Geomatik

Selbst ausprobieren

• Download R (z.B. für Windows):

http://cran.rstudio.com/bin/windows/base/

• Download RStudio Desktop Open Source Edition:

http://www.rstudio.com/

• Software installieren, Libraries aus Packages holen

• Adressen in Textdatei vorbereiten

• Beispiel für erste eigene Schritte verwenden

• Am Ergebnis erfreuen und weitermachen!

Page 12: GISDday 2014 Geocodierung mit R am Beispiel Google Maps API

Geographisches Institut / Abteilung Geomatik

Viel Erfolg!

Noch Fragen?

#gdmoen