ร้านที่ส่งของเองมักคิดค่าส่งแบบเหมา แบ่งโซน หรือวัดระยะเป็นเส้นตรงบนแผนที่ ทั้งสามแบบทำให้ลูกค้าใกล้จ่ายแพงเกิน และออเดอร์ไกลขาดทุนค่าน้ำมัน บทความนี้แสดงว่าระยะตามถนนจริงต่างจากเส้นตรงเท่าไร และวิธีคิดค่าส่งจากเส้นทางจริงบนเว็บหรือแอปของคุณ
ระยะตามถนนยาวกว่าเส้นตรงเท่าไร
| เส้นทาง (กรุงเทพฯ) | เส้นตรง | ตามถนน | เวลาขับ |
|---|---|---|---|
| สยามพารากอน → เซ็นทรัลลาดพร้าว | 8.3 กม. | 11.2 กม. (×1.35) | ~13 นาที |
| BTS อารีย์ → อนุสาวรีย์ประชาธิปไตย | 5.3 กม. | 7.2 กม. (×1.36) | ~11 นาที |
วัดด้วย RRevX Routing เมื่อ 10 ต.ค. 2569 · เวลาขับคิดจากความเร็วปกติของถนน ไม่รวมรถติด · แต่ละเส้นทางต่างกันได้มาก โดยเฉพาะที่ต้องอ้อมแม่น้ำ ทางด่วน หรือถนนวันเวย์
ถ้าคิดค่าส่งจากเส้นตรง ระยะที่เก็บเงินได้จะหายไปราว 1 ใน 4 ในตัวอย่างนี้
สูตรค่าส่งที่ใช้กันบ่อย
ค่าส่ง = ค่าเริ่มต้น (รวมระยะแรก) + บาทต่อกิโลเมตรถัดไป แล้วตั้งขั้นต่ำ ขั้นสูง และปัดเศษ เช่น 35 บาท 3 กม.แรก แล้ว 9 บาทต่อ กม.
| ออเดอร์สยามพารากอน → เซ็นทรัลลาดพร้าว | ระยะที่ใช้คิด | ค่าส่ง |
|---|---|---|
| คิดจากเส้นตรง | 8.3 กม. | 83 บาท |
| คิดจากถนนจริง | 11.2 กม. | 109 บาท |
ส่วนต่าง 26 บาทต่อออเดอร์ ถ้าร้านส่งวันละ 30 ออเดอร์ระยะนี้ เดือนหนึ่งคือราว 23,000 บาทที่ร้านจ่ายเอง
ทำบนเว็บหรือแอป 3 ขั้น
- รู้พิกัดปลายทาง ให้ลูกค้าปักหมุดบนแผนที่หรือกด "ใช้ตำแหน่งปัจจุบัน" แล้วค่อยกรอกบ้านเลขที่ไว้ให้คนส่ง ส่วนคอนโด อาคาร ห้าง ให้เลือกจากช่องค้นหาสถานที่ได้ บ้านเลขที่ที่พิมพ์เองมักแปลงเป็นพิกัดไม่แม่น การปักหมุดจึงแม่นที่สุด
- ขอระยะทางตามถนน ส่งพิกัดร้านกับพิกัดลูกค้าไปที่ API เส้นทาง ได้ระยะเป็นเมตรและเวลาเป็นวินาที
- คิดราคาที่ฝั่งเซิร์ฟเวอร์ อย่าคำนวณราคาในเบราว์เซอร์ เพราะคนแก้ตัวเลขเองได้ และอย่าใส่คีย์ลับในหน้าเว็บ
ตัวอย่างโค้ด (Node.js ฝั่งเซิร์ฟเวอร์)
const KEY = process.env.RRX_KEY; // คีย์ rx_sec_… ใช้ฝั่งเซิร์ฟเวอร์เท่านั้น
async function deliveryFee(shop, customer) {
const url = `https://api.rrevx.com/v1/route/${shop.lng},${shop.lat};${customer.lng},${customer.lat}` +
`?overview=false&key=${KEY}`;
const r = await fetch(url).then((x) => x.json());
if (r.code !== 'Ok') return null; // ไม่มีถนนถึง (เช่น เกาะ) → แสดง "ส่งไม่ได้"
const km = r.routes[0].distance / 1000;
if (km > 20) return null; // ไกลเกินที่ร้านส่ง
const fee = 35 + Math.max(0, km - 3) * 9; // 35 บาท 3 กม.แรก + 9 บาท/กม.
return Math.ceil(fee); // ปัดขึ้นเป็นบาท
}
คำตอบของ API เส้นทางเป็นรูปแบบเดียวกับ OSRM (routes[0].distance เมตร, duration วินาที) ดูทุก parameter ได้ที่เอกสาร API
ค่าใช้จ่าย API ต่อออเดอร์
- คิดค่าส่ง 1 ครั้ง = เรียกเส้นทาง 1 ครั้ง
- RRevX ฟรี 10,000 ครั้งต่อเดือน ร้านที่ส่งวันละ 300 ออเดอร์ (~9,000 ครั้ง/เดือน) จึงใช้ฟรี
- เกินส่วนฟรี 0.08 บาทต่อครั้ง รวม VAT แล้ว
- ลดการเรียกซ้ำ: เก็บผลไว้ต่อหมุดลูกค้า ถ้าลูกค้ากดคำนวณใหม่โดยไม่ย้ายหมุดก็ใช้ผลเดิม
ข้อควรระวัง
- รถติด ระยะทางไม่เปลี่ยนตามรถติด แต่เวลาส่งเปลี่ยน ถ้าคิดเงินตามเวลาด้วย ให้บวกเผื่อช่วงเร่งด่วนเอง
- มอเตอร์ไซค์ เส้นทางคำนวณสำหรับรถยนต์ มอเตอร์ไซค์อาจลัดซอยได้สั้นกว่าเล็กน้อย สูตรค่าส่งจึงควรตั้งจากระยะรถยนต์แล้วปรับราคาต่อ กม. แทน
- ล็อกราคาตอนยืนยันออเดอร์ คิดราคาครั้งเดียวตอนลูกค้ากดสั่ง แล้วเก็บไว้กับออเดอร์ ไม่คิดใหม่ระหว่างส่ง