RRevX#RevUpChargeOn

คิดค่าส่งตามระยะทางจริงบนเว็บและแอป: สูตร ตัวอย่างโค้ด และค่าใช้จ่าย API

อัปเดต 10 ต.ค. 2569 · อ่าน 5 นาที · ทีมงาน RRevX

These articles are currently available in Thai only.

RRevX Maps API: แผนที่ + เส้นทาง ไทย/ลาว ครึ่งราคา Googleฟรี 10,000 ครั้งทุกเดือน ไม่ต้องใส่บัตร · จ่ายเป็นบาท รวม VAT มีใบกำกับภาษีช่วงเปิดตัว: ทีมงานช่วยย้ายจาก Google Maps ให้ฟรี + ส่วนลดสำหรับลูกค้ารายแรกดูราคา →

ร้านที่ส่งของเองมักคิดค่าส่งแบบเหมา แบ่งโซน หรือวัดระยะเป็นเส้นตรงบนแผนที่ ทั้งสามแบบทำให้ลูกค้าใกล้จ่ายแพงเกิน และออเดอร์ไกลขาดทุนค่าน้ำมัน บทความนี้แสดงว่าระยะตามถนนจริงต่างจากเส้นตรงเท่าไร และวิธีคิดค่าส่งจากเส้นทางจริงบนเว็บหรือแอปของคุณ

ระยะตามถนนยาวกว่าเส้นตรงเท่าไร

เส้นทาง (กรุงเทพฯ)เส้นตรงตามถนนเวลาขับ
สยามพารากอน → เซ็นทรัลลาดพร้าว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 ขั้น

  1. รู้พิกัดปลายทาง ให้ลูกค้าปักหมุดบนแผนที่หรือกด "ใช้ตำแหน่งปัจจุบัน" แล้วค่อยกรอกบ้านเลขที่ไว้ให้คนส่ง ส่วนคอนโด อาคาร ห้าง ให้เลือกจากช่องค้นหาสถานที่ได้ บ้านเลขที่ที่พิมพ์เองมักแปลงเป็นพิกัดไม่แม่น การปักหมุดจึงแม่นที่สุด
  2. ขอระยะทางตามถนน ส่งพิกัดร้านกับพิกัดลูกค้าไปที่ API เส้นทาง ได้ระยะเป็นเมตรและเวลาเป็นวินาที
  3. คิดราคาที่ฝั่งเซิร์ฟเวอร์ อย่าคำนวณราคาในเบราว์เซอร์ เพราะคนแก้ตัวเลขเองได้ และอย่าใส่คีย์ลับในหน้าเว็บ

ตัวอย่างโค้ด (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 ต่อออเดอร์

ข้อควรระวัง

สร้างคีย์ API ฟรี

อ่านต่อ