PHP Rückgabe NaN

Ich habe eine Funktion, die berechnet die Entfernung zwischen zwei GPS-Koordinaten. Ich bekomme dann die Koordinaten aus der Datenbank und Schleife durch Sie alle zu bekommen, die Entfernung zwischen der aktuellen und der vorherigen, dann fügen Sie, dass ein array für die spezifischen GPS-Gerät. Für einige Grund, es ist return NaN. Ich habe versucht, Gießen Sie ein Doppel -, ein int, und die Rundung der Zahl.

Hier ist mein PHP code:

function distance($lat1, $lon1, $lat2, $lon2) {
      $lat1 = round($lat1, 3);
      $lon1 = round($lon1, 3);
      $lat2 = round($lat2, 3);
      $lon2 = round($lon2, 3);
      $theta = $lon1 - $lon2; 
      $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) +  cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)); 
      $dist = acos($dist); 
      $dist = rad2deg($dist); 
      $miles = $dist * 60 * 1.1515;
      if($miles < 0) $miles = $miles * -1;
      return ($miles * 1.609344);  
}
$this->db->query("SELECT * FROM `gps_loc` WHERE `imeiN`='" . $sql . "' AND `updatetime`>=$timeLimit ORDER BY `_id` DESC");
    $dist = array();
    $dist2 = array();
    while($row = $this->db->getResults()) {
        $dist2[$row['imeiN']] = 0;
        $dist[$row['imeiN']][]["lat"] = $row['lat'];
        $dist[$row['imeiN']][count($dist[$row['imeiN']]) - 1]["lng"] = $row['lon'];
    }

    foreach($dist as $key=>$d) {
        $a = 0;
        $b = 0;
        foreach($dist[$key] as $n) {
            if($a > 0) {
                $dist2[$key] += $this->distance($n['lat'], $n['lng'], $dist[$key][$a - 1]['lat'], $dist[$key][$a - 1]['lng']);
            }
            $a++;
        }

    }
    echo json_encode($dist2);
  • Können Sie zeigen im detail, was schief geht-Wann genau?
  • sind Sie sicher, dass die Werte u get aus der Datenbank sind zahlen, keine Zeichenketten?
  • Ich würde empfehlen, in der debugging-Ausgabe auf jeder Stufe der Entfernung () - Formel, herauszufinden, WO genau die nan produziert wird.
  • Diese Linie sicher scheint lustig: $dist[$row['imeiN']][]["lat"] = $row['lat']; -- wie ist der Dolmetscher eigentlich wissen was zu tun ist, die leere Menge von [] array-Indizes? Ich bin überrascht, dass es nicht nur stimmt es.
  • das ist eine normale PHP-Funktion Anhängen. Er dann bekommen die count () - kennen die indize, die ist hässlich. Ein sehr einfacher Ansatz wäre die Verwendung eines Zählers, er ist, hat er zu Schichten...
  • Danke Mann, ich hatte Ihnen in der Datenbank als VARCHARs. Nochmals vielen Dank 🙂 Wie markiere ich ein Kommentar als eine Antwort
  • gepostet beantworten
  • Wenn Sie eine leere index wie $array[] = "Whatever" es fügt es an das array an der ersten verfügbaren numerischen index, nachdem man Sie verwendet. Also wenn du ein array mit Indizes 0 oder 1 und 3, dann $array[] = "Whatever" gehen in den index 4. Es ist eine grausame Methode, aber mit dem tun der Graf und alle. Ich würde vorschlagen, (wie Alexis) ein Zähler erhöht variable um zu verfolgen, was index es sollte eingefügt werden ($i=0; außerhalb der während $i++; innen am Ende der Zeit, und mit $i als den unbestimmten index, wenn die Speicherung der Variablen)

InformationsquelleAutor trentr | 2012-01-02
Schreibe einen Kommentar