ZURZEIT IN ENTWICKLUNG!

GNavigia/Gina

His­to­ri­sche Wet­ter­da­ten

Wet­ter­da­ten und Kon­fi­gu­ra­ti­on

Es ist ei­ne net­te Ges­te, wenn die An­zei­ge ei­nes Tracks von ei­ner Wet­ter­an­ga­be be­glei­tet wird. Un­ter dem Be­griff «his­to­ri­sche Wet­ter­da­ten» ver­ste­hen wir al­le Da­ten, die von ges­tern stam­men oder äl­ter sind. Ei­ni­ge Da­ten rei­chen über 100 Jah­re zu­rück.


Die Da­ten­ba­sis

Mit Stand 2020 bie­tet die Adres­se me­teo­stat his­to­ri­sche Da­ten deut­scher und in­ter­na­tio­na­ler Wet­ter­diens­te und Wet­ter­sta­tio­nen, im De­tail auf­ge­lis­tet in me­teo­stat Sources. GNavigia kann die­se Da­ten aus­le­sen und an­zei­gen so­wie ei­nem be­stimm­ten Track zu­ord­nen. Die Da­ten wer­den be­zo­gen auf ei­ne Wet­t­er­sta­ti­on über ein JSON-API ge­lie­fert, das die Ei­gen­schaf­ten der Sta­tion so­wie die Da­ten­sät­ze für ei­nen Tag ("Dai­ly") und stünd­li­che Da­ten ("Hour­ly") lie­fert. Die­ser Ser­vice ist nur für pri­va­ten Ge­brauch frei­ge­ge­ben. Die Nut­zung er­for­dert ei­ne An­mel­dung, die ei­nen Schlüs­sel (API-Key) lie­fert, sie­he die zu­ge­hö­ri­ge Be­schrei­bung. Oh­ne die­sen Schlüs­sel kön­nen kei­ne Da­ten ab­ge­fragt wer­den. Er muss von je­dem Be­nut­zer, der den Dienst nut­zen will, an­ge­for­dert und für den Ge­brauch in GNavigia kon­fi­gu­riert wer­den.

Schlüs­sel und Ca­che

Wer das Pro­gramm kennt weiß, dass GNavigia dar­auf be­dacht ist, den Traf­fic auf frem­den Ser­vern klein zu hal­ten. Da­her er­for­dert die Nut­zung der Funk­tio­na­li­tät au­ßer dem Schlüs­sel auch ei­nen Ca­che für die an­ge­frag­ten Da­ten. Le­gen Sie hier­zu ei­ne Um­ge­bungs­va­ria­ble (am bes­ten im Sys­tem) an mit fol­gen­den An­ga­ben:

GNAVIGIA_METEOSTAT=C:\Cache\Meteostat;????????

Da­rin ist GNAVIGIA_METEOSTAT der Na­me der Va­ria­blen und C:\Ca­che\Me­teo­stat;???????? der aus zwei Tei­len be­ste­hen­de Aus­druck. Die­ser weist vor dem Se­mi­co­lon den voll­stän­di­gen Pfad­na­men für das Ca­che-Ver­zeich­nis aus und da­nach den API-Schlüs­sel, den Sie per E-Mail er­hal­ten ha­ben. Wie man ei­ne Sys­tem­va­ria­ble setzt, kön­nen Sie un­ter un­se­ren Sys­tem­tipps im Netz nach­le­sen. Un­ter Win­dows 10 tip­pen Sie "Um­ge­bungs­va­ria­ble" in die Su­che ein und fol­gen der Be­nut­zer­füh­rung.

Der Schlüs­sel ist pri­vat und soll­te nicht leicht­fer­tig wei­ter­ge­ge­ben wer­den. Die An­fra­gen an den Ser­ver wer­den in der Log-Datei pro­to­kol­liert. Da­bei wird der Schlüs­sel in Ver­sion 1 mit «********» über­schrie­ben, in der API-Ver­si­on 2 ist er nicht mehr Be­stand­teil der URL.

Es ist ei­ne Be­son­der­heit der Ver­sion 2, dass nur zwei Auf­ru­fe pro Se­kun­de ab­ge­setzt wer­den dür­fen. Es ist auch kei­nes­wegs so, dass nach 5 Se­kun­den ein Durch­schnitt ge­bil­det wird, son­dern die Zu­grif­fe wer­den un­mit­tel­bar ge­zählt. Da­bei scheint es zu­dem Pro­ble­me mit dem Zäh­len zu ge­ben, denn trotz mei­ner In­ter­ven­ti­on und ei­ner Än­de­rung bei Me­teo­stat gibt es im­mer wie­der Si­tua­tio­nen, die ich mit ei­nem er­neu­ten Auf­set­zen des Auf­rufs be­han­deln muss, ob­gleich zwi­schen zwei Auf­ru­fen min­des­tens 0,5 Se­kun­den lie­gen. Das führt zu ei­ner si­gni­fi­kan­ten Ver­lang­sa­mung der Ab­ru­fe der Wet­ter­da­ten, wenn man die Da­ten für ei­nen Track er­mit­teln lässt. Hier ist ein­fach Ge­duld ge­fragt. Ei­ne Fort­schritts­an­zei­ge ist an­ge­dacht.

Wet­ter­da­ten er­mit­teln

Die Er­mitt­lung der Wet­ter­da­ten er­folgt ent­we­der über das Me­nü oder über das Ver­wal­tungs­fens­ter. Ha­ben Sie ei­nen Schlüs­sel an­ge­for­dert, die Um­ge­bungs­va­ria­ble kor­rekt ge­setzt und exis­tiert das Ca­che-Ver­zeich­nis, se­hen Sie im Ver­wal­tungs­fens­ter den Rei­ter «Wet­ter». Im Me­nü er­scheint un­ter «Be­ar­bei­ten/Track» der Menü­punkt «Wet­ter­da­ten». Des­sen Ak­tio­nen wir­ken auf al­le aus­ge­wähl­ten Tracks. Voraus­set­zung ist, dass al­le nicht ge­lösch­ten Track­punk­te ei­ne Uhr­zeit auf­wei­sen. Ha­ben Sie his­to­ri­sche Rei­sen di­gi­ta­li­siert, kön­nen Sie über die Funk­ti­on «Zeit be­ar­bei­ten/Track­punk­te oh­ne Zeit­an­ga­be in­ter­po­lie­ren» Zei­ten er­mit­teln. Für Fahr­rä­der, Wan­de­rer und an­de­re, sich gleich­för­mig be­we­gen­de Ob­jek­te passt die In­ter­po­la­ti­on recht gut.

Der Rei­ter «Wet­ter»

Ak­ti­viert man im Ver­wal­tungs­fens­ter den Rei­ter «Wet­ter», er­scheint fol­gen­de Dar­stel­lung:


Da­rin sind das Da­tum und die An­ga­be der La­ge für ei­ne Ab­fra­ge er­for­der­lich. Sind al­le drei Fel­der be­legt, wird die Schalt­flä­che «Wet­ter­sta­tio­nen su­chen» sen­si­tiv. Man kann die Fel­der auch durch die Aus­wahl von Track­punk­ten be­le­gen. Klickt man auf ei­nen Track, wer­den ent­spre­chend des Fan­gra­di­us' au­ßer dem Track auch ei­ni­ge Track­punk­te se­lek­tiert. Das gilt auch, wenn auf­grund der Ein­stel­lung für die De­tail­an­zei­ge nur der Track selbst dar­ge­stellt wird. Im Pro­fil­fens­ter wer­den die ak­tu­ell se­lek­tier­ten Track­punk­te an­ge­zeigt. Ein Klick auf die Schalt­flä­che «Da­tum und La­ge aus Aus­wahl» über­nimmt Wer­te in die An­zei­ge, so­fern der Ab­stand zwi­schen den äu­ßers­ten Punk­ten 50 km nicht über­schrei­tet und das Da­tum ein­deu­tig ist.

Al­ter­na­tiv wählt man das Da­tum aus dem Ka­len­der aus oder trägt es di­rekt in das Ein­ga­be­feld ein. Län­ge und Brei­te kön­nen ent­we­der ein­ge­tra­gen oder aus­ge­wählt wer­den. Die Schalt­flä­che «Aus Kar­te» ak­ti­viert ei­nen Aus­wahl­zei­ger, mit dem man in die Kar­te kli­cken kann. «Orts­lis­te...» er­laubt ei­ne Aus­wahl nach Orts- oder Städ­te­na­men und die Schalt­flä­che «ID...» nach dem Iden­ti­fi­ka­tor der Wet­t­er­sta­ti­on. Das Er­geb­nis der Su­che nach Iden­ti­fi­ka­tor wird un­mit­tel­bar in die Sta­ti­ons­lis­te über­nom­men und die Fel­der für Län­ge und Brei­te wer­den da­bei aus­nahms­wei­se auf vier Nach­kom­mas­tel­len aus­ge­füllt. Ist das Da­tum gül­tig, wird die Su­che nach Wet­ter­da­ten so­fort durch­ge­führt und in die An­zei­ge über­tra­gen.

Bei al­len an­de­ren Suchan­fra­gen wer­den zu­nächst die fünf nächst­ge­le­ge­nen Sta­tio­nen er­mit­telt und in die Sta­ti­ons­lis­te ein­ge­tra­gen. Um die Wet­ter­da­ten zu er­mit­teln, ist ein Klick in die Lis­te der Sta­tio­nen er­for­der­lich. Bei je­dem Klick auf ei­ne Sta­tion wird das ak­tu­el­le Da­tum be­rück­sich­tigt, das sich al­so zwi­schen zwei Klicks än­dern kann. Das Er­geb­nis der An­fra­ge wird im Ca­che ab­ge­legt, so­dass man mun­ter in der Lis­te hin- und herkli­cken kann. Der Ca­che wird nach Sta­tio­nen ge­glie­dert. Je­de Da­tei wird mit ei­nem Da­tum ver­se­hen, das den Zeit­punkt der Ab­fra­ge fest­hält. Da ei­ni­ge Sta­tio­nen mit großem Zeit­ver­satz in der Da­ten­bank ak­tua­li­siert wer­den, wer­den Da­tei­en, die kei­ne Da­ten bein­hal­ten und äl­ter sind als ei­ne Wo­che, ge­löscht und es wird ei­ne neue An­fra­ge an die Da­ten­bank ge­stellt.

Der Menü­punkt «Be­ar­bei­ten/Track/Wet­ter­da­ten/Er­mit­teln»

Der Menü­punkt «Be­ar­bei­ten/Track/Wet­ter­da­ten/Er­mit­teln» ist er­reich­bar, wenn ein oder meh­re­re Tracks se­lek­tiert sind. Da es zwar ei­nen «War­te­zei­ger» gibt aber kei­ne Fort­schritts­an­zei­ge, soll­te man nur we­ni­ge Tracks auf ein­mal durch die Er­mitt­lung schi­cken. Ist ge­nau ein Track se­lek­tiert, die Pro­fildar­stel­lung ak­ti­viert und ist un­ter den Op­tio­nen für Pro­fi­le die An­zei­ge der Wet­ter­da­ten und der Zah­len­wer­te ein­ge­schal­tet, wird am obe­ren Pro­fil­rand ein Platz für die An­zei­ge der Wet­ter­sym­bo­le frei­ge­hal­ten. Dort er­schei­nen die Er­geb­nis­se. Bei ge­rin­ger Bild­schirm­brei­te wür­den die stünd­lich er­mit­tel­ten Da­ten schnell in­ein­an­der ver­schwim­men. Da­her ist ei­ne Fest­le­gung von Fa­vo­ri­ten mög­lich, die die­je­ni­gen Er­geb­nis­se be­vor­zugt, die ein ho­hes Ge­wicht er­hal­ten. Zur­zeit gibt es drei Stu­fen:

  • Kein Wert.
  • Ge­wicht 1. Das Ge­wicht darf nicht für zwei auf­ein­an­der­fol­gen­de Stun­den an­ge­ge­ben wer­den, da der Wert er­hal­ten bleibt, wenn nur je­der zwei­te Wert an­ge­zeigt wer­den kann. Über­lap­pen sich dann doch zwei Dar­stel­lun­gen mit dem Ge­wicht 1, bleibt der zu­erst an­ge­zeig­te Wert er­hal­ten.
  • Ge­wicht 2. Das Ge­wicht 2 darf nur ge­nau ein­mal ver­ge­ben wer­den. Die­ser Wert ist der, der an­ge­zeigt wird, wenn nur ein Wert an­ge­zeigt wer­den kann.

Die Gra­fik zeigt die Rad­ver­an­stal­tung Tal-Total 2019, die bei Tem­pe­ra­tu­ren na­he 40°C durch­ge­führt wur­de. Im Frei­raum ober­halb des Ge­län­de­pro­fils sind die Wet­ter­da­ten ein­ge­tra­gen. Im Bild ist die Wind­rich­tung gra­fisch dar­ge­stellt und die Wind­stär­ke durch die Opa­zi­tät an­ge­deu­tet. Die Zah­len­wer­te be­schrei­ben die Wind­stär­ke und die Böen, die zwei­te Gra­fik sym­bo­li­siert den Wet­ter-Code, da­nach fol­gen Tem­pe­ra­tur und Luft­druck. Wer die Ort­schaf­ten kennt, liest aus der Dar­stel­lung, dass der Wind den gan­zen Tag über als Ge­gen­wind auf­trat.

Die er­mit­tel­ten Er­geb­nis­se wer­den mit der Da­tei ge­spei­chert und ste­hen dann auch off­line zur Ver­fü­gung.

Quell­code in C# für Ent­wick­ler

An­ders als von Me­teo­stat do­ku­men­tiert be­nö­tigt man zum Zu­griff auf das API Ver­sion 2 nicht die curl-Biblio­thek. Be­nutzt man die .NET-Biblio­thek, so ist die rot ma­kier­te Zei­le die ein­zi­ge, die ge­gen­über Ver­sion 1 hin­zu­ge­fügt wer­den muss. Die Metho­de JSonToAnsi con­ver­tiert JSON-UTF nach ANSI und macht so die Son­der­zei­chen sicht­bar. Nicht al­le Na­men sind über­setzt. Ei­ni­ge Wet­ter­sta­tio­nen wer­den mit «ue» statt «ü» ge­schrie­ben, ei­ni­ge nicht.

Sprache : C# mit .NET
Fragment:
  HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(request);
  if (httpWebRequest != null)
  {
      httpWebRequest.Headers.Add("x-api-key", m_apiKeyV2);
      WebResponse webResponse = httpWebRequest.GetResponse();
      Stream stream = webResponse.GetResponseStream();
      if (stream != null)
      {
          Encoding encoding = Encoding.GetEncoding((webResponse as HttpWebResponse).CharacterSet);
          StreamReader tr = new StreamReader(stream, encoding, true);
          string s = tr.ReadToEnd();
          stream.Close();
          //
          result = JSonToAnsi(s, encoding);
      }
  }
Methode:
  string JSonToAnsi(string s, Encoding encoding)
  {
      // Create ascii encodings.
      Encoding ascii = Encoding.Default;
      // Der Text enthält statt "\u00f6" "\\u00f6", was nicht als Sonderzeichen erkannt wird.
      MatchCollection matches = Regex.Matches(s, @"\\u.{4}");
      Hashtable hashtable = new Hashtable();
      foreach (Match match in matches)
          if (hashtable[match.Value] == null)
          {
              byte[] b = new byte[1];
              b[0] = byte.Parse(match.Value.Substring(2), NumberStyles.HexNumber);
              s = s.Replace(match.Value, ascii.GetString(b));
              hashtable[match.Value] = 1;
          }
      // Convert the string into a byte array.
      byte[] unicodeBytes = encoding.GetBytes(s);
      // Perform the conversion from one encoding to the other.
      byte[] asciiBytes = Encoding.Convert(encoding, ascii, unicodeBytes);
      // Convert the new byte[] into a char[] and then into a string.
      char[] asciiChars = new char[ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
      ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
      return new string(asciiChars);
  }