Stand- und Stopzeiten ermitteln

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Stand- und Stopzeiten ermitteln

    Analog zu meinem anderen Forenbeitrag (http://www.php-resource.de/forum/sql...statement.html) habe ich in Sachen Umsetzung mit PHP eine Frage.

    Wie in dem anderen Beitrag beschrieben verwende ich zur Dokumentation meiner Radtouren einen GPS Logger, der im Takt von 1 Sekunde die Koordinaten dokumentiert. Diese werden in Form einer GPX Datei exportiert, ich lasse diese dann per PHP zerlegen und speichere die Werte in einer Datenbank.

    Ich möchte am Ende ähnlich meinem anderen Beitrag eine Auswertung meiner Fahrt- und Stopzeiten sehen, in diesem Falle aber nicht in Form eines Diagrammes sondern als Auflistung. Eine Zeit lang habe ich mir einfach eine Liste ausgeben lassen, in denen jeder Wert auf die GEschwindigkeit untersucht wurde, das Resultat war dann eine Auflistung wie z.B.

    23.08.2012 / 09:00:01 - in Bewegung, Geschwindigkeit: 30 kmh
    23.08.2012 / 09:00:02 - in Bewegung, Geschwindigkeit: 28 kmh
    23.08.2012 / 09:00:03 - in Bewegung, Geschwindigkeit: 32 kmh
    23.08.2012 / 09:00:04 - in Bewegung, Geschwindigkeit: 31 kmh
    23.08.2012 / 09:00:05 - Stop, Geschwindigkeit: 0 kmh
    23.08.2012 / 09:00:06 - Stop, Geschwindigkeit: 0 kmh
    23.08.2012 / 09:00:07 - in Bewegung, Geschwindigkeit: 17 kmh


    Man kann sich vorstellen, dass eine solche Liste bei einem Loggingintervall von 1 Sekunde sehr lang und unübersichtlich sein kann und auch übersichtlich wird.

    Mein Wunschgedanke ist daher eine Auflistung Schema:
    23.08.2012 / 09:00:01 - 23.08.2012 / 09:00:04 in Bewegung
    23.08.2012 / 09:00:05 - 23.08.2012 / 09:00:06 Stopped

    [..]

    Mein Ansatz war daher (grob):

    - Setze ersten Status auf 0 (Stop)

    -> Gebe ersten Status aus ("Fahrrad gestoppt")
    - Hole ersten Geschwindigkeitswert aus DB

    - Wenn erster Status = aktueller Status
    -> Gebe nichts aus

    -- wenn erster Status != aktueller Status
    -> Gebe aus ("Bewegung")


    usw.

    Mein Code im Ansatz (bissi quick and dirty, ich weiß).


    Code:
    $last_state = 1;   
    while($row = mysql_fetch_object($query))
    {
    
    
    $speed = $row->field_5;
    $Zeit =  $row->Zeit;
    $sats =  $row->satellites;  
     
        if($speed > 3)
        {
        $actual_driving_state = 1;
        }
        else
        {
        $actual_driving_state = 0;
        }
        
        
        
        
        
        if(($speed > 3) && ($sats > 6))
        {
        $actual_driving_state = 1;
        
        
                  if($last_state == $actual_driving_state)
                  {
                  //Mache nichts, weil letzter Status = aktueller Status
                        
                  
                  }
                  else
                  {
                  //Schreibe Zeile
                  
                  echo "<br>Gestartet - $Zeit - $speed<hr><br>";
                  
            // Setze neuen Status
                  $last_state       = $actual_driving_state;
                  }
        
        
        
        
        }
        else
        {
        $actual_driving_state = 0;
        
        if($last_state == $actual_driving_state)
        {
        //Mache nichts, weil letzter Status = aktueller Status
              
        
        }
        else
        {
        //Sxhreibe Zeile
        
        echo "Stop $Zeit - ";
        // Setze neuen Status
        $last_state       = $actual_driving_state;
        }
        
        
        
        
        }
        
        
        
        
        
        
        
        if($last_state == $actual_driving_state)
        {
        //Mache nichts, weil letzter Status = aktueller Status
              
        
        }
        else
        {
        //Schreibe Zeile
        
        echo "in bewegung - $speed<br>";
        // Setze neuen Status
        $last_state       = $actual_driving_state;
        }
    //echo $speed . "<br>"; 
    }
    Leider schaffe ich es nicht, die Einträge so auszugeben, dass einfach ein Startzeitraum ausgegeben wird, dann ein Stopzeitraum usw.

    Hat jemand vielleicht einen Denkstubser für mich?

  • #2
    PHP-Code:
    $data = array(
      array(
    'time' => '23.08.2012 / 09:00:01''speed' => 30),
      array(
    'time' => '23.08.2012 / 09:00:02''speed' => 28),
      array(
    'time' => '23.08.2012 / 09:00:03''speed' => 32),
      array(
    'time' => '23.08.2012 / 09:00:04''speed' => 31),
      array(
    'time' => '23.08.2012 / 09:00:05''speed' => 0),
      array(
    'time' => '23.08.2012 / 09:00:06''speed' => 0),
      array(
    'time' => '23.08.2012 / 09:00:07''speed' => 17),
      
    null
    );
    $i 0;

    $prevRow null;
    while(
    $actRow $data[$i++]) { // für Daten aus Datenbank durch fetch-Statement zu ersetzen
      
    if(!$prevRow || ($prevRow['speed'] === 0) != ($actRow['speed'] === 0)) {
        if(
    $prevRow) {
          echo 
    $prevRow['time'] . ($prevRow['speed'] === ' stopped' ' in bewegung') . "\n";
        }
        echo 
    $actRow['time'] . ' - ';
      }
      
    $prevRow $actRow;
    }
    echo 
    $prevRow['time'] . ($prevRow['speed'] === ' stopped' ' in bewegung') . "\n"
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Hi wahsaga,

      klasse, genau so stellte ich mir das vor.

      Nun habe ich das Ergebnis der MySQL Abfrage eingebaut und die Einordnung von Fahrzeiten (Speed > 0) abgeändert.
      Denn oft werden auch im Stillstand Geschwindigkeiten angezeigt (3-7 km/h), die eigentlich nicht real sind, bedingt durch die Schwankungen der Anzahl der Satelliten.

      Nun habe ich zwei neue Probleme:

      a.) tauchen Datensätze auf bei denen Startzeit = Stopzeit
      z.b.:
      24.08.2012-12:15:31 - 24.08.2012-12:15:31 in bewegung

      b.) werden Stopzeiten nicht gruppiert (Bewegungen werden prima gruppiert)
      z.B.:
      24.08.2012-10:48:52 - 24.08.2012-11:46:06 stopped


      Aktuell:

      Code:
      $prevRow = null;
      while($actRow = mysql_fetch_array($query)) { // für Daten aus Datenbank durch fetch-Statement zu ersetzen
        if(!$prevRow || ($prevRow['speed'] > 4) != ($actRow['speed'] > 3)) {
          if($prevRow) {
            echo $prevRow['time'] . ($prevRow['speed'] < 4 ? ' stopped' : ' in bewegung') . "<br>";
          }
          echo $actRow['time'] . ' - ';
        }
        $prevRow = $actRow;
      }
      echo $prevRow['time'] . ($prevRow['speed'] < 4 ? ' stopped' : ' in bewegung') . "\n";

      Hier die Tagesauswertung von gestern:

      24.08.2012-10:48:52 - 24.08.2012-11:46:06 stopped
      24.08.2012-11:46:11 - 24.08.2012-11:49:51 stopped
      24.08.2012-11:49:56 - 24.08.2012-11:52:07 stopped
      24.08.2012-11:52:12 - 24.08.2012-11:52:21 in bewegung
      24.08.2012-11:52:27 - 24.08.2012-11:54:56 stopped
      24.08.2012-11:55:01 - 24.08.2012-11:55:26 stopped
      24.08.2012-11:55:31 - 24.08.2012-12:04:21 in bewegung
      24.08.2012-12:04:26 - 24.08.2012-12:04:49 stopped
      24.08.2012-12:04:54 - 24.08.2012-12:05:14 in bewegung
      24.08.2012-12:05:19 - 24.08.2012-12:05:49 stopped
      24.08.2012-12:05:54 - 24.08.2012-12:06:53 in bewegung
      24.08.2012-12:06:58 - 24.08.2012-12:07:13 stopped
      24.08.2012-12:07:18 - 24.08.2012-12:09:51 in bewegung
      24.08.2012-12:09:56 - 24.08.2012-12:10:26 stopped
      24.08.2012-12:10:31 - 24.08.2012-12:14:51 stopped
      24.08.2012-12:14:56 - 24.08.2012-12:15:00 in bewegung
      24.08.2012-12:15:06 - 24.08.2012-12:15:26 stopped
      24.08.2012-12:15:31 - 24.08.2012-12:15:31 in bewegung
      24.08.2012-12:15:45 - 24.08.2012-13:30:39 stopped
      24.08.2012-13:30:44 - 24.08.2012-13:32:00 in bewegung
      24.08.2012-13:32:06 - 24.08.2012-13:32:36 stopped
      24.08.2012-13:32:41 - 24.08.2012-13:44:50 in bewegung
      24.08.2012-13:44:55 - 24.08.2012-13:48:24 stopped
      24.08.2012-13:48:29 - 24.08.2012-13:53:11 stopped
      24.08.2012-13:53:16 - 24.08.2012-14:03:17 stopped
      24.08.2012-14:03:22 - 24.08.2012-14:03:27 in bewegung
      24.08.2012-14:03:32 - 24.08.2012-14:05:03 stopped
      24.08.2012-14:05:08 - 24.08.2012-14:05:08 in bewegung
      24.08.2012-14:05:14 - 24.08.2012-14:05:14 in bewegung
      24.08.2012-14:05:19 - 24.08.2012-15:05:26 stopped
      24.08.2012-15:05:41 - 24.08.2012-15:06:17 stopped
      24.08.2012-15:06:27 - 24.08.2012-15:28:19 stopped
      24.08.2012-15:28:24 - 24.08.2012-15:29:37 stopped
      24.08.2012-15:29:42 - 24.08.2012-15:29:42 in bewegung
      24.08.2012-15:30:22 - 24.08.2012-15:30:37 stopped
      24.08.2012-15:30:42 - 24.08.2012-15:40:58 stopped
      24.08.2012-15:41:05 - 24.08.2012-15:47:04 stopped
      24.08.2012-15:47:41 - 24.08.2012-15:49:54 stopped
      24.08.2012-15:49:59 - 24.08.2012-15:59:33 stopped
      24.08.2012-15:59:38 - 24.08.2012-15:59:38 in bewegung
      24.08.2012-15:59:41 - 24.08.2012-16:01:12 stopped
      24.08.2012-16:01:17 - 24.08.2012-16:01:17 in bewegung
      24.08.2012-16:01:22 - 24.08.2012-16:02:21 stopped
      24.08.2012-16:02:26 - 24.08.2012-16:11:02 stopped
      24.08.2012-16:11:06 - 24.08.2012-16:11:06 in bewegung
      24.08.2012-16:11:11 - 24.08.2012-16:11:11 in bewegung
      24.08.2012-16:11:18 - 24.08.2012-16:11:18 in bewegung
      24.08.2012-16:11:23 - 24.08.2012-16:13:03 stopped
      24.08.2012-16:13:08 - 24.08.2012-16:13:08 in bewegung
      24.08.2012-16:13:12 - 24.08.2012-16:13:17 in bewegung
      24.08.2012-16:13:22 - 24.08.2012-16:14:35 stopped
      24.08.2012-16:14:40 - 24.08.2012-16:14:40 in bewegung
      24.08.2012-16:14:58 - 24.08.2012-16:14:58 stopped
      24.08.2012-16:15:03 - 24.08.2012-16:15:03 in bewegung
      24.08.2012-16:15:29 - 24.08.2012-16:15:29 stopped
      24.08.2012-16:15:40 - 24.08.2012-16:15:44 in bewegung
      24.08.2012-16:15:50 - 24.08.2012-21:47:17 stopped
      24.08.2012-21:48:09 - 24.08.2012-21:48:09 in bewegung
      24.08.2012-21:48:14 - 24.08.2012-22:33:13 stopped
      24.08.2012-22:33:18 - 24.08.2012-22:33:18 in bewegung
      24.08.2012-22:33:39 - 24.08.2012-22:36:22 stopped
      24.08.2012-22:36:27 - 24.08.2012-22:36:32 stopped
      24.08.2012-22:36:39 - 24.08.2012-22:37:56 stopped
      24.08.2012-22:38:01 - 24.08.2012-22:46:02 in bewegung
      24.08.2012-22:50:27 - 24.08.2012-22:51:32 stopped
      24.08.2012-22:52:08 - 24.08.2012-22:54:07 in bewegung
      24.08.2012-22:54:12 - 24.08.2012-22:54:27 stopped
      24.08.2012-22:54:32 - 24.08.2012-23:03:41 in bewegung
      24.08.2012-23:05:01 - 25.08.2012-01:59:58 stopped
      24.08.2012-11:46:11 - 24.08.2012-11:49:51 stopped
      24.08.2012-11:49:56 - 24.08.2012-11:52:07 stopped

      Kommentar


      • #4
        Ich habe den Code aus meinem Vorpost nochmal in allen möglichen erdenklichen Varianten verändert, aber irgendwie schaffe ich es nicht, die Stand- und Fahrzeiten richtig zu gruppieren bzw. die Standzeit so zu definieren, dass Stand < 4 kmh und Fahrt > 4 kmh.

        Suspekt ist mir auch die Anzahl der Zeilen. Ganz so oft stoppe und fahre ich eigentlich nicht.

        Kommentar

        Lädt...
        X