บทที่ 12
ค่าผ่านทางในไทยคิดตามประเภทรถ และถนนลูกรังที่กระบะวิ่งได้ทุกวัน รถสิบล้อเข้าไม่ได้ สองเรื่องนี้ตั้งแยกตามประเภทรถได้
วิ่งขึ้นเหนือ บางนา รังสิต อยุธยา คือวันที่ทางด่วนมีความหมาย
ตั้งได้ทั้งระดับแผน คือใช้กับรถทุกคัน และระดับประเภทรถ คือทับค่าของแผน ระดับแผนอยู่ในตัวเลือกการวางแผนเส้นทาง
ระดับประเภทรถอยู่ใน ⚙ รายละเอียด ของคลัง ในการ์ดของรถแต่ละประเภท
ที่ต้องมีสองระดับเพราะข้อจำกัดจริงอยู่ที่ตัวรถ ไม่ได้อยู่ที่วันหรือที่แผน รถพ่วงจ่ายค่าผ่านทางหลายเท่าของกระบะ และเจ้าของรถหลายรายจึงไม่ให้รถใหญ่ขึ้นทางด่วน ในขณะที่กระบะขึ้นได้ตามปกติ
วันนี้วิ่งขึ้นเหนือสามจุด รังสิต นวนคร อยุธยา เป็นวันที่ทางด่วนกับทางหลวงต่างกันจริง
ทางที่ไม่ผ่านทางด่วน สั้นกว่า 2 กิโล แต่ ใช้เวลาวิ่งมากกว่า 12 นาที ฟังดูกลับหัว จนกว่าจะนึกได้ว่าทางด่วนคืออะไร — ทางที่อ้อมกว่าแต่ไม่มีไฟแดง เราจ่ายค่าผ่านทางเพื่อซื้อเวลา ไม่ได้ซื้อระยะ
บรรทัดสรุปจะบอกว่าถูกลง แต่ยังไม่ครบ
1,480 บาท น้อยกว่า 1,496 บาท เพราะเลขนั้นคิดจากกิโลเมตร และค่าผ่านทางที่ประหยัดไปยังไม่ได้อยู่ในนั้นเลย สิ่งที่โปรแกรมบอกได้จริงคือระยะกับเวลา ส่วนค่าผ่านทางจริงต้องเอาไปบวกเอง ถ้าด่านที่วิ่งผ่านเก็บ 60 บาท การเลี่ยงก็คุ้มขึ้น ถ้าเก็บ 15 บาท 12 นาทีของคนขับแพงกว่า
ช่องเลี่ยงถนนลูกรังทำงานคนละแบบ ค่าตั้งต้นคือไม่เลี่ยง และตั้งใจให้เป็นอย่างนั้น
ถนนลูกรังในหลายที่คือทางเข้าเดียวของลูกค้า ถ้าสั่งเลี่ยง โปรแกรมจะไม่หาทางอื่นไปให้จุดนั้น เพราะไม่มีทางอื่น ผลที่ได้คือจุดนั้นกลายเป็นจุดที่เข้าไม่ถึง แล้วหายไปจากแผน
อีกอย่าง แผนปกติเลี่ยงถนนลูกรังให้อยู่แล้วโดยไม่ต้องสั่ง เพราะในข้อมูลถนนที่ใช้ ถนนลูกรังตั้งความเร็วไว้แค่ 10 กม./ชม. ทางลูกรังหนึ่งกิโลจึงกินเวลาหกนาที เทียบกับถนนปกติที่ 4.8 นาที ไม่มีวันที่มันเป็นทางลัด
ติ๊กเลี่ยงถนนลูกรังเมื่อไหร่
เมื่อรถของเราเข้าไม่ได้จริง ๆ เช่นสิบล้อหรือรถพ่วง และเรายอมรับว่าจุดที่อยู่ปลายทางลูกรังจะขึ้นมาเป็นจุดที่จัดไม่ได้ ดีกว่าได้แผนที่สั่งให้รถพ่วงเลี้ยวเข้าทางที่เข้าไม่ได้ ถ้ามีกระบะด้วย ให้ตั้งที่ระดับประเภทรถ แล้วจุดนั้นจะไปอยู่กับกระบะเอง
คนละเรื่องกับข้างบน แต่โปรแกรมรายงานที่เดียวกัน และเป็นเรื่องที่เจอบ่อยกว่ามาก คือหมุดที่ปักไว้ไม่ได้อยู่ริมถนน
ในผลลัพธ์แบบละเอียด ข้อความจะบอกตัวเลขมาให้ด้วยว่า ถนนที่ใกล้ที่สุดอยู่ห่าง 256 เมตร ในขณะที่ขอบเขตที่ยอมรับคือ 150 เมตร มีตัวเลขสองตัวนี้ก็แก้ได้ ย้ายหมุดออกมาที่หน้าถนน แล้ววางแผนใหม่
เจอบ่อยกับหมุดที่มาจากการค้นชื่อสถานที่ในห้าง ในนิคม หรือในหมู่บ้านจัดสรร เพราะพิกัดที่ได้คือใจกลางอาคาร ไม่ใช่ประตูที่รถเข้า ปักหมุดที่ปากทางเข้าจะได้ทั้งแผนที่ถูกและคนขับที่ไม่ต้องโทรถาม
โปรแกรมมีตัวคำนวณระยะสองแบบ แบบถนนจริง กับแบบเส้นตรง แบบเส้นตรงไม่รู้จักถนน จึงไม่รู้จักทางด่วนและไม่รู้จักถนนลูกรัง ติ๊กช่องพวกนี้ในโหมดนั้นจะไม่มีผลอะไร และโปรแกรมจะเขียนบอกไว้ข้างช่อง ไม่ได้เงียบแล้วทำเป็นว่าทำให้
ระดับแผน สองฟิลด์ ค่าตั้งต้นเป็น false ทั้งคู่:
{
"avoid_toll": true,
"avoid_dirt_road": false
}
ระดับประเภทรถ ชื่อเดียวกัน แต่รับ null ได้ด้วย:
{
"type_name": "กระบะ",
"van_count": 2,
"shift_start": "08:00",
"shift_end": "17:00",
"capacity_kg": 900,
"capacity_cm3": 4000000,
"avoid_toll": false,
"avoid_dirt_road": false
}
null หรือไม่ส่งมา คือตามค่าของแผน
เพราะอย่างนี้ payload เก่าที่ยังไม่รู้จักสองฟิลด์นี้
ได้ผลเหมือนเดิมเป๊ะ
ประเภทรถที่ตั้งไม่เหมือนกันจะได้เครือข่ายถนนของตัวเอง คือได้ตารางระยะทางแยกกัน จุดที่เข้าได้เฉพาะทางลูกรังจึงเปลี่ยนสถานะ จาก “ไม่มีรถไปถึง” เป็น “ไม่ใช่งานของรถพ่วง” ต่างกันที่ว่าจะทิ้งจุดนั้น หรือจัดจุดนั้นให้กระบะ
ประเภทรถที่ตั้งเหมือนกันใช้ตารางเดียวกัน ฟลีตที่รถเหมือนกันหมดจึงไม่มีต้นทุนเพิ่มจากการมีฟิลด์นี้อยู่
ขอบเขตระยะห่างจากถนนคือ max_road_snap_distance_m
ค่าตั้งต้น 150 เมตร ตั้งรายจุดได้ด้วยฟิลด์ชื่อเดียวกันบนจุดส่ง
ส่ง null ที่ระดับแผนคือไม่ตรวจเลย
ไม่แนะนำ เพราะจะได้แผนที่รถต้องขับข้ามทุ่ง