function handleSpeed($link, $devid, $lat, $long) { // Find previous location event for devid $res = mysql_query("SELECT statusCode,timestamp,latitude,longitude FROM EventData WHERE (deviceID='" . $devid . "' AND statusCode=61472) ORDER BY timestamp DESC LIMIT 1", $link); // If there is a previous location if (mysql_num_rows($res) > 0) { list($statusCode, $lasttime, $lastlat, $lastlong) = mysql_fetch_row($res); // get time diff $deltatime = time() - $lasttime; // calculate heading and speed $heading = calculateBearing($lastlat, $lastlong, $lat, $long); if (is_nan($heading)) { $heading = 0; } $speed = calculateSpeed($lastlat, $lastlong, $lat, $long, $deltatime); if (is_nan($speed)) { $speed = 0; } $retval = array($speed, $heading); } if (isset($retval)) { return $retval; } else { return array(0, 0); } }
<?php ///Function to calculate Bearing between two coordinates function calculateBearing($lat1, $long1, $lat2, $long2) { $y = $lat2 - $lat1; $x = $long2 - $long1; if ($x == 0 and $y == 0) { return 0; } return $x < 0 ? rad2deg(atan2($x, $y)) + 360 : rad2deg(atan2($x, $y)); } //Function to calculate speed of movement between two coordinates in 10 minutes function calculateSpeed($lat1, $long1, $lat2, $long2, $deltatime) { $dist = acos(sin($lat1) * sin($lat2) + cos($lat1) * cos($lat2) * cos($long2 - $long1)) * 6.371; return $dist / ($deltatime / 3600); } $bearing = calculateBearing(28.88, -91.81999999999999, 28.93, -91.92); $speed = calculateSpeed(28.88, -91.81999999999999, 28.93, -91.92, 1200); echo "Bearing:{$bearing} Speed:{$speed}\n";