Wetterstation: Blitzortung mit Trilateration – wie ich Blitze geolokalisiere

Seit 2024 erfasse ich auf wetter.havelsee.de nicht nur Temperatur, Wind und Regen, sondern auch Blitzereignisse – lokal und in Echtzeit. Dazu verwende ich vier WH57-Sensoren von Fine Offset (FOSHK), jeweils installiert an meinen Wetterstationen in Havelsee.

Welche Daten werden erfasst?

Jede Station erkennt elektromagnetische Impulse eines Blitzes und berechnet daraus die geschätzte Entfernung zum Einschlagsort. Die Koordinaten jeder Station sind natürlich bekannt – schließlich betreibe ich sie selbst. Ich weiß also:

  • wo die Station steht (Breiten- und Längengrad)
  • und wie weit sie vom Blitz entfernt war

Diese Information allein reicht nicht zur Ortung. Aber wenn mindestens drei Stationen denselben Blitz erkennen, kann ich mit diesen Entfernungen eine Trilateration durchführen – also den Punkt bestimmen, an dem sich alle Entfernungskreise schneiden. Dort liegt der Blitz.

So funktioniert die Berechnung im Hintergrund

Ich habe dafür eine kleine Funktion in PHP geschrieben. Sie nimmt ein Array mit den Positionen und gemessenen Entfernungen der Stationen und berechnet daraus die wahrscheinlichste Einschlagsposition – basierend auf einer Least-Squares-Optimierung im Umkreis aller Stationen.

PHP-Code zur Positionsberechnung


/**
 * Berechnet die geschätzte Position eines Blitzeinschlags
 * anhand von mindestens drei Blitzstationen mit Entfernungsmessung.
 *
 * @param array $positions Einträge mit ['lat' => Breite, 'lon' => Länge, 'distance' => Entfernung in km]
 * @return array ['lat' => Breite, 'lon' => Länge] – berechneter Mittelpunkt
 */
function calculate_lightning_position(array $positions): array {
    $count = count($positions);

    if ($count < 3) {
        throw new InvalidArgumentException("Mindestens drei Stationen erforderlich für Trilateration.");
    }

    // Startwert: geografischer Mittelwert
    $lat0 = array_sum(array_column($positions, 'lat')) / $count;
    $lon0 = array_sum(array_column($positions, 'lon')) / $count;

    // Fehlerfunktion zur Optimierung
    $leastSquaresError = function (float $lat, float $lon) use ($positions): float {
        $sum = 0.0;
        foreach ($positions as $pos) {
            $calcDist = haversine_distance($lat, $lon, $pos['lat'], $pos['lon']);
            $measDist = $pos['distance'];
            $sum += pow($calcDist - $measDist, 2);
        }
        return $sum;
    };

    $step = 0.001;  // Rasterweite (ca. 100 m)
    $range = 0.1;   // ± ca. 11 km

    $minError = INF;
    $bestLat = $lat0;
    $bestLon = $lon0;

    // Rasterbasierte Brute-Force-Suche
    for ($lat = $lat0 - $range; $lat <= $lat0 + $range; $lat += $step) {
        for ($lon = $lon0 - $range; $lon <= $lon0 + $range; $lon += $step) {
            $error = $leastSquaresError($lat, $lon);
            if ($error < $minError) { $minError = $error; $bestLat = $lat; $bestLon = $lon; } } } return ['lat' => $bestLat, 'lon' => $bestLon];
}

/**
 * Berechnet die Distanz zwischen zwei Koordinaten auf einer Kugeloberfläche.
 *
 * @param float $lat1, $lon1 – Koordinaten Punkt A
 * @param float $lat2, $lon2 – Koordinaten Punkt B
 * @return float Entfernung in Kilometern
 */
function haversine_distance(float $lat1, float $lon1, float $lat2, float $lon2): float {
    $earthRadius = 6371.0; // km

    $dLat = deg2rad($lat2 - $lat1);
    $dLon = deg2rad($lon2 - $lon1);

    $a = sin($dLat / 2) ** 2 +
         cos(deg2rad($lat1)) * cos(deg2rad($lat2)) *
         sin($dLon / 2) ** 2;

    $c = 2 * atan2(sqrt($a), sqrt(1 - $a));

    return $earthRadius * $c;
}

Was auf der Karte dargestellt wird

Auf meiner Blitzkarte unter wetter.havelsee.de werden alle Blitze angezeigt, deren Position berechnet werden konnte. Voraussetzung dafür ist, wie oben beschrieben, dass der Blitz zeitgleich von mindestens drei Stationen erfasst wurde.

Warum ich das mache

Ich möchte zeigen, dass man auch mit erschwinglicher, zuverlässiger Technik lokal aussagekräftige Wetterdaten sammeln und auswerten kann – unabhängig, datenschutzfreundlich und ohne Cloud-Zwang. Die Blitzortung ist ein spannender Baustein, der aus reinen Zahlen echte Information macht.

Wer Fragen hat, eigene Ideen oder Interesse an der Technik: einfach melden.

0 0 votes
Article Rating
Abonnieren
Benachrichtige mich bei
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x