Пример #1
0
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);
    }
}
Пример #2
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";