**Dies ist eine alte Version des Dokuments!**
Kartendaten mit Python
Theorie
In Google Maps kann man Dateien einlesen, in denen Orte oder Flächen markiert werden und kann diese verschicken. Dies kann eine Vielzahl an nützlichen Anwendungen haben:
- Ferienziele: Mache für dich und deine Freunde eine Weltkarte, auf der deine wichtigsten Ferienziele markiert sind.
- Reise-Route: Plane deine nächste Reise
- Weltherrschaft: Du willst dein eigenes Land haben? Stecke die Grenzen auf Google Maps ab und teile es mit deinen Freunden.
Google Maps Karte
Typisches Vorgehen:
- Gehe auf Google My Maps …
- … und logge dich ein.
- Klicke auf „Neue Karte erstellen“ und „Importieren“ …
- … und ziehe dort ein passendes CSV-File hinein.
- Dann muss man die „Spalten zur Positionierung …“ auswählen: typischerweise „WKT“ …
- … und dann die „Spalte zur Benennung …“: typischerweise „Name“
Punkte, Linien und co. in WKT
WKT steht für Well-Known Text und ist ein Textformat für räumliche Datenmodelle. Es ermöglicht die Beschreibung geometrischer Objekte wie Punkte, Linien, Polygone und mehr in einem Format, welches sowohl für Menschen wie auch für Computer gut lesbar sind.
Einen Punkt mit Koordinaten $(x,y)$ notiert man darin wie folgt:
"POINT (x y)"
Eine Linie, die von $(x1,y1)$ zu $(x2,y2)$ und von da zu $(x3,y3)$ geht, notiert man so:
"LINESTRING (x1 y1, x2 y2, x3 y3)"
Ein geschlossenes Polygon (Vieleckt) notiert man so:
"POLYGON ((x1 y1, x2 y2, x3 y3))"
In diesem Falle erhält man natürlich ein Dreieck. Beachte hier die Verwendung von doppelten Klammern.
Man kann auch gleichzeitig mehrere Punkte, Linien und Polygone festlegen:
"MULTIPOINT ((x1 y1, x2 y2, x3 y3))" "MULTILINESTRING ((x1 y1, x2 y2), (x3 y3, x4 y4))"" "MULTIPOLYGON (((x1 y1, x2 y2, x3 y3)),((x4 y4, x5 y5, x6 y6)))"
WKR in Google Maps
Um Punkte, Linien und Polygone in Google Maps einzuzeichnen, kann man diese Formen in einem CSV-File festlegen. Dazu benötigt man die entsprechenden Koordinaten ($x:$ longitude/Längengrad, $y:$ latitude/Breitengrad).
Wir betrachten die folgenden vier Ortschaften mit zugehörigen Längen- und Breitengrad:
- Frauenfeld (8.89656423219735, 47.558162001326)
- Weinfelden (9.10636576683266, 47.5662241119746)
- Romanshorn (9.37937276486743, 47.5655209998311)
- Kreuzlingen (9.16907715682578, 47.6525502207935)
- tg.csv
Name,WKT Weinfelden,"POINT (9.10636576683266 47.5662241119746)" Line FF to WF,"LINESTRING (8.89656423219735 47.558162001326, 9.10636576683266 47.5662241119746)"
Wann und wo benötigt man Anführungs- und Schlusszeichen?
- Für die WKT-Befehle werden diese benötigt. Der Grund ist, dass diese Befehle Kommas beinhalten, welche auch als Trennzeichen (Delimiter) des CSV agieren.
- Für die Namen hingegen sind sie optional, ausser die Namen beinhalten Kommas, dann braucht man auch hier Anführungs- und Schlusszeichen.
Beachte, dass das CSV einen passenden Header benötigt: „Name,WKT“. Dank diesem weiss Google Maps, welche Bedeutung die Werte im CSV haben.
Dieses CSV-File kann man herunterladen, in Google Maps importieren und dann sieht man den Punkt und die Linie am richtigen Ort mit der angegebenen Beschriftung.
Aufgaben
Aufgabe 1: Big 4 im TG
Erstelle ein leeres CSV-File mit Header „Name,WKT“ und füge folgende Elemente hinzu. Verwende die Koordinaten aus der Theorie oben:
- Vier Punkte für die Gemeinden Frauenfeld, Weinfelden, Romanshorn, Kreuzlingen
- Linie von Weinfelden nach Kreuzlingen
- Viereck, welches die vier Gemeinden verbindet
Importiere das File dann in Google Maps und stelle sicher, dass alles stimmt.
Aufgabe 2: Top 3 Ferienziele
Welches sind deine Top 3 Orte, die du noch besuchen möchtest?
- Finde deren Koordinaten …
- … erstelle ein entsprechendes CSV-File …
- … und importiere sie auf Google Maps.
Spielregel: Es müssen mind. zwei unterschiedliche Kontinenten vorkommen.
Aufgabe 3
Von nun arbeiten wir wieder mit Python und dem folgenden Datensatz, der die Koordinaten aller Bahnhöfe in der Schweiz beinhaltet: sbb_csv_json.zip.
Auftrag:
- Generiere mithilfe von Python ein CSV-File für Google Maps, welches die Koordinaten einiger Ortschaften St. Gallen, Bern und Schaffhausen beinhaltet.
- Verwende den SBB-Datensatz, um die Koordinaten zu ermitteln.
- Schreibe Code so, dass er auch noch funktioniert, wenn man z.B. St. Gallen durch Winterthur ersetzt.