Seite 3 von 7

Re: Windrose grafisch programmieren?

Verfasst: 08 Feb 2023, 22:53
von Wetterfrosch
Ich glaube ich habs hinbekommen, muss das jetzt aber gerade mal durchtesten.

ok, damit klappt es:

Code: Alles auswählen

<?php
// Header setzten
header('Content-type: image/png');
 
$wind = '45.png';	 
 
// Bilder laden

$imgzeichen = imagecreatefrompng("runway.png"); 
$imgzeichen1 = imagecreatefrompng($wind); 

// Bilder erzeugen

$w = imagesx($imgzeichen);  
$h = imagesy($imgzeichen);
$img = imagecreatetruecolor($w,$h); 

$w1 = imagesx($imgzeichen1);  
$h1 = imagesy($imgzeichen1);


$dest_x = $w - $w1;
$dest_y = $h - $h1;

$x = $dest_x/2;
$y = $dest_y/2;

// Runway und Windpfeil in Bild einfügen

imagecopy($img, $imgzeichen, 0, 0, 0, 0, $w, $h); 
imagecopy($img, $imgzeichen1, $x, $y, 0, 0, $w1, $h1); 

// Bild anzeigen
imagepng($img);

// Speicher freigeben
imagedestroy($img); 

?>

Re: Windrose grafisch programmieren?

Verfasst: 08 Feb 2023, 23:51
von Wetterfrosch
Sodele, mit Script aus vorherigem Post klappt die Positionierung des Pfeil.

jetzt folgt Schritt 2:

Wie kann ich am Elegantesten nun über die vorliegende Variable
$windrichtung
die als Zahlenwert von 0-360 vorliegt darüber nun immer den entsprechenden Windpfeil zuordnen (in 22,5° Schritten)?

Hatte ja Anfangs an so etwas gedacht:

Code: Alles auswählen

if($windrichtung >= 350 && $windrichtung < 11)
{$wind = '0.png';}
if($windrichtung >= 11 && < $windrichtung < 33)
{$wind = '22.png';}
if($windrichtung >= 33 && $windrichtung < 56)
{$wind = '45.png';}
usw.
das ist aber augenscheinlich ziemlich umständlich, das geht doch sicherlich eleganter, oder?

Re: Windrose grafisch programmieren?

Verfasst: 09 Feb 2023, 00:14
von olicat
Moin,

ein Array waere da wohl wieder das Mittel der Wahl:

Code: Alles auswählen

<?php
  $windrichtung = 190;
  $array = array("N.png","N-NO.png","NO.png","O-NO.png","O.png","O-SO.png", "SO.png", "S-SO.png","S.png","S-SW.png","SW.png","W-SW.png","W.png","W-NW.png","NW.png","N-NW.png");
  $val = intval((floatval($windrichtung)/22.5)+.5);
  $wind = $array[($val % 16)];
  echo $wind;
?>
Ich habs jetzt nicht gross getestet - nur aus der Python-Vorlage uebernommen.

Oliver

Re: Windrose grafisch programmieren?

Verfasst: 09 Feb 2023, 01:23
von Wetterfrosch
@Oli

funktioniert einwandfrei, Danke.

Der Prototyp sieht jetzt mal so aus (sollte für die Ansicht auf dem Smartphoe zugeschnitten sein):
https://wetterstation-badenweiler.de/MLV.php

Re: Windrose grafisch programmieren?

Verfasst: 09 Feb 2023, 14:35
von olicat
Hi!

Das sieht doch gut aus!
Vielleicht solltest Du noch einen automatischen Refresh einbauen. Ich nutze dazu meist innerhalb des head:

Code: Alles auswählen

  <meta http-equiv="refresh" content="30" />
Und ich persoenlich wuerde wohl Datum/Zeit zentriert in der Zeile anzeigen. Aber das ist sicherlich eine Frage des Geschmacks.

Ansonsten waere es natuerlich auch hilfreich, irgendwo einen Hinweis zu sehen, dass die angezeigten Daten tatsaechilch aktuell sind.
Auf manchen Seiten hat man da einen "atmenden" gruenen Punkt oder Aehnliches.
Nur, damit man nicht aus Versehen beim Betrachten einer "alten" Seite von falschen Voraussetzungen ausgeht.

Oliver

Re: Windrose grafisch programmieren?

Verfasst: 09 Feb 2023, 22:36
von Wetterfrosch
Hi Oli,

der obere Teil kann ich nicht beeinflussen, dazu habe ich einfach das fertige Wetterwidget von Awekas über meine Grafik eingebaut.

Das mit dem refresh ist eine gute Idee, werde ich mal versuchen einzubauen und das mit dem grünen blinkenden Punkt auch, hast du mir diesbezüglich einen Lösungsvorschlag, wie man das umsetzen kann?
Woher weiß ich, welche Aktuallität der Grafik der Betrachter gerade sieht?
Über welchen Parameter kann ich dann eine Vergleichsoption zum aktuellen Timestamp einrichten?

Update:
@Oli
Schau dir mal meine Test-Version an:
www.wetterstation-badenweiler.de/MLV1.php

Ich vergleiche den Änderungszeitpunkt der Datei, in der der aktuelle Windrichtungswert abgelegt wird mit dem aktuellen Timestamp.
Ist diese Datei älter als z.B. 5 Minuten, dann wird Datenstatus "ERROR" ausgegeben.

Aber damit kontrolliere ich ja nur, ob die datei in der der aktuelle Windrichtungswert liegt auch aktuell ist, doch wenn aus irgendwelchen Umständen der betrachter die Seite in einem alten Zustand betrachtet, so wird sich ja auch mein Status-Button nicht ändern und dem Betrachter suggestieren, die Daten wären aktuell.

Deswegen muss wohl doch irgendwie deine Blinke-Lösung her, denn nur wenn man eine aktuelle Seite betrachtet, dann blinkt es, doch wie man das macht, da habe ich keine Ahnung und weiß auch nicht unter welchen Schlagworten ich im netz danach suchen soll.

Re: Windrose grafisch programmieren?

Verfasst: 10 Feb 2023, 08:06
von wk893b
Hallo,

herzlichen Glückwunsch zum schnellen Fortschritt des Projekts. :thumbup:

Leider gibt es da einen nicht unerheblichen Wermutstropfen.
Ich weiß nicht, ob das schon aufgefallen ist?
Unter bestimmten Bedingungen zeigt der Pfeil in der Grafik nicht die korrekte Windrichtung an, sondern je nach dem, eine Position links oder rechts davon.
Das scheint mit der Berechnung der Variablen $val im array zusammen zuhängen.

Rundungsdifferenzen bei Nachkommenstellen sorgen hin und wieder für einen falschen Wert.
Normalerweise wird z. B. 0,444 ja abgerundet und 0,555 aufgerundet.
Für die Berechnung des korrekten Wertes für die Anzeige, müsste diese Logik aber manchmal umgekehrt werden.
D.h. 0,444 müsste aufgerundet und 0,555 abgerundet werden, um entsprechende Verwerfungen zu vermeiden.

Ich habe diesen Umstand in Excel getestet.
Es ist leider so, wie oben beschrieben.
Ob es dafür eine einfache Lösung gibt?

Re: Windrose grafisch programmieren?

Verfasst: 10 Feb 2023, 08:39
von olicat
Hi wk893b,

ich kann Dir nicht ganz folgen. Vielleicht stellst Du mal Deine Excel-Tabelle zur Verfügung.
Hast Du beachtet, dass eine Rundung gar nicht stattfindet sondern intval nur den ganzzahligen Teil uebernimmt?

@Wetterfrosch:
Sofern das automatische Refresh greift, sollte das doch kein Problem sein?

Oder fehlt mir schlicht noch ein Kaffee heute morgen?

Oliver

Re: Windrose grafisch programmieren?

Verfasst: 10 Feb 2023, 10:03
von wk893b
Hallo Oli,

das mit intval hab ich gesehen, aber die falschen Schlüsse gezogen.
Deshalb pausiere ich in dem Punkt erst mal und halte die Exceltabelle vorerst zurück.

Aber sieh dir bitte das Bild von gestern an.
Das hat sich trotz mehrfachem Seitenrefresh im Browser weiter so gezeigt.
Die Uhrzeit oben im Bild wurde durch die Refreshs jedoch aktualisiert.
Zwischendrin war die Anzeige wieder korrekt.
Trotzdem sind solche Verwerfungen in unregelmäßigen Abständen immer wieder aufgetreten.

Also falls es eine logische Erklärung dafür gibt und ich erst noch einen Kaffee brauchen sollte,
gebe ich mich gerne geschlagen. :-K

Bild

Re: Windrose grafisch programmieren?

Verfasst: 10 Feb 2023, 10:10
von Wetterfrosch
@wk893b

die logische Erklärung ist ganz einfach:
meine Windgrafik hat 16 Teileinheiten, die Anzeige im Awekas-Widget (welches ich über die Grafik gebaut habe) hat nur 8 Teileinheiten.

Um diesen Schönheitsfehler zu korrigieren, müsste ich das Wetterwidget von Awekas wieder ausbauen und stattdessen selber meine Messwerte noch über die Windgrafik einbauen, ob ich das aber optisch so gut hinbekomme, ist fraglich.

Hatte das im Vorfeld mal versucht, doch wenn ich da statt dem Awekas-Widget selber noch einen "Kasten" über die Windgrafik baue (analog zu dem Status-Kasten unter der Windgrafik), dann verhaut es mir die Ansicht auf dem Handy, d.h. die Anzeige wird plötzlich viel zu klein, da sie dann nur noch für PC optimiert ist.
Auch wenn ich das Awekas-Widget über iframe einbinde wird die Anzeige zu klein, doch über einen Trick habe ich es geschafft, die Anzeige auf den Handybildschirm einigermaßen anzupassen, denn über diese Einbindung des Awekas-Widget, wird wieder alles groß:

Code: Alles auswählen

<?php

	$_url1 = "https://widget.awekas.at/widget2.php?id=25936&lng=de&uni=c&wuni=km&rad=0&bg=#178bcf1a&co=#000000ff&bo=#b9b9b9ff";

    $_buffer1 = implode('', file($_url1));
    echo $_buffer1;
	
?>	
nehme ich diesen Teil wieder raus, dann schrumpft alles auf dem Handy wieder zusammen.
Ich habe programmiertechnisch echt kaum Ahnung und weiß nicht, wie ich das alles, wenn ich es selber programiere, auf den Handybildschirm angepasst bekomme?


@Oli
Naja, mit meiner aktuellen Lösung zeigt der "Online-Button" ja nur an, dass der Windrichtungswert, der angezeigt wird, aktuell ist, nehmen wir aber mal an, dass das refresh nicht ausgeführt werde, und ich eine alte Seitenversion aufrufen, dann würde da trotzdem stehen, dass die Station online ist, obwohl der angezeigte Wert völlig veraltet ist.