Windrose grafisch programmieren?

Für allgemeine Software
Benutzeravatar
Wetterfrosch
Offline
Beiträge: 403
Registriert: 08 Dez 2020, 11:49
Wohnort: 79410 Badenweiler (350mNN) / Breisgau-Hochschwarzwald
Hat sich bedankt: 104 mal
Danksagung erhalten: 32 mal
Kontaktdaten:

Re: Windrose grafisch programmieren?

#21

Beitrag 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); 

?>
Benutzeravatar
Wetterfrosch
Offline
Beiträge: 403
Registriert: 08 Dez 2020, 11:49
Wohnort: 79410 Badenweiler (350mNN) / Breisgau-Hochschwarzwald
Hat sich bedankt: 104 mal
Danksagung erhalten: 32 mal
Kontaktdaten:

Re: Windrose grafisch programmieren?

#22

Beitrag 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?
Benutzeravatar
olicat
Offline
Beiträge: 2003
Registriert: 07 Dez 2020, 20:33
Wohnort: Hohen Neuendorf
Hat sich bedankt: 26 mal
Danksagung erhalten: 411 mal
Kontaktdaten:

Re: Windrose grafisch programmieren?

#23

Beitrag 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
Benutzeravatar
Wetterfrosch
Offline
Beiträge: 403
Registriert: 08 Dez 2020, 11:49
Wohnort: 79410 Badenweiler (350mNN) / Breisgau-Hochschwarzwald
Hat sich bedankt: 104 mal
Danksagung erhalten: 32 mal
Kontaktdaten:

Re: Windrose grafisch programmieren?

#24

Beitrag 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
Benutzeravatar
olicat
Offline
Beiträge: 2003
Registriert: 07 Dez 2020, 20:33
Wohnort: Hohen Neuendorf
Hat sich bedankt: 26 mal
Danksagung erhalten: 411 mal
Kontaktdaten:

Re: Windrose grafisch programmieren?

#25

Beitrag 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
Benutzeravatar
Wetterfrosch
Offline
Beiträge: 403
Registriert: 08 Dez 2020, 11:49
Wohnort: 79410 Badenweiler (350mNN) / Breisgau-Hochschwarzwald
Hat sich bedankt: 104 mal
Danksagung erhalten: 32 mal
Kontaktdaten:

Re: Windrose grafisch programmieren?

#26

Beitrag 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.
wk893b
Offline
Beiträge: 134
Registriert: 23 Jan 2022, 09:13
Danksagung erhalten: 10 mal

Re: Windrose grafisch programmieren?

#27

Beitrag 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?
Viele Grüße

wk893b


https://bh.wetter-alarm.de/
Benutzeravatar
olicat
Offline
Beiträge: 2003
Registriert: 07 Dez 2020, 20:33
Wohnort: Hohen Neuendorf
Hat sich bedankt: 26 mal
Danksagung erhalten: 411 mal
Kontaktdaten:

Re: Windrose grafisch programmieren?

#28

Beitrag 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
wk893b
Offline
Beiträge: 134
Registriert: 23 Jan 2022, 09:13
Danksagung erhalten: 10 mal

Re: Windrose grafisch programmieren?

#29

Beitrag 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
Viele Grüße

wk893b


https://bh.wetter-alarm.de/
Benutzeravatar
Wetterfrosch
Offline
Beiträge: 403
Registriert: 08 Dez 2020, 11:49
Wohnort: 79410 Badenweiler (350mNN) / Breisgau-Hochschwarzwald
Hat sich bedankt: 104 mal
Danksagung erhalten: 32 mal
Kontaktdaten:

Re: Windrose grafisch programmieren?

#30

Beitrag 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.
Antworten