Frühlingsanfang Forsythien blühen

Hallo Leute,

ich habe eine Frage, ich möchte gerne das array nach der Jahreszahl durchsuchen (2018) und wenn ja eine Variable auf true setzten. Mir fehlt leider der zündende Gedanke hier mein Script mit der Ausgabe:

<?

//$zeichenkette = file_get_contents("ftp://ftp-cdc.dwd.de/pub/CDC/observations_germany/phenology/immediate_reporters/wild/recent/PH_Sofortmelder_Wildwachsende_Pflanze_Forsythie_akt.txt");
$suchmuster = '7786';

$zeilen=file("ftp://ftp-cdc.dwd.de/pub/CDC/observations_germany/phenology/immediate_reporters/wild/recent/PH_Sofortmelder_Wildwachsende_Pflanze_Forsythie_akt.txt"); // file( ) liefert dir die Zeilen schon in einem Array .. 
$ausgabe=array();
foreach($zeilen as $zeile) {
   if (strpos($zeile,$suchmuster)!==FALSE) // FALSE hieße nicht gefunden 
      $ausgabe[]=$zeile;
}
// jetzt sind in $ausgabe alle Zeilen , die dein Wort enthalten
for($i=0;$i<count($ausgabe);$i++)
  echo $ausgabe[$i];


?>

Ausgabe:

    7786;          2015;              7;              109;              5;       20150324;                1;     83;eor;                                                                            
    7786;          2016;              7;              109;              5;       20160402;                1;     92;eor;                                                                            
    7786;          2017;              1;              109;              5;       20170328;                1;     87;eor;                                                                            

LG Izack


<?
//$zeichenkette = file_get_contents("ftp://ftp-cdc.dwd.de/pub/CDC/observations_germany/phenology/immediate_reporters/wild/recent/PH_Sofortmelder_Wildwachsende_Pflanze_Forsythie_akt.txt");
$suchmuster = '7786';
$jahr= '2015'; /* manuelle Angabe des Jahres */
//$jahr= date('Y'); /* aktuelle Jahreszahl benutzen*/


$zeilen=file("ftp://ftp-cdc.dwd.de/pub/CDC/observations_germany/phenology/immediate_reporters/wild/recent/PH_Sofortmelder_Wildwachsende_Pflanze_Forsythie_akt.txt"); // file( ) liefert dir die Zeilen schon in einem Array .. 
$ausgabe=array();
foreach($zeilen as $zeile) {
   if (strpos($zeile,$suchmuster)!==FALSE) // FALSE hieße nicht gefunden 
      $ausgabe[]=$zeile;
}
// jetzt sind in $ausgabe alle Zeilen , die dein Wort enthalten
for($i=0;$i<count($ausgabe);$i++)
  {
    //echo $ausgabe[$i];
  if(strpos($ausgabe[$i],$jahr)){
     echo "Das Blühen der Forsythien hat begonnen ";
     }
  }
?> 

Vielleicht hilft das für den nächsten Schritt.

super vielen Dank für deine Hilfe

LG Izack

… hatte mich mal interessiert - das kam dabei raus:


// Geographische  Breite / - Länge
$latitude = 53.7333;
$longitude = 10.2667;


// Phaenologie Stationen in nächster Umgebung 0.5 Grad Abweichung in alle Richtungen
$GeoAbweichung = 0.5;

$tabelle = file("ftp://ftp-cdc.dwd.de/pub/CDC/help/PH_Beschreibung_Phaenologie_Stationen_Sofortmelder.txt");
  
$stationen=array();

foreach($tabelle as $zeile) {
      $geographBreite = floatval(substr($zeile,60,7));
	  $geographLaenge = floatval(substr($zeile,74,7));
      if ($geographBreite > ($latitude-$GeoAbweichung) and $geographBreite < ($latitude+$GeoAbweichung)  and $geographLaenge < $longitude+$GeoAbweichung and $geographLaenge > $longitude-$GeoAbweichung){ 
	      $stationen[substr($zeile,0,5)] = array("Stationsname" => substr($zeile,12,43),
		                                         "geograph.Breite" => substr($zeile,60,7),
												 "geograph.Laenge" => substr($zeile,74,7),
												 "Stationshoehe" => substr($zeile,89,5),
												 "Naturraumgruppe_Code" => substr($zeile,100,2), 
												 "Naturraumgruppe" => substr($zeile,103,80),
												 "Naturraum_Code" => substr($zeile,184,4),
												 "Naturraum" => substr($zeile,189,80),   
												 "Datum Stationsaufloesung" => substr($zeile,270,23),
												 "Bundesland" => substr($zeile,294,40),
		                                        );
		  }
	}
 print_r($stationen); 
 

Das ist ja voll cool… Danke, wenn das dieses Jahr funktioniert, ist das für andere User bestimmt interessant. Beste Indikator für den Winterreifenwechsel :slight_smile:

Danke Dir

LG Izack

Ich hab das noch etwas erweiter. Da doch einige Klicks auf dem Eintrag sind, stelle ich das einfach mal rein.

Es sind einige nicht mehr aktive Stationen in der Tabelle, diese werden nun rausgefilter (Datum Stationsaufloesung !== emty).
Die Höhenlage ist auch ganz interessant.
Vermutlich sind auch in der Tabelle nicht für jedes Jahr Einträge, obwohl die Stationen aktiv sind.
Hier das Ergebnis, wenn man den Beginn der Blütezeit aus dem vergangenen Jahr anzeigen lässt:

Anzahl Stationen im Geo-Bereich : 78
davon noch aktiv :22
Helm ( 60 m ) : 20170324 5-Blüte Beginn <<< Die Blüte hat begonnen
Salzwedel (Ph) ( 23 m ) : 20150324 5-Blüte Beginn
Salzwedel (Ph) ( 23 m ) : 20160401 5-Blüte Beginn
Salzwedel (Ph) ( 23 m ) : 20170324 5-Blüte Beginn <<< Die Blüte hat begonnen
Penkefitz (Ph) ( 12 m ) : 20160401 5-Blüte Beginn
Penkefitz (Ph) ( 12 m ) : 20170326 5-Blüte Beginn <<< Die Blüte hat begonnen
Westermarkelsdorf (Ph) ( 3 m ) : 20150402 5-Blüte Beginn
Westermarkelsdorf (Ph) ( 3 m ) : 20160406 5-Blüte Beginn
Westermarkelsdorf (Ph) ( 3 m ) : 20170403 5-Blüte Beginn <<< Die Blüte hat begonnen
Anzahl durchsuchter Tabelleneinträge: 1062


<?
// Geographische  Breite / - Länge
 $latitude = 53.7333;
 $longitude = 10.2667;

 $jahr= intval(date('Y')-1); /* vergangenes Jaht benutzen*/
//    $jahr= intval(date('Y')); /* aktuelle Jahreszahl benutzen*/

// Phaenologie Stationen in nächster Umgebung 0.9 Grad Abweichung in alle Richtungen
   $GeoAbweichung = 0.9;
 
   $tabelle = file("ftp://ftp-cdc.dwd.de/pub/CDC/help/PH_Beschreibung_Phaenologie_Stationen_Sofortmelder.txt");
  
$stationen=array();
foreach($tabelle as $zeile) {
      $geographBreite = floatval(substr($zeile,60,7));
	  $geographLaenge = floatval(substr($zeile,74,7));
      if ($geographBreite > ($latitude-$GeoAbweichung) and $geographBreite < ($latitude+$GeoAbweichung)  and $geographLaenge < $longitude+$GeoAbweichung and $geographLaenge > $longitude-$GeoAbweichung){ 
	      $stationen[substr($zeile,0,5)] = array("Stations_id"  => substr($zeile,0,5),
		                                         "Stationsname" => substr($zeile,12,43),
		                                         "geograph.Breite" => substr($zeile,60,7),
												 "geograph.Laenge" => substr($zeile,74,7),
												 "Stationshoehe" => substr($zeile,89,5),
												 "Naturraumgruppe_Code" => substr($zeile,100,2), 
												 "Naturraumgruppe" => substr($zeile,103,80),
												 "Naturraum_Code" => substr($zeile,184,4),
												 "Naturraum" => substr($zeile,189,80),   
												 "Datum Stationsaufloesung" => substr($zeile,270,23),
												 "Bundesland" => substr($zeile,294,40),
		                                        );
		  }
	}
	$aktiv = 0;
	foreach($stationen as $value)
	 {
	  if(substr($value['Datum Stationsaufloesung'],0,2) === '  '){$aktiv++;}
	  };
	echo "Anzahl Stationen im Geo-Bereich : ".count($stationen)."
davon noch aktiv :".$aktiv."
";
	// print_r($stationen);
	
$PhasDefTbl = file("ftp://ftp-cdc.dwd.de/pub/CDC/observations_germany/phenology/immediate_reporters/wild/recent/PH_Beschreibung_Phasendefinition_Sofortmelder_Wildwachsende_Pflanze.txt");
//print_r($PhasDefTbl);
$i=0;
foreach($PhasDefTbl as $PhasDeflin) 
       { //echo $PhasDeflin;
	     if($i > 0){
        $ObjDef[intval(substr($PhasDeflin,9,3))] =array( "Objekt_id" => intval(substr($PhasDeflin,9,3)),
                        "Objekt"    => substr($PhasDeflin,13,20),
		                 );
        $PhasDef[intval(substr($PhasDeflin,102,2))] =array("Phasen_id" => intval(substr($PhasDeflin,102,2)),
                        "Phase" => substr($PhasDeflin,105,32),
						"Phasendefinition" => substr($PhasDeflin,146,200)
		                );
				    }
			$i=$i+1;		 
         }
		  //unset($ObjDef[';Ob']); // Kopfzeile löschen
          unset($ObjDef[0]); // Fußzeile = Leerzeile löschen
		  //unset($PhasDef[' ' ]); // Kopfzeile löschen
          unset($PhasDef[0]); // Fußzeile = Leerzeile löschen
		  ksort($PhasDef);
		// print_r($ObjDef);
		// print_r($PhasDef);	

$lines=file("ftp://ftp-cdc.dwd.de/pub/CDC/observations_germany/phenology/immediate_reporters/wild/recent/PH_Sofortmelder_Wildwachsende_Pflanze_Forsythie_akt.txt"); // file( ) liefert dir die Zeilen schon in einem Array .. 

//print_r($lines);

$ausgabe=array();

foreach($lines as $line) 
   {
    $ausgabe[]= array("Stations_id" => intval(substr($line,7,5 )), 
                      "Referenzjahr" => intval(substr($line,23,4 )),
                      "Qualitaetsniveau" => substr($line,41,2  ), 
                      "Objekt_id" => substr($line,57,4  ), 
                      "Phase_id" => substr($line,75,2  ),
                      "Eintrittsdatum" => substr($line,85,8  ),
                      "Eintrittsdatum_QB" => substr($line,110,1), 
                      "Jultag" => substr($line,116,3  )
                      );

 
    }
 unset($ausgabe[0]); // Kopfzeile löschen
 unset($ausgabe[count($ausgabe)]); // Fußzeile = Leerzeile löschen

/* Ausgabe: */ 
 foreach($ausgabe as $value){

  if(array_key_exists($value['Stations_id'], $stationen ))
  { 
    
	echo trim($stationen[$value['Stations_id']]['Stationsname'])." ( ".$stationen[$value['Stations_id']]['Stationshoehe']."m ) : ".$value['Eintrittsdatum']." ".$value['Phase_id']."-".$PhasDef[intval($value['Phase_id'])]['Phase'];
		
	if ($value['Referenzjahr'] === $jahr)
	   {
	    Echo " <<< Die Blüte hat begonnen"."
";
	    }
		else
		{echo "
";}
	// print_r($value); 
   }
  } 

echo "Anzahl durchsuchter Tabelleneinträge: ".count($ausgabe)."
";
 // print_r($ausgabe);
  
?> 

Sehr nettes Skript und genau zur richtigen Zeit! Schade, dass es so viele Stationen niht mehr gibt und das im Zeitalter der Internet-Dings-Bums-Dinge :wink:

Was macht Ihr jetzt mit der Berechnung? Visualisierung auf ner Landkarte, Ausgabe als Mail? Einfach nur so nice to have?
Ich erinnere mich an so eine Kartendarstellung, auf der dann die jeweilige Station in Grün (mit einem netten Kreisdurchmesser) markiert wurde und so „der Einzug des Frühlings“ sichtbar wurde. Weis aber nicht mehr wo ich das gesehen habe.

Übrigens:
bei 48° nördlicher Breite hat ein Radius von 0.5° eine Ausdehnung von ca. 55 km
bei 9° östlicher Länge hat ein Radius von 0.5° eine Ausdehnung von ca. 23 km
macht also eine quadratische Fläche von ca. 5.100 km²

Bei mir sind da in den letzten drei Jahren noch 12 Stationen aktiv gewesen.

Im Sommer könnte man so die Ernte visualisieren und im Herbst den Laubabwurf.

im Herbst den Laubabwurf

geht bei mir auch ohne inet, meine analogen Fenster :smiley:

häää??? Kannste die auch zoomen und ne neue View reindrücken?
Echte Welt - wa?

Kirsch- und Apfelblüte und -ernte habe ich auch mal ausgewertet, da hier in meiner Region größere Anbauflächen vorhanden sind. Was wann blüht sehe ich selbst wenn ich aus dem Fenster schaue. Das niedrigere Regionen früher blühen als höhere Lagen ist bekannt.
Es ist einfach nur eine Statistik. Ich kann für mich jetzt keinen Gewinn daraus ziehen.
Sorry, ich mache hier nicht weiter.

Klaus,

das ist ja der Hammer. Danke

PS: in Mitte Deutschland blühen schon Zwei :slight_smile: