Files
gps-frontend/app/Models/Dummy.php
meusinfirmary 77bc5f10a6 update
2025-05-29 13:21:59 +07:00

65 lines
1.8 KiB
PHP
Executable File

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class Dummy extends Model
{
public static function addDummyTrack($data)
{
$id = DB::table("t_dummy_tracks")->insertGetId($data);
return $id;
}
public static function getByGpsId($gps_id)
{
return DB::select("SELECT * FROM t_dummy_tracks WHERE gps_id = ?;", [$gps_id]);
}
public static function updateDummyTrack($data)
{
return DB::table("t_dummy_tracks")
->where("id", $data["id"])
->update($data);
}
public static function deleteDummyTrack($data)
{
return DB::table("t_dummy_tracks")
->where("id", $data["id"])
->delete();
}
// ------------------------------------------------------------------------------------------------------------------------------------------------------------------
public static function addDummyHub($data)
{
$id = DB::table("t_dummy_hubs")->insertGetId($data);
return $id;
}
/**
* https://stackoverflow.com/questions/574691/mysql-great-circle-distance-haversine-formula
* miles: 3958.756 || 3959
* km: 6371
* meters: 6371000
* more accurate using km/meters than miles i think ~
*/
public static function nearestHubInCircle($lat, $lng)
{
$query = "SELECT id,name, ( 6371000 * acos( cos( radians( :lat1 ) ) * cos( radians( lat ) )
* cos( radians( lng ) - radians( :lng ) ) + sin( radians( :lat2 ) ) * sin(radians( lat )) ) ) AS distance
FROM t_dummy_hubs
HAVING distance <= 800
ORDER BY distance;";
$params = [
"lat1" => $lat,
"lat2" => $lat,
"lng" => $lng,
];
return DB::select($query, $params);
}
}