🛰️ GPS + ติดตามรถ
จัดการอุปกรณ์ GPS บนรถ + ดู realtime map + คำนวณ ETA
ในหน้านี้
อุปกรณ์ GPS
เมนู: อุปกรณ์ GPS — จัดการรายการอุปกรณ์ GPS ที่ติดตั้งบนรถ
เพิ่ม/แก้อุปกรณ์
| ฟิลด์ | คำอธิบาย |
|---|---|
| รถ | ผูกกับทะเบียนรถ (ไม่ผูกก็ได้ — ใช้เป็น standalone) |
| IMEI | 15 หลักจากตัวเครื่อง |
| SIM | เบอร์ของซิม (สำหรับติดต่อช่าง) |
| ยี่ห้อ + รุ่น | Concox GT06N, Coban TK303 ฯลฯ |
| วันที่ติดตั้ง | (Thai datepicker) |
| สถานะ | active / inactive / offline / maintenance |
| Device Token | สร้างอัตโนมัติ 32 ตัวอักษร — เก็บไว้ลับ ใช้ยิงข้อมูลเข้า API |
Regenerate Token
คลิกไอคอน 🔄 ข้างๆ token — สร้างใหม่ทันที (เก่าใช้ไม่ได้แล้ว)
เตือน: ถ้า regenerate token ต้องแก้ที่อุปกรณ์ GPS ด้วย ไม่งั้นมันจะส่งข้อมูลด้วย token เก่าแล้ว reject
Online/Offline
Badge สีเขียว "Online" = อุปกรณ์ส่งข้อมูลล่าสุดไม่เกิน 5 นาที / เทา "Offline" = นานเกิน 5 นาที
หน้า Live Tracking
เมนู: ติดตามรถ
สิ่งที่แสดงในหน้านี้
- Stat cards: จำนวน Online · จำนวน Offline · ข้อมูลทั่วไป
- แผนที่ Leaflet (ฝั่งซ้าย) — OpenStreetMap + หมุดรถ 🚌
- auto-refresh ทุก 10 วินาที
- คลิกหมุด → popup แสดงข้อมูลรถ + ความเร็ว + last seen
- รายการรถ (ฝั่งขวา) — ทุกอุปกรณ์ active
- คลิกการ์ดของรถใดๆ → แผนที่ zoom ไปที่รถนั้น
- แสดง ทะเบียน · สถานะ Online/Offline · ความเร็วล่าสุด · last seen
API รับข้อมูลจากอุปกรณ์
Endpoint: GET /api/gps_ingest.php
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
token | string | ✓ | Device token จาก gps_devices table |
lat | float | ✓ | Latitude (-90 to 90) |
lng | float | ✓ | Longitude (-180 to 180) |
speed | float | optional | ความเร็ว km/h |
heading | int | optional | ทิศทาง 0-360 องศา |
accuracy | int | optional | ความแม่นยำ (เมตร) |
ts | datetime | optional | เวลาที่บันทึก (default = NOW) |
ตัวอย่าง
GET /api/gps_ingest.php?token=gps_demo_token_aaaa1111&lat=14.5343&lng=100.9099&speed=85&heading=45
Response
{
"success": true,
"device_id": 1,
"trip_id": 5, // ถ้ารถมี trip วันนี้ — ใส่ trip_id ให้
"recorded_at": "2026-05-17 15:47:34"
}
สิ่งที่ระบบทำเมื่อรับ
- ตรวจ token → หา device
- หา trip ปัจจุบันของรถ (departure_date = today, status active)
- INSERT ลง
gps_positions(time-series) - UPDATE
gps_devices: last_seen_at, last_latitude, last_longitude
การคำนวณ ETA
เมื่อลูกค้าเข้า track_vehicle.php?trip=TXX:
- หา device ของรถที่ใช้ในเที่ยวนี้
- ดึง
last_latitude/last_longitudeล่าสุด - คำนวณระยะคงเหลือถึงปลายทางด้วย Haversine formula:
$remainKm = haversine_km($lat1, $lng1, $destLat, $destLng);
$avgSpeed = (float)get_setting('parcel_avg_speed_kmh', 60); // 60 km/h default
$minutes = ($remainKm / $avgSpeed) * 60;
$eta = date('H:i', time() + (int)($minutes * 60));
แสดง:
- เวลาถึงโดยประมาณ (ตัวเลขใหญ่ๆ สีเขียว)
- "เหลือ X กม. · Y นาที"
- หมุดรถบนแผนที่ Leaflet
วิธีเชื่อมต่ออุปกรณ์ GPS
วิธี 1: ใช้อุปกรณ์ GPS ทั่วไป (เช่น Concox, Coban)
อุปกรณ์เหล่านี้ส่งข้อมูลผ่าน TCP protocol ของตัวเอง — ต้องตั้ง middleware รับข้อมูลแล้วยิงเข้า API ของเรา:
# Pseudo-code middleware (Python/Node.js):
async function onGpsData(deviceImei, lat, lng, speed) {
const token = await getTokenByImei(deviceImei);
await fetch(`https://yoursite.com/api/gps_ingest.php?token=${token}&lat=${lat}&lng=${lng}&speed=${speed}`);
}
วิธี 2: ใช้แอพมือถือ Driver (ง่ายกว่า)
ติดตั้งแอพบนมือถือคนขับ → ส่งพิกัดทุก 10-30 วินาทีตอนรถวิ่ง:
// JavaScript ใน PWA (Progressive Web App):
navigator.geolocation.watchPosition(pos => {
fetch(`/api/gps_ingest.php?token=${TOKEN}` +
`&lat=${pos.coords.latitude}` +
`&lng=${pos.coords.longitude}` +
`&speed=${(pos.coords.speed || 0) * 3.6}`);
}, null, { enableHighAccuracy: true });
วิธี 3: ทดสอบ manual
เปิด terminal:
curl "https://โดเมนของคุณ/api/gps_ingest.php?token=gps_demo_token_aaaa1111&lat=14.5343&lng=100.9099&speed=85"
แล้วเข้าหน้า admin/tracking.php จะเห็นรถปรากฏบนแผนที่ทันที ✓
