Entwickler-Ecke

Open Source Projekte - Wetterdaten abfragen


Mathematiker - Fr 09.08.13 10:57
Titel: Wetterdaten abfragen
Hallo,
nachdem ich mit tatkräftiger Hilfe von user profile iconMartok, user profile iconNersgatt und user profile iconGerd Kayser unter http://www.entwickler-ecke.de/topic_Temperaturumrechnung_111877.html die Temperaturabfrage bei http://openweathermap.org hinbekommen habe, muss ich natürlich sofort ein neues Projekt beginnen.
Das ist der Vorteil, wenn man aus Spaß Programmieren kann und niemand einen unter Termindruck setzt, oder so ...

wetter

Das Programm fragt für einen der 3500 Orte in der Listbox jeweils die Wetterdaten ab und zeigt die Temperatur, Luftfeuchtigkeit, Luftdruck, Wind und Wolken an. Auf Wunsch erfolgt auch eine 14tägige Vorhersage.
Da ich die Suche über die geografischen Koordinaten laufen lasse, gibt's fast immer Werte. Natürlich kann man auch eigene Koordinaten eintragen.

Dass dieses kleine Programm dem einen oder anderen nur ein müdes Lächeln abringt, ist mir klar. Ich bin aber sehr zufrieden. Ich hätte nie gedacht, dass für mich so etwas möglich ist.
Übrigens: Übertreibt es bitte nicht beim Testen. Openweather gestattet nur 1000 kostenlose Anfragen je Stunde, also langsam klicken. :D
So, jetzt gehe ich mal auf Suche nach anderen Internetseiten, die irgendwelche Daten oder Funktionen kostenlos anbieten (z.B. formelmäßiges Integrieren einer Funktion).

Beste Grüße
Mathematiker

Rev 1: Windstärke statt Windgeschwindigkeit, kleine Fehler beseitigt.
Rev 2: mit Umschaltmöglichkeit auf Fahrenheit, gefühlter Temperatur und Druckmöglichkeit.
Rev 3: auf Wunsch von user profile iconHorst_H mit 14-Tage-Vorschau inkl. kubische Splines.
Rev 4: zusätzlich mit Luftdruckkurve.
Rev 5: in der 14 Tage Vorschau wird der Temperaturbereich angezeigt.
Rev 6: mit Einzelkurven für die Temperaturen morgens, mittags, abends und nachts.
Rev 7: auf poscreencenter geändert, außerdem sind die Orte als komprimierte Ressource enthalten.
Rev 8/9: Fahrenheitanzeige korrigiert, und zusätzlich (wichtig!) Anzeige der übermittelnden Wetterstation
Rev 10: alle Orte überprüft und UTF8-Problem vorerst geklärt.
Rev 11: Druckerauswahl hinzugefügt.
Rev 12: jetzt auch mit Weltkarte.
Rev 13: die Weltkarte kann gezoomt und verschoben werden.
Rev 14: Fehler beim Zoomen entfernt, Formular aufgeräumt, d.h. jetzt mit Menu, Kopiermöglichkeit für die Darstellung, Problem bei Übermittlung von 13 Tagen bei 14-Tage-Vorschau beseitigt.

Weltwetter

Rev 15: zusätzlich gibt es noch die Möglichkeit das Weltwetter anzuzeigen. Auf der Weltkarte wird für 40 ausgewählte Orte das aktuelle Wetter gezeigt.
Rev 16: Fehler in der Ortsliste beseitigt, zusätzlich wahlweise mit Niederschlagskurve in der 14Tage-Vorschau.
Rev 17: mit Sonnenaufgang und -untergang. 4 Links zu den ZDF-Wetterkarten.
Rev 18: Sonnenaufgang und -untergang in MEZ bzw. MESZ.
Rev 19: mit der Möglichkeit über einen Proxy-Server die Verbindung aufzubauen.
Rev 20: Proxy-Server wird automatisch erkannt.
Rev 21: geladene Daten werden gepeichert und frühestens nach 10 Minuten aktualisiert. Zoom auch bei der Weltwetterkarte möglich.
Rev 22: ein paar Fehler entfernt.
Rev 23: Openweathermap-Übermittlungsprobleme abgefangen.
Rev 24: weitere Probleme, bei unvollständigen Daten, korrigiert.
Rev 25: übermittelte Temperaturen in Kelvin werden korrekt ausgewertet.


Gerd Kayser - Fr 09.08.13 11:11

Du hast den Niederschlag vergessen. Bei "<precipitation mode="no"/>" regnet es nicht.
"<precipitation unit="3h" value="13" mode="rain"/>" bedeutet 13 mm Niederschlag in 3 Stunden.

Edit: Die 13 kann auch 1,3 mm bedeuten. Aber das muss ich hier noch untersuchen.


Nersgatt - Fr 09.08.13 11:17

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
So, jetzt gehe ich mal auf Suche nach anderen Internetseiten, die irgendwelche Daten oder Funktionen kostenlos anbieten (z.B. formelmäßiges Integrieren einer Funktion).

Herzlichen Glückwunsch, Du hast grade Deinen erste REST-Client gebastelt. :D (vielleicht ohne es wissen?).

Schau mal bei Marco Cantu. REST ist eins seiner Hobbys, er hat ein paar Beispielanwendungen gemacht: http://ajax.marcocantu.com/delphirest/default.htm und http://ajax.marcocantu.com/delphirest/page2.htm
Da kannst Du Dir vielleicht Ideen klauen.


Mathematiker - Fr 09.08.13 11:26

Hallo,
user profile iconNersgatt hat folgendes geschrieben Zum zitierten Posting springen:
Herzlichen Glückwunsch, Du hast grade Deinen erste REST-Client gebastelt. :D (vielleicht ohne es wissen?).

Danke und Du hast recht. Ich weiß gar nicht, was das ist.
user profile iconNersgatt hat folgendes geschrieben Zum zitierten Posting springen:
Schau mal bei Marco Cantu. REST ist eins seiner Hobbys, er hat ein paar Beispielanwendungen gemacht: http://ajax.marcocantu.com/delphirest/default.htm und http://ajax.marcocantu.com/delphirest/page2.htm

Danke. Werde ich sofort mir ansehen.

user profile iconGerd Kayser hat folgendes geschrieben Zum zitierten Posting springen:
Du hast den Niederschlag vergessen.

Richtig. Werde ich überarbeiten.

Beste Grüße
Mathematiker


NeulingMitFragen() - Fr 09.08.13 13:24

Hallo,
läuft ganz gut! Jedoch wäre eine "Suche" für den namen ganz gut. Man kann zwar den Anfangsbuchstaben drücken und dann die folgenden Buchstaben um zu gewünschten Namen zu kommen, jedoch wäre eine Suche eleganter.


Gerd Kayser - Fr 09.08.13 14:27

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Werde ich überarbeiten.

Mir ist noch aufgefallen, dass die Windstärke nicht in km/h angegeben wird, sondern in m/s.


Mathematiker - Fr 09.08.13 15:14

Hallo,
user profile iconGerd Kayser hat folgendes geschrieben Zum zitierten Posting springen:
Mir ist noch aufgefallen, dass die Windstärke nicht in km/h angegeben wird, sondern in m/s.

Danke, habe ich in der Revision 1 geändert; außerdem die Art des Niederschlags ergänzt und ein paar Schönheitskorrekturen durchgeführt.

Beste Grüße
Mathematiker


Mathematiker - Fr 09.08.13 22:10

Hallo,
ich habe noch ein paar Änderungen in Revision 2 durchgeführt.
Zum einen läuft das Thermometer nun im realistischen Bereich von -40°C bis 60°C; 100°C Temperatur erreichen wir wohl auf der Erde nicht, trotz "Klimaerwärmung" :mrgreen: .

Außerdem wird der letzte gewählte Ort beim Schließen gespeichert und automatisch beim Neustart wieder ausgewählt.

Beste Grüße
Mathematiker


Delete - Fr 09.08.13 23:15

Ich habe auch was Schönes: Wetterkarten vom ZDF

Beispiele:
.
http://wwwdyn.zdf.de/ext/weather/wind-brd-1.jpg
http://wwwdyn.zdf.de/ext/weather/uv-brd-0.jpg
http://wwwdyn.zdf.de/ext/weather/temp-brd-0.jpg

Infos:

Example 1:

You want to display a wind image, which contains the image for today, today night or tomorrow.
http://wwwdyn.zdf.de/ext/weather/wind-brd-<x>.jpg.
(<x> is a number between 0 and 2 ; 0 is for today, 1 is for today night and 2 is for tomorrow)
Open the configuration and enter the string "http://wwwdyn.zdf.de/ext/weather/wind-brd-<randomnumber:0,2>.jpg" in your favoured weather image field and save it.
The next time you want to display this image, the expression <randomnumber:0,2> will be replaced in real-time with a valid random number between 0 and 2. The result is a http://wwwdyn.zdf.de/ext/weather/wind-brd-1.jpg.

Example 2:

You want to display a image, which contains the temperature, risk of forest fires or UV index randomly.
http://wwwdyn.zdf.de/ext/weather/temp-brd-0.jpg,
http://wwwdyn.zdf.de/ext/weather/forest-brd-0.jpg and
http://wwwdyn.zdf.de/ext/weather/uv-brd-0.jpg.
Open the configuration and enter the string
"http://wwwdyn.zdf.de/ext/weather/<randomword:temp,forest,uv>-brd-0.jpg" in your favoured weather image field and save it.
The next time you want to display this image, the expression <randomword:temp,forest,uv> will be replaced in real-time with a random word, the result is a URL like http://wwwdyn.zdf.de/ext/weather/uv-brd-0.jpg.

Example 3:

You want to display a image slideshow, which contains the rain radar for the last 6 hours.
"http://wwwdyn.zdf.de/ext/weather/rain-brd-0-<xx>.jpg". (<xx> is a number between 0 and 24 )
Open the configuration and enter the string "http://wwwdyn.zdf.de/ext/weather/rain-brd-0-<rangenumberlz:0,24 >.jpg" in your favoured weather image field and save it.
The next time you want to display this image, the expression <ranngenumberlz:0,24> enables the plugin to load images between "rain-brd-0-00.jpg" and "rain-brd-0-24.jpg", to build a slideshow and to display this.

Example 4:

You want to display a image slideshow, which contains the satellite in retrospect for Europe.
"http://wwwdyn.zdf.de/ext/weather/sat-euri-0-<x>.jpg". (<x> is a number between 0 and 48_)
Open the configuration and enter the string "http://wwwdyn.zdf.de/ext/weather/sat-euri-0-<rangenumber:0,48>.jpg" in your favoured weather image field and save it.
The next time you want to display this image, the expression <rangenumber:0,48 > enables the plugin to load images between "sat-euri-0-0.jpg" and "sat-euri-0-48.jpg", to build a slideshow and to display this.

The manual contains a list of all available placeholders, which can be interpreted by the plugin currently. Please be aware, 1) that the URL can contain more than one placeholder and 2) that all placeholder definitions are case sensitive. Additionally I must point out, that the image preview functionality inside the configuration dialog isn't supported yet.

At least, some hints: As many of yours assumed, the described slideshow method can costs many web traffic and CPU power. To decrease this, I suggest to use smaller number ranges and the use of related expert settings (see chapter 4.9), e.g. image resize percentage and image frame delay.
---------------------------------------
http://wwwdyn.zdf.de/ext/weather/sat-euri-0-1.jpg
http://wwwdyn.zdf.de/ext/weather/sat-euri-0-x.jpg.
---<x> is a number between 0 and 48
http://wwwdyn.zdf.de/ext/weather/wind-brd-1.jpg
http://www.worldweather.org/cloud/graphic/colorMap-cloud.png
http://wwwdyn.zdf.de/ext/weather/sat-euri-0-0.jpg
http://wwwdyn.zdf.de/ext/weather/sat-euri-0-1.jpg
http://wwwdyn.zdf.de/ext/weather/sat-brd-0.jpg
http://wwwdyn.zdf.de/ext/weather/temp-brd-0.jpg
http://wwwdyn.zdf.de/ext/weather/temp-brd-1.jpg
http://wwwdyn.zdf.de/ext/weather/temp-brd-2.jpg
http://wwwdyn.zdf.de/ext/weather/wind-brd-0.jpg
http://wwwdyn.zdf.de/ext/weather/wind-brd-1.jpg
http://wwwdyn.zdf.de/ext/weather/wind-brd-2.jpg
http://wwwdyn.zdf.de/ext/weather/uv-brd-0.jpg
http://wwwdyn.zdf.de/ext/weather/uv-brd-1.jpg
http://wwwdyn.zdf.de/ext/weather/uv-brd-2.jpg
http://wwwdyn.zdf.de/ext/weather/rain-brd-0.jpg
http://wwwdyn.zdf.de/ext/weather/rain-brd-0-24.jpg
http://wwwdyn.zdf.de/ext/weather/poll-brd-0.jpg
http://wwwdyn.zdf.de/ext/weather/ozone-brd-0.jpg
http://wwwdyn.zdf.de/ext/weather/preview-brd-0.jpg
http://www.astronomie.de/Images/Himmelaktuell/obssky1.gif


jasocul - Sa 10.08.13 11:50

user profile iconGerd Kayser hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Werde ich überarbeiten.

Mir ist noch aufgefallen, dass die Windstärke nicht in km/h angegeben wird, sondern in m/s.

Wenn ich mich richtig an mein Geographie-Studium erinnere, ist m/s die fachlich übliche Einheit. :wink: Für den Laien ist aber km/Std sicher leichter vorstellbar.

Bei deinen geographischen Angaben solltest du vielleicht noch etwas "sauberer" sein. Es ist nicht klar, ob du östlicher oder westlicher Länge meinst. Entsprechend südlicher/nördlicher Breite. Wer denken kann, dem ist das zwar klar, aber wenn ich ich schon pingelig bin, dann richtig. Wenn du dann noch die Werte in Grad, Minuten und Sekunden aufteilst, wäre das richtig schön.

Alles nur Kleinigkeiten und die spielen für die Wetter-Werte auch keine große Rolle, aber ich mag es halt, wenn alles zusammenpasst.

Ich verfolge fast alle deine Projekte. Du hast immer sehr interessante Dinge in Arbeit. Danke dafür. :beer:


Delete - Sa 10.08.13 12:30

Skala zu den Windgeschwindigkeiten:

http://www.snigelhus.de/assets/images/Beaufort-Skala.gif
.
http://de.wikipedia.org/wiki/Beaufortskala


Delete - Sa 10.08.13 12:41

user profile iconjasocul hat folgendes geschrieben Zum zitierten Posting springen:

Bei deinen geographischen Angaben solltest du vielleicht noch etwas "sauberer" sein. Es ist nicht klar, ob du östlicher oder westlicher Länge meinst. Entsprechend südlicher/nördlicher Breite. Wer denken kann, dem ist das zwar klar, aber wenn ich ich schon pingelig bin, dann richtig. Wenn du dann noch die Werte in Grad, Minuten und Sekunden aufteilst, wäre das richtig schön.


Das geht aus dem Vorzeichen hervor: Norden (N) und Osten (E) ist + (PLUS). PLUS wird aber üblicherweise weggelassen...
http://de.wikipedia.org/wiki/Geographische_L%C3%A4nge


jasocul - Sa 10.08.13 12:53

user profile iconhathor hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconjasocul hat folgendes geschrieben Zum zitierten Posting springen:

Bei deinen geographischen Angaben solltest du vielleicht noch etwas "sauberer" sein. Es ist nicht klar, ob du östlicher oder westlicher Länge meinst. Entsprechend südlicher/nördlicher Breite. Wer denken kann, dem ist das zwar klar, aber wenn ich ich schon pingelig bin, dann richtig. Wenn du dann noch die Werte in Grad, Minuten und Sekunden aufteilst, wäre das richtig schön.


Das geht aus dem Vorzeichen hervor: Norden (N) und Osten (E) ist + (PLUS). PLUS wird aber üblicherweise weggelassen...
http://de.wikipedia.org/wiki/Geographische_L%C3%A4nge

Ich werde mich um sowas sicher nicht streiten, da es für das Projekt nicht maßgeblich ist, aber es ist bisher immer noch üblich, E/W bzw. S/N anzugeben.


Horst_H - Sa 10.08.13 13:35

Hallo,

vielleicht hätte man das Thermometer als eine eigene Klasse definieren sollen, dem man eine image,Skala und Temperatur übergeben kann.
Ich habe ein paar kleinere Änderungen gemacht.
Beim Einlesen der Ini Datei, werden die Koordinaten in der Anzeige nicht geändert.
Ich GetUrltxt eingeführt, um auch unter Lazarus zum laufen zu bringen ( synapse/httpsend ist halt bei mir vorhanden )
Die Beschriftung des Thermometers mache ich nur einmal und habe sie aus PaintboxPaint verbannt und in Formactivate gepackt.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
procedure Ttthermo.FormActivate(Sender: TObject);
var ini:tinifile;
      i,b,akth: integer;
begin
    listbox1.doublebuffered:=true;
    if fileexists(datenverzeichnis+'wetter.ini'then
    begin
       ini := TIniFile.create(datenverzeichnis+'wetter.ini');
       i := ini.readinteger('Start','Nr',0);
       ini.free;
       listbox1.itemindex:=i;
       ListBox1Click(self);//<- Koordinatenanzeige aktualisieren
    end
    else
      listbox1.itemindex:=574;

    tc:=30;

    //image beschriften
    With image.Picture.bitmap.canvas do
      begin
      brush.style:=bsclear;
      font.size:=10;
      b:=image.Picture.bitmap.width div 2+12;
      akth := 75;
      for i:=oben downto -40 do
      begin
        moveto(b,akth);
        if i mod 10 = 0 then
        begin
          lineto(b+30,akth);
          textout(b+20,akth-font.size-4,inttostr(i));
        end
        else
        begin
          lineto(b+15,akth);
        end;
        inc(akth,4);
      end;
    end;
end;

{$IFNDEF FPC}
function Ttthermo.GetURltxt(Url:string):string;
var
  IdHTTP1 : TIdHTTP;
  Mem : TMemoryStream;
begin
  IdHTTP1:=tidhttp.create;
  Mem := TMemoryStream.Create;
  result := '';
  try
        IdHttp1.Get(Url, Mem);
        if Idhttp1.ResponseCode = 200 then // 200 = okay
        begin
          setlength(result,mem.Size);
          move(pChar(mem.memory)^,result[1],mem.size);
        end
        else
          ShowMessage('Fehler beim Abruf der Wetterdaten!');
  finally
    Mem.Free;
    IdHttp1.Free;
  end;
end;
{$else}
function Ttthermo.GetURltxt(Url:string):string;
var
  Http : THttpSend;
begin
  result := '';
  Http:= THttpSend.create;
  try
    IF Http.HTTPMethod('GET',URL) then
      With http.Document do
        begin
        setlength(result,Size);
        move(pChar(memory)^,result[1],size);
        end;
  finally
    Http.free;
  end;
end;
{$ENDIF}
function Ttthermo.GetValue(const Was,Worin:string):string;
var
 von,bis,LenS:integer;
begin
  lenS := length(Worin);
  von:=pos(Was,Worin)+length(Was)+ length(' value=');
  // Suchen erstem nach'"'
  while (von<=lenS) and (Worin[von]<>'"'do
    inc(von);
  inc(von);
  bis := von;
  // Suchen abschliessendem '"'
  while (bis<=lenS) and (Worin[bis]<>'"'do
    inc(Bis);
  result := copy(Worin,von,bis-von);
end;

procedure Ttthermo.Button1Click(Sender: TObject);
var
  Adresse : string;
  s,s2    : string;
  r       : real;
  code,sel : integer;

begin
//Seaching by geographic coordinats  api.openweathermap.org/data/2.5/weather?lat=35&lon=139
  Adresse := 'http://openweathermap.org/data/2.5/weather?lat='
             + edit9.text
             + '&lon='
             + edit8.text
             + '&mode=xml'
             + '&units=metric'
             + '&lang=de';
  s := GetURltxt(Adresse);
  IF s <> '' then
  begin
    val(GetValue('temperature',s),r,code);
    edit5.text:=inttostr(round(r));

      sel:=listbox1.itemindex;
      if sel>=0 then begin
        listbox2.clear;
        s2:=listbox1.items[sel];
        listbox2.items.add(copy(s2,1,pos(#9,s2)-1));
        listbox2.items.add('Temperatur'+#9+format('%.1f °C',[r]));
        listbox2.items.add('Luftfeuchtigkeit'+#9+GetValue('humidity',s)+' %');

        val(GetValue('pressure',s),r,code);
        listbox2.items.add('Luftdruck'+#9+format('%.0f hPa',[r]));
        val(GetValue('speed',s),r,code);
        listbox2.items.add('Wind'+#9+format('%.1f m/s',[r]));
        listbox2.items.add('Windrichtung'+#9+GetValue('code',s));
        listbox2.items.add('Wolken'+#9+GetValue('clouds',s)+' %');
        s:=GetValue('mode',s);
        if s='no' then
          listbox2.items.add('Niederschlag'+#9+'-');
        if s='rain' then
          listbox2.items.add('Niederschlag'+#9+'Regen');
        if s='snow' then
          listbox2.items.add('Niederschlag'+#9+'Schnee');
//        val(wert('precipiation'),5,code);
//        val(wert('"rain" unit'),n2,code);
//        listbox2.items.add('Niederschlag'+#9+format('%.1f mm/h',[n1/n2]));
      end
    else
      ShowMessage('Fehler beim Abruf der Wetterdaten!');
  end;
end;

Der TUpDown1 an Edit5 hat falsche Grenzen mit MIN = -32 und MAX = +102 eingetragen.

Was noch etwas Spannung reinbringen würde wäre eine Suche im Umkreis.
Koordinate vorgegeben und nach Abstand sortierte Liste von Orten.

Gruß Horst


Mathematiker - Sa 10.08.13 13:58

Hallo,
in der Revision 3/4 habe ich einige Änderungen durchgeführt.
user profile iconjasocul hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich mich richtig an mein Geographie-Studium erinnere, ist m/s die fachlich übliche Einheit.

In der Anzeige werden jetzt m/s und km/h gezeigt.

user profile iconjasocul hat folgendes geschrieben Zum zitierten Posting springen:
Es ist nicht klar, ob du östlicher oder westlicher Länge meinst. Entsprechend südlicher/nördlicher Breite. ...

Unter den Dezimangaben von Breite und Länge gebe ich zusätzlich die Angaben in S/N bzw. O/W und in ° ' ".
Die Eingabe muss erst einmal als rationale Zahl bleiben, wird aber vielleicht auch noch im Gradmaß.

user profile iconjasocul hat folgendes geschrieben Zum zitierten Posting springen:
... aber es ist bisher immer noch üblich, E/W bzw. S/N anzugeben.

Ich habe aber alle "E" gegen die deutschen "O" getauscht. Bei "denglisch" werde ich immer nervös.

user profile iconhathor hat folgendes geschrieben Zum zitierten Posting springen:
Skala zu den Windgeschwindigkeiten: http://de.wikipedia.org/wiki/Beaufortskala

Danke, werde ich noch berücksichtigen.

user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
Beim Einlesen der Ini Datei, werden die Koordinaten in der Anzeige nicht geändert.

Habe ich in der Revision 3 schon geändert. Der blöde Fehler ist mir erst heute aufgefallen.

user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
Was noch etwas Spannung reinbringen würde wäre eine Suche im Umkreis.
Koordinate vorgegeben und nach Abstand sortierte Liste von Orten.

Interessanter Vorschlag. Werde darüber nachdenken.
Deine Hinweise zur Korrektur des Textes sind wie immer richtig gut. Danke.

Außer dem Genannten habe ich noch die "allgemeine Wetterbeschreibung" hinzugefügt und die von Openweather vorgeschlagenen kleinen Bilder.
Bei denen bin ich aber auf ein Problem gestoßen. Der Versuch

Delphi-Quelltext
1:
2:
3:
4:
5:
     IdHttp1.Get('http://openweathermap.org/img/w/10d.png', Mem);
     mem.position:=0;
     bild:=tpngobject.create;
     bild.loadfromstream(mem);
     bild.free;
ging schief. Die Abfrage aus dem Netz funktioniert, aber PNG meldet eine fehlerhafte Datei. Das Gleiche passiert auch bei Hathors tollen Vorschlägen zu den ZDF-Wetterbildern.
Irgendwie habe ich das Verfahren noch nicht verstanden.
Aus diesem Grund habe ich die Bilder im Moment in eine Ressource gepackt.

Wird "automatisch aktualisieren" gewählt ruft das Programm je Minute genau einmal die Daten aus dem Netz ab und aktualisiert diese.
Außerdem habe ich die Abfrage der XML-Datei verbessert.
Weitere Änderungen werde ich mit Sicherheit vornehmen.

Beste Grüße
Mathematiker


Gerd Kayser - Sa 10.08.13 14:20

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
aber PNG meldet eine fehlerhafte Datei.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
  Mem := TMemoryStream.Create;
  try
    IdHttp.Get('http://openweathermap.org/img/w/01d.png', Mem);
    if Idhttp.ResponseCode = 200 then // 200 = okay
      begin
        Mem.Position := 0;
        PNGBild := TPngImage.Create;
        try
          PNGBild.LoadFromStream(Mem);
          Image.Picture.Assign(PNGBild);
        finally
          PNGBild.Free;
        end;
      end
    else
      ShowMessage('Fehler beim Abruf des Wettericons!');
  finally
    Mem.Free;
  end;

Die Frage ist, ob Dein Delphi das unterstützt. Ansonsten würde ich alle Wetterbildchen mit dem Internetexplorer runter laden und beim Abspeichern in JPG umwandeln. Die Iconliste findest Du hier: http://bugs.openweathermap.org/projects/api/wiki/Weather_Condition_Codes


Delete - Sa 10.08.13 15:50

Das geht einfacher, um irgend etwas aus dem Web auf der Festplatte zu speichern:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Button3Click(Sender: TObject);
var fs: TFileStream;
begin
  fs := TFileStream.Create('F:\01d.png', fmCreate); //bei mir F: wegen Schreibrechten als Admin
  try
    IdHTTP1.Get('http://openweathermap.org/img/w/01d.png', fs);
  finally
    fs.Free;
  end;
end;


Delete - Sa 10.08.13 16:07

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
...Die Abfrage aus dem Netz funktioniert, aber PNG meldet eine fehlerhafte Datei. Das Gleiche passiert auch bei Hathors tollen Vorschlägen zu den ZDF-Wetterbildern.
Irgendwie habe ich das Verfahren noch nicht verstanden.

Wird "automatisch aktualisieren" gewählt ruft das Programm je Minute genau einmal die Daten aus dem Netz ab und aktualisiert diese.

Beste Grüße
Mathematiker


Kommt darauf an, was aktualisiert werden soll: 15 Minuten reicht bei Werten, 60 Minuten bei Grafiken

ZDF-Wetterbild - Download:

Beispiel:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Button4Click(Sender: TObject);
var fs: TFileStream;
begin
  fs := TFileStream.Create('F:\sat-euri-0-1.jpg', fmCreate);
  //bei mir F: wegen Schreibrechten als Admin: Als Administrator ausführen
  try
    IdHTTP1.Get('http://wwwdyn.zdf.de/ext/weather/sat-euri-0-1.jpg', fs);
  finally
    fs.Free;
  end;
end;


Mathematiker - Sa 10.08.13 19:35

Hallo,
im ersten Beitrag habe ich ein zweites Programm ergänzt.

Während das 1.Programm (wetter.zip) nur das aktuelle Wetter des Ortes anzeigt, erhält man im zweiten (wetter2.zip) auch eine Wettervorhersage für die nächsten 2 Tage.
Mir gefällt das zweite besser, aber es ist natürlich Geschmackssache.

user profile iconhathor hat folgendes geschrieben Zum zitierten Posting springen:
Das geht einfacher, um irgend etwas aus dem Web auf der Festplatte zu speichern:

Danke für den Hinweis. Mir wäre es aber lieber die Abbildung nur im Speicher zu halten und gleich zu verarbeiten.
Ich werde auf jeden Fall auch Deine Idee testen.

Beste Grüße
Mathematiker


Delete - Sa 10.08.13 20:02

Es ist besser, die Wetter-Pics gleich nach dem Programmstart zu laden und zu speichern, dann hat man sie gleich blitzschnell, wenn man sie sehen will. Man kann dafür Eingabepausen nutzen -> GetLastInputInfo.


Delete - Sa 10.08.13 20:14

Kleiner Fehler: Beersheba = Be'er Scheva ist doppelt durch verschiedene Schreibweisen.
http://de.wikipedia.org/wiki/Be%27er_Scheva


Mathematiker - So 11.08.13 09:27

Hallo,
user profile iconhathor hat folgendes geschrieben Zum zitierten Posting springen:
Skala zu den Windgeschwindigkeiten
http://de.wikipedia.org/wiki/Beaufortskala

Im 2.Programm gebe ich jetzt die Windstärke statt der Windgeschwindigkeit in m/s an. Mit der Windstärke kann man irgendwie mehr anfangen.
Die Liste der Orte ist etwas korrigiert und erweitert.

Außerdem gibt's jetzt einen Schalter zu http://openweathermap.org/. Das gehört sich so, da die ja die Temperaturdaten liefern.

Beste Grüße
Mathematiker


jasocul - So 11.08.13 14:52

Ein Ergänzungsvorschlag:
Unter Dusche habe ich immer komische Ideen. Während meines Geographie-Studiums gab es auch ein wenig Feld-Forschung. Unter anderem ging es um die Messung der Verdunstungskälte. Dies ist die Basis zur Ermittlung der gefühlten Temperatur. Damals war das aber für die Wetter-Dienste und -Berichte eine Angabe, die nicht relevant war. Sie wurde auch nur über eine Versuchsanordnung gemessen. Inzwischen gibt es aber sogar eine Formel [http://de.wikipedia.org/wiki/Windchill] dafür (was ich unter Dusche gehofft habe).

Alle notwendigen Variablen sind in den ermittelten Daten vorhanden. Vielleicht ist das ja noch ein netter Zusatz für das Programm.


Mathematiker - So 11.08.13 15:55

Hallo,
ich komme aus der Dusche :lol: und lese
user profile iconjasocul hat folgendes geschrieben Zum zitierten Posting springen:
Dies ist die Basis zur Ermittlung der gefühlten Temperatur. ... Inzwischen gibt es aber sogar eine Formel [http://de.wikipedia.org/wiki/Windchill] dafür (was ich unter Dusche gehofft habe).

Superidee, und schon ist es in der Revision 2 des 2.Programms drin.

Außerdem habe ich für die Fans von Grad Fahrenheit eine Umschaltmöglichkeit eingebaut.
Zusätzlich kann die Darstellung jetzt auch ausgedruckt werden.

Beste Grüße
Mathematiker


Horst_H - So 11.08.13 17:43

Hallo,

Zitat:
Außerdem habe ich für die Fans von Grad Fahrenheit eine Umschaltmöglichkeit eingebaut.

Die große Anzeige der Temperatur wird umgerechnet, die kleinen in den seitlichen Angaben nicht.
Ich hatte eigentlich noch eine graphische Aufarbeitung der Daten mit Splines etc erwartet ;-)

Gruß Horst


Mathematiker - So 11.08.13 20:06

Hallo,
user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
Ich hatte eigentlich noch eine graphische Aufarbeitung der Daten mit Splines etc erwartet ;-)

So, Du möchtest Splines? :wink:
In Revision 3/4 des 2.Programms gibt es jetzt wahlweise eine 14-Tage-Vorschau. Diese enthält in einer grafischen Auswertung die Temperaturkurve (grün) und Luftdruckkurve (blau), natürlich mit kubischen Splines verbunden und nicht mit schnöden Strecken. :lol:

Hat Spaß gemacht, das umzusetzen. Allerdings war es auch ein wenig Stress.

Beste Grüße
Mathematiker


Mathematiker - Mo 12.08.13 08:39

Hallo,
und noch ein paar Änderungen (Rev 5 im 1.Beitrag).

wetter3

In der 14-Tage-Vorschau wird jetzt auch der mögliche Temperaturbereich von der niedrigsten zur höchsten Temperatur des Tages angezeigt.
Außerdem habe ich noch ein paar weitere Änderungen durchgeführt und zwei kleine Fehler (u.a. Datumsanzeige) entfernt.

Beste Grüße
Mathematiker


Delete - Mo 12.08.13 09:08

Auffällig:

Die Werte am 21.8. scheinen alle falsch zu sein: Temperaturen unglaubwürdig - bitte Plausibilitätskontrolle einbauen!

Das Programm wird immer besser! SUPER!!!
Wünschenswert: Alle Flughäfen dieser Welt haben Klimadaten - bitte alle in der Liste aufführen
Beispiel:
Ägypten: Kairo vorhanden, Hurghada und Marsa Alam fehlen


Mathematiker - Mo 12.08.13 09:19

Hallo,
user profile iconhathor hat folgendes geschrieben Zum zitierten Posting springen:
Auffällig:
Die Werte am 21.8. scheinen alle falsch zu sein: Temperaturen unglaubwürdig - bitte Plausibilitätskontrolle einbauen!

Ist mir auch schon aufgefallen. So dankenswert es ist, dass Openweathermap kostenlos(!) die Daten zur Verfügung stellt, so ärgerlich ist es, dass diese in wenigen Minuten teilweise erheblich schwanken, aber auch fehlerhafte Werte geliefert werden. Zum Beispiel sind die Bezeichnungen für die Wetter-Icons mitunter falsch. Widersprüche der Form "keine Wolken, aber Regen", usw. treten leider häufig auf.
Ich werde mal sehen, was ich machen kann.
user profile iconhathor hat folgendes geschrieben Zum zitierten Posting springen:
Wünschenswert: Alle Flughäfen dieser Welt haben Klimadaten - bitte alle in der Liste aufführen

Mache ich. Allerdings dauert es heute noch etwas länger.
Irgendwie muss ich doch noch etwas Anderes machen. Programmieren macht aber viel mehr Spaß. :lol:

Beste Grüße
Mathematiker


Delete - Mo 12.08.13 09:25

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Programmieren macht aber viel mehr Spaß. :lol:

Beste Grüße
Mathematiker


Das merkt man! Weiter so!

---

Plausibilitätstest
http://www.tu-freiberg.de/fakult3/geo/fog/FOG_Vol_7.pdf‎;
Ab Seite 14

Falls Link nicht geht: Google -> FOG_Vol_7.pdf


Gerd Kayser - Mo 12.08.13 15:46

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
So dankenswert es ist, dass Openweathermap kostenlos(!) die Daten zur Verfügung stellt, so ärgerlich ist es, dass diese in wenigen Minuten teilweise erheblich schwanken, aber auch fehlerhafte Werte geliefert werden. Zum Beispiel sind die Bezeichnungen für die Wetter-Icons mitunter falsch. Widersprüche der Form "keine Wolken, aber Regen", usw. treten leider häufig auf.

- Ziehe den Wettercode heran und weise dann ein entsprechendes Wetterbildchen zu.
- Das Wetter kann man nur für die nächsten Stunden ziemlich genau vorhersagen. Was in einigen Tagen für ein Wetter herrscht, ist schlicht und einfach Kaffeesatzleserei. Es gibt nicht an jeder Straßenecke eine Wetterstation, die ihre Messdaten an die Wetterdienste liefert. Man wohnt ja auch nicht direkt neben einer Wetterstation, so dass das Wetter im Raum zwischen den Wetterstationen mit mehr oder weniger Aufwand berechnet werden muss. In einem Gebiet kann es gleichzeitig regnen und trocken sein. Viele haben sicherlich schon mal folgende Situation erlebt: Auf der einen Seite der Straße herrscht Sonnenschein, und es ist trocken. 10 m weiter auf der anderen Straßenseite aber regnet es.
- Man kann allenfalls für das Wetter in einigen Tagen eine Tendenz vorhersagen bzw. berechnen. Diese Tendenz kann zutreffen. Sie muss es aber nicht. Deshalb macht es wenig Sinn, für einen bestimmten Ort in einigen Tagen detaillierte Angaben zu machen.
- Zum Thema Plausibilitätskontrolle. Dem Wetter ist es so was von egal, ob sich in einer Grafik in einigen Tagen ein Knick bei der Temperaturkurve abzeichnet oder nicht. Wie gesagt, die Vorhersage kann zutreffen. Sie muss es aber nicht.


Horst_H - Mo 12.08.13 16:08

Hallo,

ich erwische "nur" 9300 Flughäfen, ist das nicht reichlich übertrieben?
http://www.partow.net/miscellaneous/airportdatabase/

Dann sollte man doch eine zusätzliche Datei mit den Koordinaten / Name/ Land ( Zeitzone) mitsenden, statt alles in der .DFM zu verhackstücken.

Gruß Horst


Mathematiker - Mo 12.08.13 16:17

Hallo,
ich habe mir noch einmal die Daten genauer angesehen und habe einfach einen großen Denkfehler gehabt. :autsch:
Ich bin davon ausgegangen, dass unter "day" die Maximaltemperatur übermittelt wird. Das ist falsch; es ist die Mittagstemperatur.
Deshalb treten auch so komische Werte am 21.8., zumindest für mitteleuropäische Städte, auf.

In der Revision 6 wird jetzt die Kurve der Maximaltemperaturen des Tages gezeichnet.
Und wer es mag, kann sich zusätzlich die Temperaturkurve für morgens, mittags, abends und nachts einzeln anzeigen lassen.
Außerdem ist es schon klar, dass es dem Wetter vollkommen egal ist, ob man aus mathematischer Sicht die Kurve schön findet oder nicht. Das Wetter macht was es will!

user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
ich erwische "nur" 9300 Flughäfen, ist das nicht reichlich übertrieben?
http://www.partow.net/miscellaneous/airportdatabase/

Danke für den Link.
Ich habe schon ein paar, wenige Flughäfen ergänzt. Es ist aber mühsam die geografischen Koordinaten zusammenzusuchen. Mit dem Link geht's wahrscheinlich schneller.

Beste Grüße
Mathematiker


Delete - Mo 12.08.13 17:28

Stimmt!

Auszug:

EDDB:SXF:SCHONEFELD:BERLIN:GERMANY:52:22:48:N:13:31:21:E:0157
EDDC:DRS:DRESDEN:DRESDEN:GERMANY:51:07:57:N:13:46:01:E:0755
EDDF:FRA:FRANKFURT MAIN:FRANKFURT:GERMANY:50:01:35:N:08:32:35:E:0364
EDDE:ERF:ERFURT:ERFURT:GERMANY:50:58:48:N:10:57:29:E:1034


Horst_H - Mo 12.08.13 19:11

Hallo,

ich bin mir unsicher, wie man am besten mit den Flughäfen verfahren soll.
Ich habe sie mal nach 3-Stelligem Code sortiert, falls der vorhanden war.Damit verbleiben 1500 Flughäfen.Es ist doch einfacher FRA nach PEK.
Damit fallen aber viele amerikanische Flughäfen raus :-(
Diese Version läßt 'N/A' und damit 4186 Flughäfen drin.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
program Transform;
// Umwandeln von Liste der Flughaefen von
// http://www.partow.net/miscellaneous/airportdatabase/
// in mathematikers Format

uses
  sysutils,classes;
const
  delimiter = ':';
  separator =#9;
var
  L,Z,Erg : tStringlist;
  s: string;
  lon,lat : double;
  i,EndPos,StartPos: integer;

begin
  L := tStringlist.create;
  Z := tStringlist.create;
  Erg := tStringlist.create;
  L.Loadfromfile('GlobalAirportDatabase.txt');

  For i := 0 to L.Count-1 do
  begin
    Z.clear;

    s := L[i];
    // Alle Zeichen zwischen delimiter kopieren
    StartPos := 1;
    For EndPos := 1 to Length(s) do
      if s[EndPos] = delimiter then
        begin
        Z.Add(copy(s,StartPos,EndPos-StartPos));
        StartPos:= EndPos+1;
        end;
    //Nach letztem delimiter
    Z.Add(copy(s,StartPos,EndPos-StartPos));
{
Field 00 - ICAO Code: 4 character ICAO code
Field 01 - IATA Code: 3 character IATA code
Field 02 - Airport Name: string of varying length
Field 03 - City,Town or Suburb: string of varying length
Field 04 - Country: string of varying length
Field 05 - Latitude Degrees: 2 ASCII characters representing one numeric value
Field 06 - Latitude Minutes: 2 ASCII characters representing one numeric value
Field 07 - Latitude Seconds: 2 ASCII characters representing one numeric value
Field 08 - Latitude Direction: 1 ASCII character either N or S representing compass direction
Field 09 - Longitude Degrees: 2 ASCII characters representing one numeric value
Field 10 - Longitude Minutes: 2 ASCII characters representing one numeric value
Field 11 - Longitude Seconds: 2 ASCII characters representing one numeric value
Field 12 - Longitude Direction: 1 ASCII character either E or W representing compass direction
Field 13 - Altitude: varying sequence of ASCII characters representing a numeric value corresponding to the airport's altitude from mean sea level (ie: "123" or "-123")
*                   ft ( wahrscheinlich ) oder m ?
* }

    //IF (z[8] <>'U') AND (z[12] <>'U')then
    begin
      // Erst IATA, ICAO, Ort, Land
      s := ''''+z[1]+','+z[0]+','+z[3]+','+z[4]+'''';
      lat := (StrToInt(z[7])/60+StrToInt(z[6]))/60+StrToInt(z[5]);
      IF z[8] = 'S' then
        lat := -lat;
      lon := (StrToInt(z[11])/60+StrToInt(z[10]))/60+StrToInt(z[9]);
      IF z[12] <> 'E' then
        lon := -lon;
      If (lat <> 0.0AND (lon <> 0.0then
        begin
        s:= s+separator+FloatToStr(lat)+separator+FloatToStr(lon);
        Erg.Add(s);
        end;
     end;
  end;
  Erg.Sort;
  Erg.SaveToFile('Ausgabe.txt');

  Erg.free;
  z.free;
  L.free;
end.


Eventuell sollte man eine separate Liste nur für Flughäfen in Erwägung ziehen.

Alleine in den USA sind es über 4000 Flughäfen
http://www.airnav.com/airports/browse.html

Gruß Horst


Tastaro - Di 13.08.13 07:53

Hallo,

ich habe noch eine eher triviale Anmerkung: Könntest Du die Position der Formulare auf poScreenCenter stellen? Bei mir tauchen sie immer auf der Kante zwischen dem ersten und zweiten Monitor auf. Steht die Position zur Zeit auf poDesktopCenter?

Beste Grüße


Mathematiker - Di 13.08.13 08:10

Hallo,
user profile iconTastaro hat folgendes geschrieben Zum zitierten Posting springen:
Könntest Du die Position der Formulare auf poScreenCenter stellen? Bei mir tauchen sie immer auf der Kante zwischen dem ersten und zweiten Monitor auf.

Schon geändert.
Ich kann mir das einfach nicht merken. :oops:

Außerdem habe ich jetzt die Ortsliste als komprimierte Ressource im Programm. Dadurch wird die Exe einiges kleiner.

Beste Grüße
Mathematiker


Delete - Di 13.08.13 08:47

Das Problem mit der veralteten ZLIB-Version vom Mathematiker hatten wir schon mal vor einigen Monaten...
Wer eine neuere Version hat muss nur eine Zeile ändern:


Delphi-Quelltext
1:
2:
//     DecompressBuf(InpBuf, sz, 0, OutBuf, OutBytes);
      ZLib.ZDeCompress(InpBuf, sz, OutBuf, OutBytes);



Änderungen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
var
  Form1: TForm1;
  datenverzeichnis, DaCo: string;

const
   configfile = 'wetter10.ini';

function GetSpecialFolder(Folder: Integer): String;
begin
  SetLength(Result,MAX_PATH);
  If SHGetSpecialFolderPath(0, PChar(Result), Folder, false)
    then SetLength(Result,StrLen(PChar(Result)))
    else Result:='';
end;

procedure TForm1.FormActivate(Sender: TObject);
var ini:tinifile;
    nr:integer;
begin
    minutealt:=0;
    listbox1.doublebuffered:=true;
    datenverzeichnis:= GetSpecialFolder(CSIDL_APPDATA) +'\Wetterdaten2\';
    if not DirectoryExists(datenverzeichnis) then mkdir(datenverzeichnis);
    DaCo:= datenverzeichnis+configfile;
    if FileExists(DaCo) then
       Label4.Caption:= ' INI-File: '+DaCo +' exists' else
       Label4.Caption:= ' INI-File: '+DaCo +' NOT exists';

       ini := TIniFile.create(DaCo);//'wetter1.ini');
    try
       nr:=ini.readinteger('Start','Nr',0);
       radiogroup1.itemindex:=ini.readinteger('Start','14Tage',1);
       listbox1.itemindex:=nr;
    finally
       ini.free;
    end;
    listbox1click(sender);
    tc:=30;
end;

procedure TForm1.FormCreate(Sender: TObject);
procedure loadliste(const kk:string);
var ms1: TResourcestream;
    ms2: TMemoryStream;
begin
Form1.WindowState:=wsMaximized;  //th
    ms1 := TResourceStream.Create(hinstance,kk,'RT_RCDATA');
    try
      ms2 := TMemoryStream.Create;
      try
        DecompressStream(ms1, ms2);
        listbox1.items.LoadFromStream(ms2);
      finally
        ms2.Free;
      end;
    finally
      ms1.Free;
    end;
end;
begin
    liste:=tstringlist.create;
    liste2:=tstringlist.create;
    loadliste('mort');
(*  datenverzeichnis:=datenverzeichnissuchen;
    if not directoryexists(datenverzeichnis) then createdir(datenverzeichnis);
    if not fileexists(datenverzeichnis+'wetter1.ini') then
    begin
       ini := TIniFile.create(datenverzeichnis+'wetter1.ini');
       ini.Writeinteger('Start','Nr',0);
       ini.Writeinteger('Start','14Tage',1); //th
       ini.free;
    end;
*)

end;

procedure TForm1.FormDestroy(Sender: TObject);
var ini:tinifile;
begin
    liste.free;
    liste2.free;
    ini := TIniFile.Create(DaCo);
    try
      ini.Writeinteger('Start','Nr',listbox1.itemindex);
      ini.Writeinteger('Start','14Tage',radiogroup1.itemindex);
    finally
      ini.free;
    end;
end;


Tranx - Di 13.08.13 14:37

Auf jeden Fall ein super Programm. Doch ich bin bei der Suche auf einen Fehler gestoßen, möglicherweise durch faksche Datenübertragung: Die Station Davis in der Antarktis zeigt -54°C - -60°C an, auch der Luftdruck ist mit 670 - 680 hPa deutlich zu niedrig für Meeresniveau. Dann müsste man ja arge Sorgen haben, dass doert ein extremes Tiefdruckgebiet sei und damit extrem gefährliche Stürme herrschen müssten.Wenn man die Daten per google aufruft, sind dort grad mal -12°C, was auch sehr viel wahrscheinlicher ist, weil Davis an der Küste liegt, und derartige Temperaturen im Winter in der Antarktis wohl nur im Landesinneren auftreten.

Was mich vermuten lässt, dass falsche Daten übertragen werden, war auch, dass gestern angeblich in Hintertux-Österreich -18°C geherrscht haben sollten. Heute ist der Fehler bei Hintertux werg. Derartige Fehler sind selbst mit Plausibilitätsprüfungen nicht auszumerzen.

Ansonsten ein super Programm.


Horst_H - Di 13.08.13 16:26

Hallo,

Die Anzeige von Fahrenheit ist noch nicht optimal, wie ich zuvor gemosert habe

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure auswertung2tage;
....
// Die groß geschriebenen Werte werden geändert 
      ziel.font.size:=16;
      if radiobutton1.checked then
        ziel.textout(x-65,y,format('%.0f°C',[tr]))
      else
        ziel.textout(x-65,y,format('%.0f°F',[9*tr/5+32]));
//ein paar Zeilen darunter:
// fehlt dies
//statt ziel.textout(x,y+16,format('Temperatur %.0f °C',[tr]))
      if radiobutton1.checked then
        ziel.textout(x,y+16,format('Temperatur %.0f °C',[tr]))
      else
        ziel.textout(x,y+16,format('Temperatur %.0f°F',[9*tr/5+32]));


Ich gebe zu, man müsste eigentlich die Temperatur dort gar nicht mehr zusätzlich eintragen.

Gruß Horst


Mathematiker - Di 13.08.13 17:19

Hallo,
user profile iconTranx hat folgendes geschrieben Zum zitierten Posting springen:
Doch ich bin bei der Suche auf einen Fehler gestoßen, möglicherweise durch faksche Datenübertragung: Die Station Davis in der Antarktis zeigt -54°C - -60°C an, auch der Luftdruck ist mit 670 - 680 hPa deutlich zu niedrig für Meeresniveau. ...

Die Ursache ist, dass von Davis keine Daten übermittelt werden. Es ist leider so, dass nicht jeder Ort der Liste in der Nähe einer Wetterstation liegt. Ich denke aber, die Lösung gefunden zu haben.

Außer den Daten wird ja auch die Lage der übermittelnden Wetterstation gesendet. Diese zeige ich jetzt an und berechne den Abstand (Erde als idealisierte Kugel) zum eingegebenen Ort.
Ist dieser größer als, sagen wir, 100 km, dann sind die Daten mit Sicherheit falsch. Dann zeige ich eine entsprechende Fehlermeldung an.

Nun könnte ich jeden Ort der Liste testen und dann entfernen, wenn gar keine Station in seiner Nähe ist, aber das sind 3500 Orte ...
Außerdem darf man ja nur 1000 mal je Stunde die Daten aufrufen. :wink:

Mal sehen, was ich alles schaffe. Davis in der Antarktis liegt "nur" 2087 km von den nächsten Station entfernt, bei Mirnij sind es schon 2300 km und Süd- bzw. Nordpol mehr als 1000 km. D.h., die Orte werden wohl aus der Liste verschwinden.

user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
Die Anzeige von Fahrenheit ist noch nicht optimal, ...

Hatte ich vergessen, Entschuldigung. Ist jetzt geändert.

@hathor: Dein Vorschlag, die Ortsliste extern zu lagern ist gut, dauert aber länger.

Beste Grüße
Mathematiker

Nachtrag: Alle Orte mit dem Anfangsbuchstaben A bis J sind getestet!
Dabei treten mitunter werkwürdige Zeichen auf. ä, ö, ü und ß ändere ich ja ab, aber die anderen? UTF-8 und Delphi 5 geht wohl nicht richtig zusammen.


Mathematiker - Mi 14.08.13 13:10

Hallo,
in der Revision 10 habe ich nun alle Orte der Liste geprüft, d.h. jeder enthaltene liegt in relativer Nähe zu einer Wetterstation, nur selten weiter als 10 km entfernt.
Damit müssten besonders merkwürdige Temperaturmeldungen bei einzelnen Orten eigentlich vorbei sein.

Außerdem habe ich mit meinem Delphi 5 das UFT8-Problem mit "brutaler Gewalt" gelöst. Alle UTF8-Zeichen, die bei den Ortsnamen auftreten, filtere ich einzeln heraus und ersetze sie mit "normalen Zeichen".
Mit eleganter Programmierung hat das nichts zu tun, aber es funktioniert.

Beste Grüße
Mathematiker


Marc. - Mi 14.08.13 13:53

Hi! Schönes Programm. Mit der 14-Tage Übersicht sieht man auch sehr gut, dass die Temperaturen am Äquator kaum varrieren. :-)

Beim Drucken öffnet Dein Programm leider immer nur den als Standard eingerichteten Drucker. Unter Umständen hat man allerdings mehrere Printer oder möchte die Übersicht in eine PDF-Datei schreiben. Da wäre es schön, den Drucker in einem Dialog auswählen zu können.

Beste Grüße

P.S. Bei der Liste mit den Städten und Wetterstationen zeigt sich mal wieder, weshalb Aachen auf den Zusatz "Bad" freiwillig verzichtet. :lol:


Mathematiker - Mi 14.08.13 14:05

Hallo,
user profile iconMarc. hat folgendes geschrieben Zum zitierten Posting springen:
Hi! Schönes Programm.

Danke.
user profile iconMarc. hat folgendes geschrieben Zum zitierten Posting springen:
Beim Drucken öffnet Dein Programm leider immer nur den als Standard eingerichteten Drucker.

In der Revision 11 gibt's jetzt auch die Druckerauswahl.
user profile iconMarc. hat folgendes geschrieben Zum zitierten Posting springen:
Bei der Liste mit den Städten und Wetterstationen zeigt sich mal wieder, weshalb Aachen auf den Zusatz "Bad" freiwillig verzichtet. :lol:

Soll ich "Bad Aachen" schreiben? Dann ärgern sich die Bad Aachener. :lol:

Beste Grüße
Mathematiker


Delete - Mi 14.08.13 17:13

Du kannst auch Bad Dresden schreiben - wenn mal wieder die Elbe zu Besuch kommt...


Mathematiker - Mi 14.08.13 18:24

Hallo,
in der Revision 12 gibt's etwas Neues!

Über den Schalter Weltkarte werden alle in der Liste enthaltenen Orte auf einer Karte (Mercator-Projektion!) angezeigt.
Klickt man auf einen der gelben Punkte, werden die Koordinaten übernommen und je nach Wahl eine 2- oder 14-Tage-Vorschau angezeigt.
Klickt man irgendwo in die Karte, wird der nächstliegende Ort ermittelt und für diesen das Wetter ausgewertet.

Ich gestehe, dass ich auf diese Neuerung stolz bin.

Beste Grüße
Mathematiker


Horst_H - Mi 14.08.13 18:47

Hallo,

ich bin entsetzt, moralisch enttäuscht ;-)
Vor lauter Stationen sieht man nichts mehr.
user profile icongoose hatte mir mal seine Implementation einer Weltkugel mit OpenGl mit Skalierung 2007 übersendet, die werde ich wohl kaum wiederfinden.Vielleicht hat es in C# veröffentlich.
Aber vielleicht soetwas http://4coder.org/delphi-source-code/434/ ohne Rotation.

Gruß Horst
P.S.
Bald kannst Du Geld verlangen :-)


Mathematiker - Mi 14.08.13 22:42

Hallo,
user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
Vor lauter Stationen sieht man nichts mehr.

Stimmt und deshalb gibt's in Revision 13 etwas Abhilfe.
Die zwei Speedbuttons neben "Weltkarte" vergrößern bzw. verkleinern die Weltkarte.
Klickt man links auf eine vergrößerte Karte kann man unter Festhalten der Maustaste die Karte nach links, rechts, oben, unten verschieben.

Dadurch ändert sich aber eine Sache wesentlich.
Jetzt übernimmt ein Klick mit der rechten(!) Maustaste die Koordinaten aus der Karte und zeigt das entsprechende Wetter an.
Ganz glücklich bin ich noch nicht, aber vorerst kann ich mit dieser Änderungsmöglichkeit der Kartendarstellung leben.
So, das war heute die x.te Revision. Die nächste kommt erst morgen, versprochen. :wink:

Beste Grüße
Mathematiker

Nachtrag: Das Zoomen verschiebt im Moment das Zentrum der Karte. Das ist schlecht und deshalb auch schon geändert.
Die Revision 14 kommt aber erst morgen. Versprochen. :lol:


Mathematiker - Do 15.08.13 16:15

Hallo,
wie angekündigt gibt es jetzt die Revision 14. Es sind einige Änderungen vorhanden.

Erstens bleibt beim Zoomen der Mittelpunkt der Weltkarte im Zentrum.
Zweitens wurde es langsam unübersichtlich. Deshalb habe ich das Formular aufgeräumt und einige Punkte in ein Menu verschoben. U.a. findet man dort nun auch die Möglichkeit, die Karte in die Zwischenablage zu kopieren.
Drittens habe ich die Ortsliste um etwa 50 Orte erweitert, vor allem aus Regionen, wo wenige Stationen genannt werden.

Die vierte Änderung ist die wichtigste.
Mir ist heute aufgefallen, dass nicht immer von Openweathermap auch wirklich 14 Tage übermittelt werden, mitunter nur 13. Dadurch sah die 14-Tage-Vorschau merkwürdig aus, da z.B. für den letzten Tag der Luftdruck mit 0 hPa ausgewertet wurde. Das habe ich jetzt abgefangen.

So, langsam wird das Programm komplexer. Noch macht es Spaß, mal sehen, wie lange noch.

Beste Grüße
Mathematiker


Mathematiker - Do 15.08.13 19:51

Hallo,
irgendwie läuft es im Moment ganz gut und deshalb noch eine Revision, die Nr. 15.

Zusätzlich wird jetzt auch eine Weltkarte gezeichnet, auf der für 40 ausgewählte Orte das aktuelle Wetter angezeigt wird.
So jetzt gehen wir erst einmal die Ideen aus. Vielleicht habe ich ja noch eine "Eingebung".

Beste Grüße
Mathematiker


Tranx - Do 15.08.13 20:08

Also, ein Dickes Lob. Das ist wirklich ein super gelungenes Programm. Das kann sich echt sehen lassen. Danke für diese Arbeit.


jasocul - Fr 16.08.13 09:43

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
So jetzt gehen wir erst einmal die Ideen aus. Vielleicht habe ich ja noch eine "Eingebung".

Ich bin dieses Wochenende Strohwitwer. Vielleicht habe ich ja Zeit, mir noch ein paar Dinge einfallen zu lassen. :twisted:

Ist wirklich ein tolles Projekt geworden. :zustimm:


Mathematiker - Fr 16.08.13 22:51

Hallo,
nach dem Lesen von
http://www.welt.de/vermischtes/article119087980/Wie-gut-sind-die-Vorhersagen-von-Wetter-Apps.html
bin ich deprimiert.

Beste Grüße
ein deprimierter Mathematiker


Gerd Kayser - Sa 17.08.13 01:11

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
nach dem Lesen von
http://www.welt.de/vermischtes/article119087980/Wie-gut-sind-die-Vorhersagen-von-Wetter-Apps.html
bin ich deprimiert.

Ich schrieb ja bereits, dass jede Vorhersage jenseits von zwei Tagen immer mehr zur Kaffeesatzleserei wird. Auch einfache Kennzahlen wie 70 % Regenwahrscheinlichkeit bringen einem absolut nichts. Regnet es nachts, vormittags oder abends, wenn man ausgehen will?

Versetz Dich zum Beispiel mal in die Lage eines Hundebesitzers, so wie ich es einer bin, der dreimal am Tag für mindestens eine Stunde mit seinem Hund raus muss. Da brauche ich ganz andere Informationen. Zum Beispiel:

- Anzeige, welche Pollen zur Zeit in der Luft sein können, um ggf. vorher eine Pille einzuwerfen. http://www.allergieratgeber.de/
- Niederschlagsmengen in den nächsten Stunden. Wenn es gerade regnet, hört der Regen demnächst auf, um ggf. den Rundgang zu verschieben. Wenn es gerade nicht regnet, wird es demnächst regnen? Ein Blick aufs Niederschlagsradar hilft hier auch weiter. Die Niederschlagskarten der meisten Wetterdienste taugen allerdings nichts. Beste Karte: http://www.t-online.de/advtoi/wetter/info/niederschlagsradar.html
- Gibt es Unwetterwarnungen? Meine Madame fürchtet sich bei Gewitter. Hagel ist für einen Hund auch alles andere als gesundheitsfördernd. Infos bekommt man z. b: hier: http://www.dwd.de/warnungen
- Zeitpunkt des Sonnenuntergangs ist zum Beispiel für die Frage wichtig, ob ich meiner Madame ein LED-Leuchthalsband umlegen muss oder nicht.

Ich bin noch dabei, alle Informationen zu sammeln und auszuwerten. Vielleicht veröffentliche ich demnächst dann auch meine Wetteranwendung für Gassigänger.


Tranx - Sa 17.08.13 12:37

Wenn ich so die Anmerkungen von Gerd Kayser lese, ist Zeit für eine Handy-App: "Gassi gehen" Dort sollte dann die aktuelle Pollenwarnung, die Regenwahrscheinlichkeit, der Zeitpunkt des Sonnenauf- und untergangs, Temperaturen des Bodens und der Luft, Windgeschwindigkeiten, aufgelöst nach Straßen und Wegen, aufgezeigt werden. Dann braucht man auch nicht mehr aus dem Fenster zu sehen. Ist eh zu popelig, vorher erst hinaus zu sehen, ob die Sonne aufgegangen oder gerade am untergehen ist, ob es etwa regnet oder gar hagelt und ob Wind weht, oder nicht. Wofür hat man sein Alleskönner, das IPod, Handy oder was auch immer sein Name ist.

Frage mich ernsthaft, wie unverantwortlich Hundebesitzer von 30 Jahren waren, dass sie einfach mit ihren Hunden bei Wind und Wetter rausgingen. Mensch, dafür müsste man sie nachträglich noch steinigen. ;)

Klaro kann man das Wetter nur unzureichend vorhersehen. Gilt ja immer noch das Sprichwort von Hahn auf dem Mist. Aber manchmal trifft dies mit schon erstaunlicher Genauigkeit ein. Und für den Rest haben wir doch das Sprichwort:

Der Mensch denkt, Gott lenkt.
;)

Wenn man alles vorhersehen will, wird man sicher das Wichtigste nicht bemerken. Dessen bin ich mir sicher.


papa69 - Sa 17.08.13 14:35

Also, mal ehrlich: Wenn ich HEUTE spazieren gehen möchte (resp. mit dem Hund Gassi...), dann interessiert es mich doch nicht wirklich, wie (un-)genau die Vorhersagen für die nächsten 2 Tage ist...Und die durchschnittliche Abweichung von 1,5 - 2 Grad vom tatsächlichem Temperaturwert ist doch auch eher zweitrangig.

Von daher:
@Mathematiker -> Kopf hoch (und nicht in den Sand stecken)
@Gerd Kayser -> ja, du hast recht, diese App ist (bald) notwendig
@Tranx -> genau, der Hahn hat immer recht

Vom heutigen Standpunkt aus, ist der MENSCH (an sich; die Menschheit) immer nur auf allergrößte Sicherheit aus. Würden wir in den USA leben, könnte man Petrus wegen des Wetters sehr wahrscheinlich verklagen, damit auch noch Recht bekommen und zigfacher Millionär werden... Früher (so im letzten Jahrtausend; also vor 1999) hieß es auf die Frage des Kindes, ob es denn draußen spielen dürfe, ganz einfach: Ja, es ist (doch) Sommer. Damit erübrigte sich jedwede weitere Fragerei (was man anziehen soll usw.usf.)

Ich finde das Programm gut, vielleicht in manchen Sachen (etwas) überladen. Das ist jedoch Ansichtssache. Der eine mag/will/braucht diese Dinge, ein anderer ganz andere. Recht machen kann man es wohl immer nur einzelnen. Daher bräuchte man Einzelverträge für jeden Anwender -> Mathematiker, du wird dich wohl über kurz oder lang dumm-und-dusslich verdienen.
Mit jeder Revision des Programms wurde es auch besser. Und wer weiß, ... Aus so mancher "Schnaps-Idee" wurde manch wichtige "Entdeckung/Erfindung", die die Menschheit brauchte/voranbrachte etc.pp.


Mathematiker - Sa 17.08.13 15:28

Hallo,
ich musste noch die Revision 16 nachschieben.
Leider gab es böse Fehler in der Ortsliste (mit Programmabsturz :x ). Diese Fehler habe ich beseitigt.
Außerdem wird jetzt der Hitzeindex korrekt berechnet.

In der 14Tage-Vorschau gibt es jetzt wahlweise auch die vorhergesagte Niederschlagskurve.

Beste Grüße
Mathematiker


Horst_H - Sa 17.08.13 19:32

Hallo,

nur so nebenbei. sunset und sunrise stehen in der json Abfrage zur Verfügung, wenn auch die Zeit in Sekunden seit 0:00 Uhr 1.1.1970 Unixzeit [http://de.wikipedia.org/wiki/Unixzeit] und die Temperatur in Kelvin angegeben sind.
Aus dem Beispiel zu London:
api.openweathermap.org/data/2.5/weather?q=London,uk

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
{"coord":
         {"lon":-0.12574,"lat":51.50853},
          "sys":
                {"country":"GB",
                 "sunrise":1376715026,
                 "sunset":1376767104},
          "weather":[{"id":804,
                      "main":"Clouds",
                      "description":"overcast clouds",
                      "icon":"04d"}],
          "base":"gdps stations",
          "main":
                 {"temp":291.16,
                  "humidity":73,
                  "pressure":1008,
                  "temp_min":289.82,"temp_max":292.04},
          "wind":
                 {"speed":7.71,
                  "gust":8.22,
                  "deg":193},
          "rain":{"3h":0},
          "clouds":{"all":92},
          "dt":1376757953,
          "id":2643743,
          "name":"London",
          "cod":200}

die Zeit lässt sich ja leicht umrechnen.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
...
    UnixDate := EncodeDateTime(197011000,0);
...
...// Zeit als int64 einlesen
    i64:= J.AsInt64;
    Tage := i64 DIV 86400;
    Sekunde := i64-86400*Dat;//mod 86400
     //GMT+1h  +1h bei Sommerzeit hier 2/24
    Zeit := UnixDate+Dat+Sek/86400+2/24;


Wie die Daten für 2 Wochen aussehen , weiß ich nicht.JSON Format läßt sich sicher einfach parsen für dies spezielle Anwendung.
dt ist, soweit ich weiß, die Zeit der letzten Aktualisierung.

Gruß Horst


Tranx - Sa 17.08.13 20:38

Der Sonnenauf- und Untergang nur ist eine Funktion des Ortes und des Tages im Jahr.

http://lexikon.astronomie.info/zeitgleichung/

Daher kann man bei Anwendung der in dem Link angegebenen Gleichungen die entsprechenden Werte auch für 14-Tage im Voraus ermitteln.


Mathematiker - Sa 17.08.13 23:03

Hallo,
ich habe für die Berechnung von Sonnenaufgang und -untergang die Unit moon.pas genutzt:
Zitat:
{ Copyright 1997-2001 Andreas Hörstemeier Version 2.0 2001-07-07 }
{ Algorithms taken from the book "Astronomical Algorithms" by Jean Meeus }

Diese ist sehr genau und liefert die interessanten Zeiten in UT (Universal Time). Da für die Orte in der Liste die Zeitzonen fehlen, geht es leider nicht in lokaler Zeit. Auch von OpenWeatherMap werden die Zeiten nur in Weltzeit übermittelt.
Das wirklich gute Paket von Andreas Hörstemeier hänge ich hier im Original an.

Außerdem enthält Revision 17 jetzt im Menu ein paar Links zu den ZDF-Wetterkarten. Allerdings kann es etwas dauern, bis die Bilder erscheinen; zumindest bei mir mit meinem sehr langsamen Netz.

Beste Grüße
Mathematiker


Gerd Kayser - Sa 17.08.13 23:04

user profile iconTranx hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich so die Anmerkungen von Gerd Kayser lese, ist Zeit für eine Handy-App: "Gassi gehen" Dort sollte dann die aktuelle Pollenwarnung, die Regenwahrscheinlichkeit, der Zeitpunkt des Sonnenauf- und untergangs, Temperaturen des Bodens und der Luft, Windgeschwindigkeiten, aufgelöst nach Straßen und Wegen, aufgezeigt werden. Dann braucht man auch nicht mehr aus dem Fenster zu sehen. Ist eh zu popelig, vorher erst hinaus zu sehen, ob die Sonne aufgegangen oder gerade am untergehen ist, ob es etwa regnet oder gar hagelt und ob Wind weht, oder nicht.


Schau doch einfach mal über den Tellerrand.

zur Pollenwarnung: Du bist sicherlich kein Allergiker. Es gibt vielfältige allergische Reaktionen. Ein "bisserl Heuschnupfen" ist wohl die harmloseste Reaktion. Komme ich mit bestimmten Baumpollen in Kontakt, fängt die Haut am ganzen Körper an leicht zu kribbeln, das Kribbeln wird immer stärker bis sich 15 bis 30 Minuten nach dem Kontakt die ersten Quaddeln am ganzen Körper bilden und es wie wahnsinnig juckt. So schnell kann ich mich nicht kratzen, so wie das juckt. Bis eine Tablette anfängt zu wirken, vergehen 30 Minuten ...

zum aus dem Fenster schauen: Das zeigt nur das aktuelle Wettergeschehen, nicht aber wie sich das Wetter in den nächsten 3, 6 oder 12 Stunden entwickelt. Ob man diese Informationen nun als Gassigänger, Gartenbesitzer, Autofahrer oder als Familie nutzt, die einen Tagesausflug ins Freibad oder in den Zoo oder den Freizeitpark plant, ist doch eigentlich unwichtig. Für eine Familie, die an der Eintrittskasse einen Haufen Geld löhnt, ist es schon wichtig, den ganzen Tag nutzen zu können und nicht die meiste Zeit Schutz vor Regen suchen zu müssen.

zum Unwetter: Frag mal einen Autobesitzer, dem zuvor durch Hagel oder durch herabfallende Baumteile bei Sturm das Autoblech demoliert worden ist, was er davon hält. Oder den Gartenbesitzer, der nach einem Sturm seine Gartenmöbel in den Nachbargärten einsammeln darf. ;-)

Dass die Zeiten des Sonnenaufgangs und des Sonnenuntergangs meist von den Wetterdiensten mitgeliefert werden, weiß ich auch. Aber sie werden bei den Wetteranwendungen meist nicht dargestellt. Die Werte des aktuellen Tages reichen doch aus.

user profile iconTranx hat folgendes geschrieben Zum zitierten Posting springen:
Frage mich ernsthaft, wie unverantwortlich Hundebesitzer von 30 Jahren waren, dass sie einfach mit ihren Hunden bei Wind und Wetter rausgingen. Mensch, dafür müsste man sie nachträglich noch steinigen. ;)


In den letzten 30 Jahren hat sich sehr viel geändert. Man kann die neuen Sachen nutzen oder es bleiben lassen. Ich steinige niemanden, der heute den PC und das Internet nutzt, statt Füllfederhalter, mechanische Schreibmaschine und Bücher. ;-)


Gerd Kayser - Sa 17.08.13 23:24

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
ich habe für die Berechnung von Sonnenaufgang und -untergang die Unit moon.pas genutzt:

Lesenswert: http://lexikon.astronomie.info/zeitgleichung/

Demnach ist die exakte Berechnung alles andere als trivial. Abweichungen von einigen, wenigen Minuten sind immer möglich. Aber exakte Werte braucht man in der Regel nicht.


Mathematiker - Sa 17.08.13 23:55

Hallo,
user profile iconGerd Kayser hat folgendes geschrieben Zum zitierten Posting springen:
Lesenswert: http://lexikon.astronomie.info/zeitgleichung/
Demnach ist die exakte Berechnung alles andere als trivial.

Trivial ist das nicht und vor allem nicht so einfach, wie unter lexikon.astronomie.info beschrieben.

Deshalb nehme ich ja Hörstemeiers moon.pas, der die Algorithmen von Jean Meeus umgesetzt hat. Meeus ist der "Guru" der rechnenden Astronomie. Ohne ihn geht kaum etwas.
Seine Algorithmen sind das Beste, das in den letzten Jahrzehnten zu astronomischen Problemen veröffentlicht wurde. Deshalb ist sein Buch "Astronomische Algorithmen" Mangelware, das antiquarisch hohe Preise erzielt.
Sehr viele Berechnungen in meinem Astronomieprogramm http://www.entwickler-ecke.de/topic_Aktueller+Sternhimmel_110678.html beruhen auf diesem Werk.

Für die Berechnung von Sonnenaufgang und -untergang hier im Wetterprogramm liegt der maximale Fehler der Zeit mit Meeus' Theorie bei wenigen Sekunden.

user profile iconpapa69 hat folgendes geschrieben Zum zitierten Posting springen:
Mathematiker, du wird dich wohl über kurz oder lang dumm-und-dusslich verdienen.

Das klingt ja richtig gut. :lol: Jetzt brauche ich nur noch jemanden, der diese Vorhersage wahr macht. :wink:

Beste Grüße
Mathematiker


Gerd Kayser - So 18.08.13 01:01

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Deshalb nehme ich ja Hörstemeiers moon.pas, der die Algorithmen von Jean Meeus umgesetzt hat. Meeus ist der "Guru" der rechnenden Astronomie. Ohne ihn geht kaum etwas.

Ich habe hier für den heutigen Tag (18.08.2013) drei Werte für den Sonnenaufgang gefunden:

06:20 - http://www.wetter.com/deutschland/frankfurt/DE0002989.html
06:19 - http://www.wetter.de/deutschland/wetter-frankfurt-18221009/wetterbericht-aktuell.html
06:18 - http://www.sonnenaufgang-sonnenuntergang.de/?resulting=1&e=1&location=Frankfurt am Main&longitude=8.6821267&latitude=50.1109221
06:18:45 - http://openweathermap.org/data/2.5/weather?q=Frankfurt&mode=xml&units=metric&lang=de

Man kann noch so genau rechnen: Wenn die Eingangsdaten in den Berechnungen nicht stimmen, kann auch nichts Genaues bei heraus kommen. Städte und Gemeinden sind ja größer als nur ein paar Quadratmeter. Sie dehnen sich einige Kilometer in allen Richtungen aus. Da kommt es darauf an, welche Werte man für die geographische Koordinaten nimmt. Nimmt man die Werte für das Rathaus, für die Stadtmitte, für die Altstadt, für den Flughafen oder sonst was?

Edit1: Bei der Abfrage kurz vor 03:00 Uhr lieferte openweathermap.org als Wert 06:20:15

Für mich persönlich sind Werte +/- 5 Minuten vollkommen in Ordnung.


Delete - So 18.08.13 07:13

Sunrise/Sunset Algorithm

Source:
Almanac for Computers, 1990
published by Nautical Almanac Office
United States Naval Observatory
Washington, DC 20392

Inputs:
day, month, year: date of sunrise/sunset
latitude, longitude: location for sunrise/sunset
zenith: Sun's zenith for sunrise/sunset
offical = 90 degrees 50'
civil = 96 degrees
nautical = 102 degrees
astronomical = 108 degrees

NOTE: longitude is positive for East and negative for West
NOTE: the algorithm assumes the use of a calculator with the
trig functions in "degree" (rather than "radian") mode. Most
programming languages assume radian arguments, requiring back
and forth convertions. The factor is 180/pi. So, for instance,
the equation RA = atan(0.91764 * tan(L)) would be coded as RA
= (180/pi)*atan(0.91764 * tan((pi/180)*L)) to give a degree
answer with a degree input for L.


1. first calculate the day of the year

N1 = floor(275 * month / 9)
N2 = floor((month + 9) / 12)
N3 = (1 + floor((year - 4 * floor(year / 4) + 2) / 3))
N = N1 - (N2 * N3) + day - 30

2. convert the longitude to hour value and calculate an approximate time

lngHour = longitude / 15

if rising time is desired:
t = N + ((6 - lngHour) / 24)
if setting time is desired:
t = N + ((18 - lngHour) / 24)

3. calculate the Sun's mean anomaly

M = (0.9856 * t) - 3.289

4. calculate the Sun's true longitude

L = M + (1.916 * sin(M)) + (0.020 * sin(2 * M)) + 282.634
NOTE: L potentially needs to be adjusted into the range [0,360) by adding/subtracting 360

5a. calculate the Sun's right ascension

RA = atan(0.91764 * tan(L))
NOTE: RA potentially needs to be adjusted into the range [0,360) by adding/subtracting 360

5b. right ascension value needs to be in the same quadrant as L

Lquadrant = (floor( L/90)) * 90
RAquadrant = (floor(RA/90)) * 90
RA = RA + (Lquadrant - RAquadrant)

5c. right ascension value needs to be converted into hours

RA = RA / 15

6. calculate the Sun's declination

sinDec = 0.39782 * sin(L)
cosDec = cos(asin(sinDec))

7a. calculate the Sun's local hour angle

cosH = (cos(zenith) - (sinDec * sin(latitude))) / (cosDec * cos(latitude))

if (cosH > 1)
the sun never rises on this location (on the specified date)
if (cosH < -1)
the sun never sets on this location (on the specified date)

7b. finish calculating H and convert into hours

if if rising time is desired:
H = 360 - acos(cosH)
if setting time is desired:
H = acos(cosH)

H = H / 15

8. calculate local mean time of rising/setting

T = H + RA - (0.06571 * t) - 6.622

9. adjust back to UTC

UT = T - lngHour
NOTE: UT potentially needs to be adjusted into the range [0,24) by adding/subtracting 24

10. convert UT value to local time zone of latitude/longitude

localT = UT + localOffset


http://williams.best.vwh.net/sunrise_sunset_algorithm.htm


Mathematiker - So 18.08.13 09:12

Hallo,
user profile iconhathor hat folgendes geschrieben Zum zitierten Posting springen:
... http://williams.best.vwh.net/sunrise_sunset_algorithm.htm

Ich habe in der Revision 18 die Berechnung mit der Unit Moon gegen die von Dir angegebene Methode ausgetauscht. Dadurch wird die Exe wieder kleiner und die Genauigkeit ist gut.

Außerdem gebe ich die Zeiten jetzt in MEZ bzw. MESZ an.

Beste Grüße
Mathematiker


Mathematiker - Mo 19.08.13 07:39

Hallo,
da ich nun wieder "Kinderlein" bespaßen darf, habe ich das Programm heute in unserem Schulnetz testen wollen.
Und wie zu erwarten: es funktioniert nicht! :evil:

Nach einiger Zeit kommt die Fehlermeldung:
Zitat:
Socket Error #10060
Connection times out

Was ist denn das ? Ich habe keine Ahnung (eigentlich von dem ganzen Netzzeugs). Weiß jemand von Euch Rat?
In der EE habe ich schon gefunden:
Zitat:
Error #10060:
Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne nicht ordnungsgemäß reagiert hat, oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host nicht reagiert hat.

Verstehe ich nicht, da es außerhalb des Schulnetzes funktioniert.

Beste Grüße
Mathematiker


Nersgatt - Mo 19.08.13 07:51

Wie ist die Internetverbindung bei euch in der Schule realisiert? Habt ihr einen Proxy?
Funktioniert es, wenn Du die URL in die Adressleiste eines Browsers eingibst?

Die Fehlermeldung sagt eigentlich nur aus, dass der Server nicht erreich werden konnte. Warum das so ist, kann viele Gründe haben.


Delete - Mo 19.08.13 07:51

Kann man beliebige Internetseiten mit einem beliebigen Browser empfangen?
Vielleicht sind Internet-Ports blockiert.


Mathematiker - Mo 19.08.13 08:18

Hallo,
das Aufrufen der Seite von Openweathermap im Browser funktioniert, ebenso aus dem Programm heraus

Delphi-Quelltext
1:
    ShellExecute(Handle, 'open''http://openweathermap.org'nilnil, SW_SHOWNORMAL) ;                    

Was nicht funktioniert sind alle Rufe mit

Delphi-Quelltext
1:
IdHttp1.Get                    

egal, ob OpenweatherMap oder die ZDF-Wetterkarten. Im 1.Fall kommt noch die Fehlermeldung, bei den ZDF.Karten gar keine Reaktion.
Kann es sein, dass Indy 10 sich mit unserem Windows XP nicht verträgt?
Wenn unser Netz-Guru da ist, werde ich ihn erst einmal fragen, ob es spezielle Einstellungen gibt. Vielleicht ist es auch die zentrale Überwachungsstelle(!).
In Chemnitz werden alle Netzverbindungen inkl. EMails aus den Schulen überwacht und viele, der Stadt unliebsame Internetseiten blockiert.

Beste Grüße
Mathematiker

Nachtrag: Bei uns läuft ein Proxy-Server, d.h. es kann so nicht funktionieren.


Nersgatt - Mo 19.08.13 08:26

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Nachtrag: Bei uns läuft ein Proxy-Server, d.h. es kann so nicht funktionieren.

Ist ja nicht weiter schlimm, nur ein wenig mehr Aufwand. Auch Indy kann mit Proxyserver umgehen.


Mathematiker - Mo 19.08.13 11:38

Hallo,
ich habe mal etwas gelesen und auch die EE durchwühlt.
Da ich es jetzt nicht prüfen kann (bin wieder zu Hause), ob es so einigermaßen korrekt ist, stochere ich einfach nur im Trüben.
Habe ich es richtig verstanden, dass die nachfolgenden ersten 5 Zeilen, natürlich mit den entsprechenden Parametern, schon genügen

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
    IdHttp1.ProxyParams.ProxyServer := proxyadresse;
    IdHttp1.ProxyParams.ProxyPort := proxyport;
    IdHttp1.ProxyParams.ProxyUsername := username;
    IdHttp1.ProxyParams.ProxyPassword := userpasswort;
    IdHttp1.ProxyParams.BasicAuthentication := true;   //<-- wirklich notwendig, mitunter fehlt es ???

    Mem := TMemoryStream.Create;
    try
      IdHttp1.Get(Adresse, Mem);
      if Idhttp1.ResponseCode = 200 then // 200 = okay
      begin
... usw.

um den Proxy-Server zur Arbeit zu bewegen?

Beste Grüße
Mathematiker


Delete - Mo 19.08.13 16:48

IdHTTP zickt herum, wenn man Files mit der Endung JPG downloaden will.

Folgender Code funktioniert bei mir:

(Für den Zielort braucht man natürlich die Schreibberechtigung!)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
//Ereignis in IdHTTP1 aktivieren
procedure TForm1.IdHTTP1Connected(Sender: TObject);
begin
Windows.Beep(800,200); //macht Beep...
end;

procedure TForm1.Button22Click(Sender: TObject);
begin
  GetUrlToFile('http://wwwdyn.zdf.de/ext/weather/temp-brd-3.jpg','D:\temp-brd-3.jpg');
end;

procedure TForm1.GetUrlToFile(AURL, AFile : String);
  var Output : TMemoryStream;
  begin
IdHTTP1.HTTPOptions:= [hoKeepOrigProtocol,hoForceEncodeParams];  //WICHTIG!!!------------------------
    Output := TMemoryStream.Create;
    try
      try
       IdHTTP1.Get(AURL, Output);
       IdHTTP1.Disconnect;
      except
//was man will...
      end;
      Output.SaveToFile(AFile);
    finally
      Output.Free;
    end;
  end;


Mathematiker - Mo 19.08.13 23:37

Hallo,
user profile iconhathor hat folgendes geschrieben Zum zitierten Posting springen:
IdHTTP zickt herum, wenn man Files mit der Endung JPG downloaden will.

Das ist erstaunlich und scheinbar das erste Mal, dass bei mir etwas einfach funktioniert, was bei anderen nicht klappt.
Ich sehe mir auf jeden Fall Deinen Vorschlag an. Noch verstehe ich nicht alles, wird aber noch.

Beste Grüße
Mathematiker


Delete - Mo 19.08.13 23:56

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Meeus ist der "Guru" der rechnenden Astronomie. Ohne ihn geht kaum etwas. Seine Algorithmen sind das Beste, das in den letzten Jahrzehnten zu astronomischen Problemen veröffentlicht wurde. Deshalb ist sein Buch "Astronomische Algorithmen" Mangelware, das antiquarisch hohe Preise erzielt.

Beim Buchversender mit dem großen A gibt's eine deutsche Übersetzung von 1992 für 28 Euro. Das englischsprachige Original kostet dagegen 58 Euro. Finde ich nicht besonders astronomisch, die Preise ...


Mathematiker - Di 20.08.13 00:12

Hallo,
user profile iconPerlsau hat folgendes geschrieben Zum zitierten Posting springen:
Beim Buchversender mit dem großen A gibt's eine deutsche Übersetzung von 1992 für 28 Euro. Das englischsprachige Original kostet dagegen 58 Euro.

Die 28 € sind Glück; es ist ja auch ein Verkauf "Gebraucht" und außerdem die erste Veröffentlichung. Der Verkäufer weiß nicht, was er verlangen kann. :wink:
Die englische Ausgabe ist interessant, da überarbeitet. Habe ich aber schon. Hatte ich noch nicht bei A... gesehen.

Übrigens: Das dort in einer Rezension erwähnte Montenbruck/Pfleger "Astronomie mit dem Personal Computer" ist ebenfalls hervorragend. Dort habe ich sogar eine Beschreibung des Gaußschen Verfahrens zur Ephemeridenbestimmung aus wenigen Beobachtungen eines Planetoiden gefunden.

user profile iconPerlsau hat folgendes geschrieben Zum zitierten Posting springen:
Finde ich nicht besonders astronomisch, die Preise ...

Stimmt schon. Ich rechne aber "intern" immer noch mit DM und 115 DM für ein Buch sind schon ganz schön hoch ...
Ich weiß schon, bald ist das normal. :wink:

Beste Grüße
Mathematiker


Delete - Di 20.08.13 00:23

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Ich rechne aber "intern" immer noch mit DM ...

Sollte man sich abgewöhnen, das verdirbt einem nur die Stimmung :P


Mathematiker - Mi 21.08.13 13:47

Hallo,
ich habe heute getestet, ob das Programm nun auch bei einem Proxy-Server läuft. Und es funktioniert.
In der Revision 19 ist die Lösung enthalten.

Startet man das Programm als Administrator, so gibt es im Teilmenu "Bearbeiten" den Punkt "Proxy-Einstellung". Dort kann man die Adresse und den Port des Proxy-Servers eintragen. Beides wird in den Einstellungen gespeichert.
Als Anwender muss man seinen Nutzername und das Passwort eintragen, und dann funktioniert es. Jedenfalls klappt es in meinem Schulnetzwerk.
Trägt man unter der Adresse nichts ein, geht das Programm davon aus, dass die Internetverbindung "normal" aufgebaut wird.

Und wie das immer ist: Hat man ein Problem gelöst, ergeben sich sofort neue.
Als nächstes werde ich versuchen, das Programm automatisch prüfen zu lassen, ob ein Proxy-Server vorliegt und wenn ja, wie man ebenso automatisch Adresse und Port abfragen kann.

Ein Frage habe ich aber, die ich mir nicht beantworten kann.
Nehmen mir an, 25 meiner Lieblinge rufen das Weltwetter auf, so sind das schon 25 * 40 = 1000 Anfragen bei OpenWeatherMap. Mein Problem nun, sind es wirklich 1000 oder werden die von 25 verschiedenen Computern über den einen Proxy-Server gehenden Anfragen als jeweils 40 von verschiedenen Nutzern gezählt?

Nebenbei habe ich erst einmal die Abfrage der ZDF-Wetterkarten aus dem Programm wieder herausgenommen. Es gefällt mir nicht richtig.

Beste Grüße
Mathematiker


Nersgatt - Mi 21.08.13 13:58

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Mein Problem nun, sind es wirklich 1000 oder werden die von 25 verschiedenen Computern über den einen Proxy-Server gehenden Anfragen als jeweils 40 von verschiedenen Nutzern gezählt?

Ich glaube nicht, dass man das allgemeingültig beantworten kann. Da müsste man mal in den Logs vom Proxy gucken, in wieweit der Proxy der Meinung ist, die Daten "frisch" vom Server abholen zu müssen.
Ansonsten musst Du eine eigene Zwischenschicht einbauen, einen eigenen Proxy sozusagen. Der läuft auf einem Server (bzw. einem PC, den man als Server deklariert). Die Client rufen nun die Wetterdaten nicht mehr direkt ab, sondern beim Server. Der Server holt die Daten dann von OpenWeathermap und speichert sie lokal zwischen. Ruft ein anderer Client die selben Daten ab, kann der Server entscheiden, dass er die Daten nicht erneut abholen muss, sondern den Client vom lokalen Cache bedienen kann.
Man muss natürlich eine Logik einbauen, wann der Server seinen lokalen Cache verwirft, und die Daten neu von OpenWeathermap abholt. So hast Du die völlige Kontrolle über die Anzahl der Abrufen in der Schule. Die Änderungen am Client sind eher marginal. Die Herausforderung wäre hier den Server zu schaffen (der aus Sicht von Openweathermap natürlich ein Client ist).


Mathematiker - Mi 21.08.13 14:10

Hallo,
und danke für die schnelle Antwort. Lese ich ...
user profile iconNersgatt hat folgendes geschrieben Zum zitierten Posting springen:
Die Herausforderung wäre hier den Server zu schaffen (der aus Sicht von Openweathermap natürlich ein Client ist).

wird es mir leicht unwohl. Dafür werde ich wohl noch eine Menge lernen müssen.

Für mein Problem, die Existenz des Proxy-Servers zu testen, habe ich bei der "Konkurrenz", die aber nicht so gut ist wie die EE :!: , als Lösung
http://www.delphipraxis.net/19756-proxy-server-einstellungen-des-ie-abfragen.html
gefunden. Sieht ziemlich gut aus und morgen erfolgt gleich der Test im Netzwerk.

Beste Grüße
Mathematiker


Nersgatt - Mi 21.08.13 14:23

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Lese ich ...
user profile iconNersgatt hat folgendes geschrieben Zum zitierten Posting springen:
Die Herausforderung wäre hier den Server zu schaffen (der aus Sicht von Openweathermap natürlich ein Client ist).

wird es mir leicht unwohl. Dafür werde ich wohl noch eine Menge lernen müssen.

Im Prinzip ist das ja nur ein HTTP-Server. Dafür bringt Indy die Klasse TIdHttp mit. Ich würde mal behaupten, der Lernaufwand ist nicht viel größer, als er beim Client war. Und die Herbstferien kommen bestimmt. :D


Delete - Mi 21.08.13 16:33

From Switzerland:
...Proxy Server Einstellungen des IE abfragen:
http://www.swissdelphicenter.ch/de/showcode.php?id=2110


Mathematiker - Do 22.08.13 12:16

Hallo,
user profile iconhathor hat folgendes geschrieben Zum zitierten Posting springen:
http://www.swissdelphicenter.ch/de/showcode.php?id=2110

Danke. Die Lösung ist ähnlich zu der, die ich in der DP gefunden habe.

In Revision 20 wird nun der evtl. vorhandene Proxy-Server automatisch erkannt und dessen Parameter übernommen.

Beste Grüße
Mathematiker


Marc. - So 08.09.13 14:31

Moin! Noch ein paar Anregungen meinerseits, damit Dir ja nicht langweilig wird :D.

Aktuell wird das Wetter für im 3h Abstand vorausgesagt und untereinander bzw. nebeneinander in Spalten dargestellt.
Übersichtlicher wäre es, wenn man noch zusätzlich die Anordnung dahingehend ändern könnte, dass das Wetter für den jeweiligen Tag in einer eigenen Spalte angezeigt wird.
So wie es normalerweise auch üblich ist.

Angenommen ich bin auf Reise oder wohne nicht in Deutschland: Da ist es verdammt blöd, die Zeitverschiebung ständig einzurechnen.
Könntest Du in den Programmoptionen die Zeitzone einstellen lassen? Und Standardmäßig die vom System eingestellte verwenden?

Wetterabfragen: Beim Klick auf auf einer der Abfragebutton sendest Du jeweils eine Anfrage an den Wetter-Server. Das ist unnötig, denn die Wetterdaten ändern sich nicht sekündlich oder minütlich.
Eventuell speicherst Du in einer "temporären" Datei die letzten Wetterdaten mit Zeitstempel ab und wenn diese nicht zu alt sind, lädst Du diese stattdessen.
So wird dann auch der Wechsel bei der Anzeige zwischen "Weltwetter" und "Internetabfrage" beschleunigt und es spart Traffic.

Ein Edit-Feld, um den Städtename einzugeben, wobei während der Eingabe bereits gefilert wird.
Zwar springt bei der blinden Eingabe in die Listebox der Index schon zum korrekten Begriff, doch ab und an vertippt man sich und es wird nicht der gesuchte Eintrag ausgewählt. Existiert dieser Eintrag nicht? Wird er anders geschrieben? Hat man sich vertippt?

Favoriten in der Städteauswahl, die stets ganz oben stehen. Zwar wird immer der letzte Ort bereits gespeichert vor dem Schließen des Programmes, aber wenn ich mir mehrere Orte wichtig sind, ist es doch bequemer, diese nicht stets erst suchen zu müssen.

Was spricht gegen ein Reinzoomen in die Karte durch Scrollen?

Hint beim Mouseover über einen Punkt auf der Karte, der den Namen der Stadt anzeigt.
Selbiges beim Weltwetter. Eventuell könnte man hier die Zeitzonen noch eintragen.

Hint mit Beschreibung beim Mouseover über die Kurven.


Ich denke das reicht erstmal. :)


Mathematiker - So 08.09.13 22:11

Hallo,
Danke für die vielen Anregungen. Ein paar habe ich schon umgesetzt (Revision 21), bei den anderen dauert es noch etwas.
user profile iconMarc. hat folgendes geschrieben Zum zitierten Posting springen:
Beim Klick auf auf einer der Abfragebutton sendest Du jeweils eine Anfrage an den Wetter-Server. Das ist unnötig, denn die Wetterdaten ändern sich nicht sekündlich oder minütlich.

Vollkommen richtig. Deshalb werden die Daten jetzt auch gespeichert. Nach einer Abfrage wird frühestens 10 Minuten später wieder das Internet bemüht.
Damit geht jetz auch ansatzweise
user profile iconMarc. hat folgendes geschrieben Zum zitierten Posting springen:
Was spricht gegen ein Reinzoomen in die Karte durch Scrollen?

Zwar muss man im Moment immer noch die zwei kleinen Schalter nutzen. Es funktioniert jetzt aber auch bei der Weltwetterkarte.

Alles andere, wie schon oben gesagt, sehe ich mir auch noch an.
Im Quelltext befindet sich jetzt

Delphi-Quelltext
1:
{$DEFINE EEVARIANTE}                    

Bitte nicht löschen, da nur dann korrekt compiliert werden kann. Die andere Variante ist meine "interne".

user profile iconMarc. hat folgendes geschrieben Zum zitierten Posting springen:
... damit Dir ja nicht langweilig wird :D.

Langweilig? So etwas kenne ich nicht. :wink:
Durch meinen Kopf schwirren schon wieder viele neue Sachen, aber die Zeit dafür müsste man haben.
Ich bin nur in der EE etwas ruhiger, da ich nicht gleich wieder jemandem "auf den Schlips treten" möchte. :(

Beste Grüße
Mathematiker


hansa - Mo 09.09.13 19:36

Wollte mir den Quelltext auch mal ansehen. Habe das ganze deshalb versucht zu compilieren. Da wird aber die Datei grundx.* nicht gefunden. Wo kommt die her ? In der Zip ist sie jedenfalls nicht drin.


Mathematiker - Mo 09.09.13 20:35

Hallo,
user profile iconhansa hat folgendes geschrieben Zum zitierten Posting springen:
Wollte mir den Quelltext auch mal ansehen. Habe das ganze deshalb versucht zu compilieren. Da wird aber die Datei grundx.* nicht gefunden.

Fehler meinerseits. :autsch: Tut mir leid.
In der Unit uwetter2 wird die grundx.* nur gerufen, wenn keine EEVARIANTE compiliert. In der *.dpr einfach löschen.

Beste Grüße
Mathematiker


hansa - Mo 09.09.13 21:41

Die Kerle hier die gucken sich nicht mal den Quelltext an ? tsts :mrgreen: Aber egal, das compiliert jetzt. Allerdings, der Quelltext ist ja auch ellenlang. Wo werden die von idHTTP gelieferten Ergebnisse denn ans Programm übergeben ? Bei 2000 Zeilen ist das echt auf die Schnelle nicht einfach zu finden. Habe das Ganze mal (sehr) stark verkürzt :


Delphi-Quelltext
1:
2:
3:
4:
  IdHttp1.Get(Adresse);
  if Idhttp1.ResponseCode <> 200 then  // 200 = okay
    ShowMessage('Fehler beim Abruf der Wetterdaten!');
  IdHTTP1.free;


Bis dahin kommt zumindest keine Fehlermeldung. Die Koordinaten habe ich dabei fest eincodiert, nur, wie komme ich jetzt an das Ergebnis ?


Mathematiker - Mo 09.09.13 22:03

Hallo,
der wesentliche Teil der Internetabfrage ist z.B. für die 2-Tages-Vorschau eines Ortes

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
  IdHTTP1:=tidhttp.create;
  Adresse := 'http://openweathermap.org/data/2.5/forecast?'
             + 'lat='
             + edit9.text   //Breite
             + '&lon='
             + edit8.text   //Länge
             + '&mode=xml'
             + '&units=metric'
             + '&lang=de';
  Mem := TMemoryStream.Create;  //zur Aufnahme des XML-Textes
  try
    IdHttp1.Get(Adresse, Mem);  //Abfrage  
    mem.savetofile('daten.000');  //<--- nur wichtig um die gelieferten Daten auf der Festplatte zu parken
    if Idhttp1.ResponseCode = 200 then // 200 = okay
    begin
      mem.position:=0;
      liste.LoadFromStream(Mem);  //Einladen in eine TStringlist
    end
  finally
    Mem.Free;
  end;
  IdHTTP1.free;

Da mein Delphi 5 noch kein XML kennt, muss ich dann die Daten in liste Stück für Stück auseinandernehmen und auswerten.

Beste Grüße
Mathematiker


Marc. - Mo 09.09.13 22:24

Ich wollte Dein Programm auch noch einmal kompilieren, allerdings hat sich mittlerweile der Name und die Parameterreihenfolge einer funktioniert geändert.
So kompiliert er nun den Quelltext auch für neuere Delphi-Versionen [http://docwiki.embarcadero.com/RADStudio/XE4/de/Compiler-Versionen] (ab 2009):

Delphi-Quelltext
 
348:
349:
350:
351:
352:
353:
354:
{ ... }
      {$IFDEF CONDITIONALEXPRESSIONS}
        {$IF CompilerVersion >= 20.0}
          ZDecompress(InpBuf, sz, OutBuf, OutBytes, 0);
        {$ELSE}
          DecompressBuf(InpBuf, sz, 0, OutBuf, OutBytes);
        {$IFEND}
      {$ENDIF}


Einen anderen Fehler betrifft

Delphi-Quelltext
 
1265:
{ ... }
mem.savetofile(datenverzeichnis+'wert.v2');

Dein Programm erzeugt zwar einen Ordner Namens "C", allerdings ist dieser Schreibgeschützt und ich erhalte die Fehlermeldung "Zugriff verweigert". :nixweiss:
Das betrifft allerdings nur die von mir kompilierte Variante. Ich kann auch einen anderen Pfad hardcoden, der funktioniert dann.

Zitat:
Ich bin nur in der EE etwas ruhiger, da ich nicht gleich wieder jemandem "auf den Schlips treten" möchte. :(

Wem bist Du denn jeweils auf den Schlips getreten? Ich sehe jedenfalls Deine Aktivitäten hier als Bereicherung der EE. ;)


Mathematiker - Mo 09.09.13 22:55

Hallo,
user profile iconMarc. hat folgendes geschrieben Zum zitierten Posting springen:
So kompiliert er nun den Quelltext auch für neuere Delphi-Versionen [http://docwiki.embarcadero.com/RADStudio/XE4/de/Compiler-Versionen] (ab 2009):

Delphi-Quelltext
 
348:
349:
350:
351:
352:
353:
354:
{ ... }
      {$IFDEF CONDITIONALEXPRESSIONS}
        {$IF CompilerVersion >= 20.0}
          ZDecompress(InpBuf, sz, OutBuf, OutBytes, 0);
        {$ELSE}
          DecompressBuf(InpBuf, sz, 0, OutBuf, OutBytes);
        {$IFEND}
      {$ENDIF}


Danke, werde ich einbauen.
user profile iconMarc. hat folgendes geschrieben Zum zitierten Posting springen:
Einen anderen Fehler betrifft

Delphi-Quelltext
 
1265:
{ ... }
mem.savetofile(datenverzeichnis+'wert.v2');

Dein Programm erzeugt zwar einen Ordner Namens "C", allerdings ist dieser Schreibgeschützt und ich erhalte die Fehlermeldung "Zugriff verweigert".

Hier habe ich die Vermutung, dass die modernen Delphi mit

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
function GetWinSpecialFolder(CSIDLFolder: integer): AnsiString;
begin
    SetLength(Result, MAX_PATH);
    SHGetSpecialFolderPath(0, PChar(Result), CSIDLFolder, false);
    SetLength(Result, StrLen(PChar(Result)));
    if (Result <> ''then
      Result := IncludeTrailingBackslash(Result);
end;

function  datenverzeichnissuchen:string; <-- hier vielleicht besser ansistring ???
begin
{$IFNDEF EEVARIANTE}
    result := IncludeTrailingBackslash(GetWinSpecialFolder(CSIDL_APPDATA)+aktuellname2);
{$ELSE}
    result := IncludeTrailingBackslash(GetWinSpecialFolder(CSIDL_APPDATA)+'Wetterdaten');
{$ENDIF}
end;

nicht zurechtkommen. Vielleicht muss es ansistring heißen?
Bei meinem Win 8 wird im Nutzerverzeichnis der Ordner ...\Roaming\Wetterdaten angelegt und die Daten dorthin kopiert.
Allerdings habe ich von dieser Problematik wenig Ahnung und eigentlich nur übernommen, was ich bei anderen gesehen habe.

user profile iconMarc. hat folgendes geschrieben Zum zitierten Posting springen:
Wem bist Du denn jeweils auf den Schlips getreten?

Ist schon ein paar Tage her.

Beste Grüße
Mathematiker


Marc. - Mo 09.09.13 23:03

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
nicht zurechtkommen. Vielleicht muss es ansistring heißen?
Nein, ich hab den Fehler gefunden:


Delphi-Quelltext
 
317:
{ ... }
function GetWinSpecialFolder(CSIDLFolder: integer): String;
Hier muss es ein (Unicode)String, statt einem AnsiString sein.


hansa - Di 10.09.13 00:07

Habe vorhin in der Dokumentation gesehen, das man man dem Get doch besser einen Stream mitgeben muss. Mich hat das "Mem" irritiert, weil ich dachte das wäre ein TMemo ( ist aber ein Stream). @Mathematiker : Du benutzt kein CNPack, oder ? Da kann man Standard-Prefixe für Komponenten vorgeben. Dann wird automatisch ein Vorschlag erzeugt.


Marc. - Do 12.09.13 15:48

Du hast beim Merken des letzten abgefragten Orts vor dem Schließen Aachen ausgeschlossen. :bawling:
Der erste Eintrag der Listbox beginnt bei 0, nicht bei 1:

Delphi-Quelltext
 
1384:
{ ... }
if sel >= 0 then


Mathematiker - Do 12.09.13 16:52

Hallo,
user profile iconMarc. hat folgendes geschrieben Zum zitierten Posting springen:
Du hast beim Merken des letzten abgefragten Orts vor dem Schließen Aachen ausgeschlossen. :bawling:

Danke für den Hinweis.
In der Revision 22 habe ich diesen und ein paar weitere Fehler entfernt.

Beste Grüße
Mathematiker


Mathematiker - Fr 13.09.13 19:00

Hallo,
Openweathermap hat heute ein paar Übermittlungsprobleme bei der 14-Tage-Vorschau. Für einige Orte gibt's "nur" für 10 Tage Wetterwerte.
Dieses Problem hatte ich noch nicht abgefangen; mit dem Ergebnis eines Programmabsturzes.
In der Revision 23 ist dies jetzt auch ok.

Beste Grüße
Mathematiker


Anika - So 29.09.13 00:25

Das Programm gefällt mir sehr.
Aber seit ein paar Tagen bekomme ich bei dem aktuellen Wetter immer eine Fehlermeldung und kein ergebnis.
Was kann das sein?

Liebe Grüße
Anika


Mathematiker - So 29.09.13 08:40

Hallo,
user profile iconAnika hat folgendes geschrieben Zum zitierten Posting springen:
Aber seit ein paar Tagen bekomme ich bei dem aktuellen Wetter immer eine Fehlermeldung und kein ergebnis.

Danke für den Hinweis.
Da ich es selbst gar nicht mehr probiert habe, habe ich es natürlich nicht gemerkt. :autsch:

Openweathermap übermittelt seit einiger(?) Zeit für die 2-Tage-Vorhersage maximal 16 Datensätze, mitunter werden auch einige Uhrzeiten übersprungen. Da ich das nicht berücksichtigt hatte, kam es zur fehlerhaften Auswertung.
Die langfristige Vorhersage ist jetzt auch "nur" noch 10 Tage lang, was auch vernünftiger ist, da niemand 2 Wochen Wetter vorherberechnen kann.
Bei der Abfrage des Weltwetters übermitteln manchmal einzelne Stationen keine Werte. Zum Beispiel zeigte mein Programm für die Sahara 0° Celsius? Es kann in der Wüste zwar sehr kalt werden, aber die 0° ergaben sich, da der Datensatz leer war, also Blödsinn.

Alle diese Probleme glaube ich in Revision 24 gelöst zu haben.

Übrigens gibt es eine weitere, positive Änderung bei Openweathermap. Man kann jetzt kostenlos aller 5 Sekunden die Daten abfragen. Dennoch belasse ich es erst einmal bei minimal 10 Minuten, bevor die Daten neu geladen werden.

Mit besten Grüßen
Mathematiker


Mathematiker - So 26.01.14 00:09

Seit heute übermittelt OpenWeatherMap einige Temperaturwerte, aber nicht alle und ohne spezielle Kennzeichnung, in Kelvin und nicht in °Celsius.
Das Problem ist in Version 25 jetzt abgefangen.

Beste Grüße
Mathematiker


Horst_H - Mi 15.08.18 10:11

Hallo,

ich war gerade beim löschen alter Dateien :oops: , da testete ich nochmals das Programm.
Es hat sich was geändert, es gab Fehler 401 irgendeine appID würde fehlen.
Mal für London von den Beispielen dort:
"http://samples.openweathermap.org/data/2.5/weather?id=2172797&appid=b6907d289e10d714a6e88b30761fae22"
Ohne Eröffnung eines Kontos geht es wohl nicht mehr
https://openweathermap.org/appid
16 Tage gibt es kostenlos auch nicht mehr, aber das ist ohnehin geraten :-)
https://openweathermap.org/price

Gruß Horst