Jakob Richter

Geokoordinaten mit R und Google finden (einfach, ohne API)

Dies ist eine verblüffend leichte Übung, da Google einem direkt ein csv-File (Beispiel) ausspuckt, welches natürlich sehr einfach zu lesen ist. Weil es so einfach ist hier nur wenig Text und der Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
reisetrip < - c("Berlin","Potsdam","Magdeburg","Hannover","Minden","Bielefeld","Dortmund")
breiten <- NULL
langen <- NULL
for(i in seq_along(reisetrip)){
  query <- paste(strsplit(reisetrip[i]," ")[[1]], collapse="%20") #Leerzeichen mit %20 codieren
  query <- paste("http://maps.google.com/maps/geo?q=",query,"&output=csv&num=1",sep="")
  res <- read.table(query,sep=",")
  cat("Ort #",i,"von",length(reisetrip),";",reisetrip[i],"\n")
  Sys.sleep(runif(1,0.1,2.5)) #Wir warten ein wenig, damit Google nicht sauer wird.
  langen[i] <- res[,4] #longitude
  breiten[i] <- res[,3] #latitude
}
plot(langen,breiten,type="l", ylim=range(breiten)+c(-0.1,+0.1), xlim=range(langen)+c(-2,+0.5))
points(langen,breiten,pch=19)
text(langen,breiten,reisetrip,pos=2)

Warnungen bezüglich unvollständiger letzter Zeilen können getrost vernachlässigt werden

plot()

Zu den Suchparametern

findet man hier eine sehr gute Übersicht. Viele sind natürlich nicht für output=csv von Bedeutung. Der im Quelltext stehende Parameter num=1 zeigt, dass wir nur das erste Ergebnis haben wollen. Habe aber auch noch nicht die Beobachtung machen können, dass Google bei CSV mehr als ein Ergebnis ausgibt. Das Aneinanderreihen von Suchparametern erfolgt immer nach dem Schema: http://URL?query1=par1&query2=par2&... Also als erstes ein Fragezeichen und dann alle mit & verbinden.

Jetzt will man diese Punkte natürlich am liebsten auf einer Karte sehen. Dazu komme ich später mal.

Leave a Reply