Skip to Tutorial Content

Einführung

Sie benötigen eine gültige Kreditkarte, um sich bei Google Cloud zu registrieren.
Kosten für dieses Tutorial: ~ 1.00 CHF

Stellen Sie sich vor, Sie sollen folgende Daten zu Mietwohnungen analysieren.

Wir schauen in die Daten:

Die Daten wurden im Juni 2023 von Homegate gescrapped und zeigen alle Mietwohnungen im Kanton Solothurn, für welche die Variablen Miete in CHF pro Monat, Anzahl Zimmer und die Fläche in \(m^2\) vorhanden sind.

Interessant wäre, da wir schon in der Lage sind, die Daten von Mietwohnungen zu beziehen, diese auf einer Karte grafisch darzustellen. Insbesondere interessant ist daher, dass wir die Adresse haben:

Solothurnerstrasse 310, 4600 Olten
Dorfstrasse 16, 4612 Wangen b. Olten
Oberdorf 8, 4108 Witterswil
Metzerlenstrasse 1b, 4115 Mariastein
Alpenstrasse 32, 2540 Grenchen

Mit Geocoding können wir nun bei Google für unsere Adressen die Koordinaten abfragen.

Der Rest dieses Tutorials gliedert sich nun wie folgt.

  1. Koordinaten-Abfrage mit dem API-Service von api3.geo.admin.ch
  2. Koordinaten-Abfrage mit Google
  3. Darstellen der Koordinaten auf einer Karte

Koordinaten-Abfrage mit dem admin.ch-API

Bevor man Cloud-Services benutzt, sollte man prüfen, ob die Services auch aus anderen Quellen beziehbar sind. Die Dokumentation des API-Service von admin.ch finden Sie hier. Der Vorteil von diesem Service ist, dass er gratis ist, allerdings funktioniert er nur für Adressdaten aus der Schweiz, während der Service von Google für weltweite Adressen funktioniert.

Speichern Sie nun obenstehenden Code in den gleichen Ordner, wo Sie die Daten dfSO_072023.RData gespeichert haben. Öffnen Sie den Code und wählen Sie dann Session \(\rightarrow\) Set Working Directory \(\rightarrow\) To Source File Location, damit das Arbeitsverzeichnis korrekt gesetzt wird.

Dann führen Sie die Zeilen 1-6 aus und prüfen, ob der Datensatz geladen wird.

Wir probieren nun den Service in einer eigenen kleinen App zuerst aus, bevor wir versuchen, den obenstehenden Code zu verstehen.

Untenstehend können Sie bitte eine Schweizer Adresse eingeben, zum Beispiel Ihren Wohnort, oder den Ort Ihres Ferienhauses oder Arbeitsort…


Zur Funktionsweise des obenstehenden Code:

Wir schreiben eine Funktion, get.coordinates(), welche als Argument eine Adresse address übernimmt.

Danach kommt schon der eigentliche API-Aufruf. Dazu wird ein Objekt body vom Datentyp list gebildet.
body<-list(searchText=address,origins='address',type='locations')

Der body enthält demnach die Adresse, für welcher die Koordinaten verlangt sind, spezifiert zudem den Anfrage-origin vom Typ 'address' und der type 'locations'. Der Beschrieb des API-Service findet sich hier: hier.

Danach findet die eigentliche Abfrage statt (GET Funktion aus dem Package httr:
r <- GET("https://api3.geo.admin.ch/rest/services/api/SearchServer",query = body))

Danach wird überprüft, ob der Inhalt von r eine Länge grösser 0 hat, also ob die Anfrage erfolgreich war. FAlls ja, so gibt die Funktion die geografische Länge und Breite lon und lat in Grad zurück und die Schweizer-Geo-Koordinaten xx und yy und bindet die in einen data.frame(). Falls die Anfrage nicht erfolgreich ist, so gibt die Funktion ebenfalls einen data.frame mit fehlenden Werten NA zurück.

Die Funktion ist auch hier im Tutorial gespeichert. Fragen Sie mit der Funktion die Koordinaten der Adresse
Von Roll-Strasse 10, 4600 Olten
ab.

get.coordinates("Von Roll-Strasse 10, 4600 Olten")

Das ist schon sehr interessant, nun würden wir noch gerne die Koordinaten für alle Adressen im data.frame dfSO finden.

Dazu ergänzen wir den Code wie folgt: mycoors <- lapply(dfSO$adr,get.coordinates) %>% bind_rows()

Um zu verstehen, was die Funktion macht, schreiben wir den Code für die ersten 10 Adressen hier als Übung.

lapply(dfSO$adr[1:10],get.coordinates) %>% bind_rows()

Zum Schluss wollen wir die Datenpunkte noch auf einer Grafik darstellen. Es gibt eine Vielzahl von unterschiedlichen Packages, die dies können. Das hier vorgestellte ist das package leaflet, welches Sie bei sich allenfalls noch lokal installieren müssen.

Den Code hierfür bekommen Sie untenstehend:

Sie können auch entsprechend im Code den filter() anpassen, so dass Sie z.B. nur 3.5-Zimmerwohnungen sehen oder ähnlich.

Das Resultat sieht dann so aus:

Filter setzen

Zum Erneuern der Karte ab- und wieder anwählen!

Koordinaten-Abfrage mit Google Cloud

Wie erwähnt benötigen Sie für diesen Teil eine Kreditkarte, die Kosten werden aber sehr tief sein (für dieses Tutorial maximal 1 CHF).

Schritte:

  1. Wir erstellen ein Konto bei Google Cloud: https://cloud.google.com/
  2. Anschliessend eröffnen Sie ein neues Projekt - wir nennen unseres hier “daws” (wie der Name dieses Lehrfonds-Projektes, sie können es aber auch anders nennen):

Wählen Sie abschliessend Projekt erstellen - das kann eine Minute dauern, und danach noch Projekt auswählen (oben rechts). Dann erscheint ein Bildschirm, welcher das Projekt anzeigt.

Hinweis: Es kann sein, dass Sie beim ersten Mal noch kein Rechnungskonto angeben konnten. Falls dem so ist, müssen Sie zuerst eines erstellen. Das können Sie ganz oben links unter dem Symbol mit den drei Strichen neben dem Symbol von Google Cloud. Denken Sie daran, dass Sie anschliessend zum Projekt daws zurückkehren (oder je nachdem wie Sie das Projekt genannt haben) und das Rechnungskonto angeben.

  1. Wir weisen dem Projekt daws (Sie dem Ihrigen Projekt) eine API zu. Gehen Sie nun im Dashboard zur Cloudübersicht (wiederum die drei Striche oben links und gehen Sie dann zu APIs und Dienste und dann in die API-Bibliothek).

Unter der Kategorie Maps wählen wir das Geocoding API und klicken anschliessend auf Aktivieren.

Kopieren Sie anschliessend den API-Schlüssel und bewahren Sie diesen auf. Mein Schlüssel beginnt mit AIzaSyCrV-…, diesen dürfen Sie aber nicht mit Dritten teilen!

Bereit? Wir wollen nun den API-Service nutzen und dem Service von geo.admin.ch gegenüberstellen. Wir schreiben daher folgenden R-Code.

** Hier noch ein Tutorial einbauen, wie die DAten mit PUT zu ziehen sind…**

Anschaulich führen wir das an folgender APP aus:


Zum Erneuern der Karte erneut klicken!

Weiteres…

Auf der Developper-Seite bei Google-Cloud finden Sie alleine zu den Maps-Anwendungen ca. 30 APIs. Eine für uns naheliegende weitere Anwendung ist die

Umgekehrte Geocodierung

Umgekehrte Geocodierung meint, dass für eine Eingabe für latitude und longitude die passendste Adresse genannt wird.

Die Beschreibung des API finden Sie hier:

https://developers.google.com/maps/documentation/geocoding/requests-reverse-geocoding?hl=de#reverse-response

Die Anfrage hierfür muss anscheinend im Format wie folgt erfolgen:

https://maps.googleapis.com/maps/api/geocode/json?latlng=47.42195,7.597366&location_type=ROOFTOP&result_type=street_address&key=YOUR_API_KEY

Wobei wir natürlich den YOUR_API_KEY noch mit AIzaSyCrV... ersetzen müssen.

In folgender einfacher APP können wir dies ausprobieren:


Untenstehend ein Beispiel, wie Sie den Code implementieren können:

Geocoding mit Google Cloud