image image


Mapping mit Pythons Schildkröte

Manch einer von Euch stellt sich sicher (und zu Recht!) die Frage, warum man zur Programmierung geospatialer Anwendungen ausgerechnet auf Pythons Turtlemodul zurückgreifen sollte. Die Antwort ist klassisch: Weil es geht! Und weil es schon jemand gemacht hat. Ich hatte mir nämlich gestern das kostenlose Ebook »Python – The Bible« von Maurice J. Thompson heruntergeladen und dort gab es ein Beipielprogramm, in dem der Autor mit Hilfe der Schildkrötengraphik den Lauf der ISS um die Erde verfolgte. Kaum gelesen, juckte es mich in den Fingern, so etwas Ähnliches ebenfalls zu programmieren.

image

Ich habe dafür als erstes in Googles Tabellenkalulation (jede andere hätte es auch getan, aber darauf kann ich so schön verlinken) ein Tabelle mit den Geokoordinaten einiger Städte erstellt. Die Auswahl ist rein zufällig und nur davon beeinflußt, daß ich wenigstens eine leise Ahnung habe, wo diese Städte auf dem Globus liegen müßten. Die Koordinaten habe ich mir dann schlicht ergoogelt.

Diese habe ich dann als CSV-Datei heruntergeladen und, um mir die Programmierung zu vereinfachen, die erste Zeile mit den Überschriften gelöscht. Dann habe ich folgendes kleine Progrämmchen geschrieben:

import turtle as t
import math
import os
import csv

file_path = os.path.dirname(os.path.abspath(__file__))
os.chdir(file_path)

wn = t.Screen()
wn.setup(width = 1000, height = 500)
wn.colormode(255)
wn.bgpic("images/earthmap.png")
wn.setworldcoordinates(-180, -90, 180, 90)
wn.title("Blue Marble")

city = t.Turtle()
city.penup()
city.color("red")
city.shape("circle")
city.shapesize(0.4)
wn.tracer(0)

file = open("cities.csv", "r")
cities = csv.reader(file, delimiter = ",")
for c in cities:
    lat = float(c[1])
    lon = float(c[2])
    city.goto(lon, lat)
    city.stamp()
    
file.close()
wn.update()

wn.mainloop()

Die verwendete Karte ist eine quadratische Plattkarte – ähnlich wie das berühmte »Blue Marble«-Set der NASA – und ich habe sie der Wikipedia entnommen.

Das Programm macht nicht viel. Es liest nur die Koordinaten aus der CSV-Datei aus und schickt dann die Schildkröte zu den jeweiligen Koordinaten um dort einen Stempel in Form eines kleinen, roten Kreises zu hinterlassen. Wenn Ihr das Befehlspaar wn.tracer(0) und wn.update() auskommentiert, könnt Ihr nachverfolgen, wie die Turtle über den Globus huscht.

Da ich mit

wn.setworldcoordinates(-180, -90, 180, 90)

die Koordinaten des Schildkrötenfensters auf die Weltkoordinaten gesetzt habe, war – im Prinzip – keine weitere Umrechnung notwendig.

Natürlich nur »im Prinzip. Denn die Projektion einer quadratsische Plattkarte ist zwar längentreu, aber die Verzerrung der Breitengrade nimmt zu den Polen hin zu, laut dem oben verlinkten Wikipedia-Artikel um den Faktor 1/cos(Breite). Doch bei Karten mit solch einem kleinen Maßstab und im Vergleich dazu solch großen Kreisen hielt ich diese Verzerrungen für vernachlässigbar. Das sieht auch die Wikipedia so, die bei ihrer Weltkarte der Wikipedianer die Verzerrung bei der Umrechnung ebenfalls ignoriert hat.

Aber es hat mich dazu gebracht, darüber nachzudenken, wie man diese Verzerrungen berücksichtigt und ich werde die nächste Zeit hin und wieder in meinen GIS-Büchern nachlesen, wie man die Koordinaten »korrekt« berechnet. Das ist nämlich der zweite Aspekt von »weil es geht«-Programmen. Man lernt hin und wieder tatsächlich noch etwas dazu.

Wer jetzt Blut geleckt hat, dem sei noch Daniel Shiffmans Video »Mapping Earthquake Data« empfohlen, in dem er Erdbebedaten auf einer Weltkarte mit Hilfe von P5.js, dem JavaScript-Mode von Processing, empfohlen. Da er auf eine zoombare Weltkarte zurückgreift, mußte er die Verzerrungen natürlich berücksichtigen. Da seine Karte ein Web-Mercator-Projektion besitzt, konnte er die Formeln aus diesem Wikipedia-Artikel verwenden.

So, und wenn mir jetzt jemand eine ähnliche Umrechnungsformel für die Plattkarte in meinen Email-Kommentaren schickt, dann setze ich mich noch einmal dran. Ansonsten werde ich weitere geospatiale Experimente in Python mit etwas ausgefuchsteren Werkzeugen – wie zum Beispiel P5 (Python) oder Processing.py – durchführen.


(Kommentieren) 

image image



Über …

Der Schockwellenreiter ist seit dem 24. April 2000 das Weblog digitale Kritzelheft von Jörg Kantel (Neuköllner, EDV-Leiter, Autor, Netzaktivist und Hundesportler — Reihenfolge rein zufällig). Hier steht, was mir gefällt. Wem es nicht gefällt, der braucht ja nicht mitzulesen. Wer aber mitliest, ist herzlich willkommen und eingeladen, mitzudiskutieren!

Alle eigenen Inhalte des Schockwellenreiters stehen unter einer Creative-Commons-Lizenz, jedoch können fremde Inhalte (speziell Videos, Photos und sonstige Bilder) unter einer anderen Lizenz stehen.

Der Besuch dieser Webseite wird aktuell von der Piwik Webanalyse erfaßt. Hier können Sie der Erfassung widersprechen.

Diese Seite verwendet keine Cookies. Warum auch? Was allerdings die iframes von Amazon, YouTube und Co. machen, entzieht sich meiner Kenntnis.


Werbung


Werbung


image  image  image
image  image  image


image