Wetterdaten


Für die Darstellung der aktuellen Wetterlage in einem Turtle-Fenster kann man Wetter-Sprites verwenden. Das aktuelle Wetter kann im Internet abgefragt werden. Das Modul weather stellt Befehle zur Verfügung, mit welchen Browserabfragen von Wetterdaten auf dem Wetterdatenserver https://openweathermap.com durchgeführt werden können. Der Wetterdatenserver sammelt die Wetterdaten in über 200 000 Städten der ganzen Welt und aktualisiert sie jede Stunde.

 

Beispiel 1: Wetterkarte

In diesem Beispiel wird das Wetter in den Städten Genf, Lausanne, Bern Luzern, Basel, Zürich, Winterthur, Chur und Locarno mit Hilfe von Wetter-symbolen

sunny.png lightcloudy.png mostlycloudy.png cloudy.png rain.png strongrain.png snow.png

dargestellt. Die passenden Wetter-Sprites und eine einfache Schweizerkarte können Sie unter sprites.zip herunterladen. Packen Sie diese zip-Datei aus und speichern Sie den Ordner sprites im Unterverzeichnis /bin des Installationsverzeichnisses. Dann werden die Bilder automatisch in Ihre Programme eingefügt.

Falls Sie eine andere Landeskarte brauchen, speichern Sie diese in der Grösse von max. 800x600 Pixel im Untererzeichnis /bin/sprites des Installationsverzeichnisses.

# WeatherEx1.py

from gturtle import *

makeTurtle()
hideTurtle()
drawImage("sprites/ch.gif")
setPos(-365, -155)
drawImage("sprites/sunny.png")
setPos(-150, 40)
drawImage("sprites/changable.png")
setPos(125, -205)
drawImage("sprites/sunny.png")
setPos(40, 140)
drawImage("sprites/cloudy.png")
setPos(220, -10)
drawImage("sprites/rain.png")
setPos(20, 60)
drawImage("sprites/strongrain.png")
setPos(-110, 180)
drawImage("sprites/lightcloudy.png")
setPos(-250, -85)
drawImage("sprites/lightcloudy.png")
setPos(80, 170)
drawImage("sprites/strongrain.png")
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

 

Erklärungen zum Programmcode:

Die Schweizerkarte wird mit drawImage("sprites/ch.gif") in das Turtlefenster eingefügt, wobei die Datei ch.gif in der Sprites-Bibliothek enthalten ist. Falls Sie eine andere Landeskarten benötigen, speichern sie diese im png- oder gif-Formal im Unterverzeichnis /bin/sprites des Installationsverzeichnisses. Dann wird sie automatisch in Ihren Programm eingeführt.
setPos(-365, -155) setzt die Turtle an die gegebene Position im Turtlefenster, welches 800x600 Pixel gross ist- (0, 0) ist in der Mitte des Fensters.

 

Beispiel 2: Wetterdaten aus dem Internet

Das Modul weather stellt Befehle zur Verfügung, mit welchen Browserabfragen auf dem Wetterdatenserver https://openweathermap.com durchgeführt werden können. Der Wetterdatenserver sammelt die Wetterdaten in über 200 000 Städten der ganzen Welt und aktualisiert sie jede Stunde. Folgende Daten können abgefragt werden:

"temp"

Temperatur in °C

"pressure"

Luftdruck in hPa

"humidity"

Luftfeuchtigkeit in %

"temp_min"

Tagesminimum der Temperatur

"temp_max"

Tagesmaximum der Temperatur

"description"

Wetterlage in Worten

"sunrise"

Sonnenaufgang in Ortszeit

"sunset"

Sonnenuntergang in Ortszeit

"datetime"

Datum und Zeit des Ortes

In diesem Beispiel wird die aktuelle Temperatur, Luftfeuchtigkeit und Wetterlage in einigen Schweizer Städten abgefragt und im Ausgabefenster angezeigt. Dabei wird der defaultKey verwendet.

 

# WeatherEx2.py

from gturtle import *
import weather

def printWeather(city):
    info = weather.request(city)
    print(city,": temp =",info["temp"]," humidity =",info["humidity"],"% ",info["description"])
    
cities = ["Genf","Bern","Zuerich","Luzern","Basel","Winterthur","Lausanne","Lugano","Chur"]

for city in cities:
    printWeather(city)  
    delay(100) 
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

Erklärungen zum Programmcode:

import weather: Importiert das Modul weather
info = weather.request(city): Wetterabfrage mit dem Standardschlüssel liefert eine Liste mit den Werten temp, pressure, humidity usw.


Beispiel 3: Wetterkarte mit Daten aus dem Internet

In der Landeskarte werden die Wetter-Symbole mittels der aktuellen Daten, die bei jedem Programmstart automatisch vom Wetterserver abgefragt werden, angezeigt. Um den Programmcode zu strukturieren, verwendet man die Funktionen printWeather(city), drawWeather(city) und pos(city), die man für jede Stadt der Liste cities aufrufen kann.

# WeatherEx3.py

from gturtle import *
import weather

cities = ["Genf","Bern","Zuerich","Luzern","Basel","Winterthur","Lausanne","Lugano","Chur"]

def printWeather(city):
    info = weather.request(city)
    print(city, ": temp =",info["temp"],", humidity =",info["humidity"],"%, ",info["description"])

def drawWeather(city):
    info = weather.request(city)    
    if info["description"] == "clear sky":
        drawImage("sprites/sunny.png")
    elif info["description"] in ["few clouds", "scattered clouds"]:
        drawImage("sprites/lightcloudy.png") 
    elif info["description"] in ["broken clouds"]:
        drawImage("sprites/mostlycloudy.png")    
    elif info["description"] in ["overcast clouds", "fog"]:
        drawImage("sprites/cloudy.png") 
    elif info["description"] in ["rain", "light rain", "moderate rain"]:
        drawImage("sprites/rain.png") 
    elif info["description"] in ["heavy intensity shower rain"]:
        drawImage("sprites/strongrain.png")    
    elif info["description"] in ["snow"]:
        drawImage("sprites/snow.png")                    

def pos(city):
    if city == "Genf":
        setPos(-365, -155)
    elif city == "Lausanne":
        setPos(-250, -85)
    elif city == "Bern":
        setPos(-150, 40)
    elif city == "Luzern":
        setPos(20, 60)    
    elif city == "Basel":
        setPos(-110, 180) 
    elif city == "Zuerich":
        setPos(40, 140)     
    elif city == "Winterthur":
        setPos(80, 170) 
    elif city == "Chur":
        setPos(220, -10)
    elif city == "Lugano":
        setPos(125, -205)                             
            
makeTurtle()
hideTurtle()
drawImage("sprites/ch.gif")
for city in cities:
    printWeather(city)       
    pos(city)
    drawWeather(city)
    delay(100)
    
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

Erklärungen zum Programmcode:

def drawWeather(city) bestimmt aufgrund des Ergebnisses info["description"] welches Wetterbild angezeigt wird
def pos(city) jeder Stadt der Liste cities werden die Koordinaten im Turtlefenster zugeordnet

 


Aufgaben: Serie 20

1)
 

Erweitere das Beispiel 1 mit weiteren Städten. Die Koordinaten kannst du durch "probieren" bestimmen. Dabei kannst du das unten stehende Programm verwenden. Bei jedem Mausklick in der Schweizerkarte werden die Koordinaten im Ausgabefenster angezeigt.

from gturtle import *                      

def onMousePressed(x, y):
   print(x, y)
   setPos(x, y)
   dot(20)                      

makeTurtle(mousePressed = onMousePressed)
hideTurtle()
drawImage("sprites/ch.gif")

2)
 

Suche im Internet eine einfache Europa-Karte und speichere diese ca. in der Grösse 800x600 Pixel auf deinem Computer im Unterverzeichnis /bin/sprites des Installationsverzeichnisses. Erstelle eine Wetterkarte für einige europäische Städte.