i

Erweiterung als Spiel

Die Anwendung, Stadt-Koordinaten aus einer Datenbank zu laden und auf einer Karte anzuzeigen, könnte man auch zu einem einfachen Spiel erweitern:

Der Spieler bekommt einen Stadtnamen vorgegeben und soll diese auf der Karte lokalisieren. Das Programm zeigt dann die tatsächliche Position an und berechnet, um welche Entfernung der Spieler sich verschätzt hat.

Spielbeispiel mit der Lokalisierung von Kiel

Im Beispiel oben hat der Spieler bei Kiel wohl die falsche Ostsee-Bucht gewählt und sich damit um gut 25 km verschätzt.

Als Hilfe benötigst du Funktionen, mit denen man Geokoordinaten auf die Position auf einer Karte umrechnen kann; diese kennst du aus dem letzten Kapitel schon. Jetzt muss das aber auch umgekehrt geschehen, so dass man aus der Klickposition des Spielers wieder Geokoordinaten ermitteln kann:

# Konstanten: Grenzen der Karte in Grad
cNord = 55.1
cSued = 47.2
cWest = 5.5
cOst  = 15.5

def InPixelWO(bgBild, grad):
  """ Umrechnung Geokoordinate in Bildkoordinate. Übergabe: Bild (für dessen Breite) und Längengrad """
  x = round((grad-cWest)* bgBild.width()/(cOst-cWest))
  return x

def InPixelNS(bgBild, grad):
  """ Umrechnung Geokoordinate in Bildkoordinate. Übergabe: Bild (für dessen Höhe) und Breitengrad """
  y = bgBild.height()-round((grad-cSued)*bgBild.height()/(cNord-cSued))
  return y


def InGeoX(bgBild,x):
	""" Umrechnung Bildkoordinate X in Geokoordinate Laenge """
	laenge = (x/bgBild.width()) * (cOst - cWest) + cWest
	return laenge

def InGeoY(bgBild,y):
	""" Umrechnung Bildkoordinate Y in Geokoordinate Breite """
	breite = cNord - (y/bgBild.height()) * (cNord - cSued)
	return breite

Aufgabe 1

Erweitere das Projekt zur Kartendarstellung, so dass im ersten Schritt der Benutzer eine Position im Bild anklickt und ihm die Position als Geokoordinaten angezeigt wird.

Als Hilfe kannst du hier eine Datei (Aufgabe1Vorgabe.zip) herunterladen, die die Karte und eine Ausgangsbasis für die Oberfläche beinhaltet.

Aufgabe 2

Vervollständige nun das Spiel. Dafür musst du noch mindestens folgende Schritte erledigen:

  • Beim Start das Einlesen einer Liste von Orten aus der Datenbank (z.B. die Städte über 200.000 Einwohner in Deutschland).
  • Durch einen Button wird eine zufällige Stadt aus der Liste abgefragt.
  • Nach einem Klick auf die Karte wird die gesuchte Stadt auf der Karte angezeigt und die Entfernung zur Klickposition berechnet (vielleicht sogar durch eine Linie gekennzeichnet).

Für den letzten Punkt benötigst du sicher noch etwas Hilfe, nämlich für die Berechnung der Entfernung. Folgende Funktion kann die Entfernung zwischen zwei Geokoordinaten einigermaßen genau berechnen:

def EntfernungOrte(self, laenge1, breite1, laenge2, breite2):
	radL1 = laenge1*pi / 180
	radL2 = laenge2*pi / 180
	radB1 = breite1*pi / 180
	radB2 = breite2*pi / 180
	km = acos( sin(radB1)*sin(radB2) + cos(radB1)*cos(radB2)*cos(radL2-radL1))
	km = km * 6378.137
	return km

Erweiterungen

Natürlich kannst du das Spiel beliebig erweitern, Ideen dazu:

  • Aufsummieren der Entfernungen über mehrere Runden.
  • Modus für zwei Spieler (abwechselnd) und für eine feste Rundenzahl.
  • Speichern der Ergebnisse in einer Datenbank. Wie das grundsätzlich geht, findest du in den nächsten Kapiteln.

Suche

v
3.4.3.7
inf-schule.de/datenbanksysteme/zugriff/pythonzugriff/projekt_kartenraten
inf-schule.de/3.4.3.7
inf-schule.de/@/page/2YrvbOn1pwNHKR4K

Rückmeldung geben