การหาเส้นทางแบบเปลี่ยนแปลงได้กับ Google Maps API
ไม่ได้เขียนถึง Google Maps API นานมาก เผลอแป๊บเดียว ตอนนี้ Google ได้ออกเวอร์ชั่นใหม่แล้วเป็น Google Maps API V3 แล้วครับ โดยที่ใช้งานดีขึ้น เร็วขึ้น และมี function ต่างๆมากขึ้นเยอะเลยครับ
หลังจากโพสเรื่อง การหาเส้นทางโดย Google Maps API ไป มีคำถามเข้ามาเยอะแยะมากครับ แสดงว่าเริ่มมีคนสนใจเขียน Google Maps API กันเยอะขึ้นมาก น่าดีใจครับ วันนี้เลยจะมาเล่าเรื่อง function ใหม่ล่าสุดของการหาเส้นทางโดย Google Maps API ก็คือ Draggable Direction ครับ
ถ้าเคยลองค้นหาเส้นทางใน Google Maps จะเห็นว่าหลังจากเราหาเส้นทางแล้ว เราจะสามารถเลื่อนเส้นทางเพื่อเปลี่ยนแปลงการเดินทางให้ผ่านถนนบางเส้นที่ต้องการได้ สมัยก่อนตัว API ทำไม่ได้ครับ คือพอได้เส้นทางแล้วก็จบแบบว่าเป็นเส้นแข็งๆ แต่เมื่อกลางเดือนกันยายน Google เพิ่งเพิ่มการเปลี่ยนเส้นทางเข้ามาใน API
document จาก Google ครับ http://code.google.com/apis/maps/documentation/javascript/services.html#DraggableDirections
ก่อนอื่นลองดูตัวอย่างว่าเรากำลังจะทำอะไรกันครับ Draggable Direction Example (ลองใช้ mouse จับเส้นทางลาก เพื่อเปลี่ยนเส้นทางครับ)
ทีนี้ลองมาดูกันครับว่ามันทำงานยังไง
function initialize() {
var center = new google.maps.LatLng(13.732881766645967,100.48181533813477);
var myOptions = {
zoom: 12,
center: center,
scrollwheel: false,
mapTypeControl: false,
navigationControl: true,
disableDefaultUI: true,
streetViewControl: false,
noClear: false,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map"), myOptions);
var rendererOptions = {
draggable: true
};
var directionsDisplay = new google.maps.DirectionsRenderer(rendererOptions);
directionsDisplay.setMap(map);
directionsDisplay.setPanel(document.getElementById("route"));
var directionsService = new google.maps.DirectionsService();
var request = {
origin: "14.068, 100.6009",
destination: "13.8152, 100.5606",
travelMode: google.maps.DirectionsTravelMode.DRIVING
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(response);
}
});
}
ส่วนต้นๆของ function initialize จนถึงบรรทัด 14 เป็นการสร้างแผนที่ธรรมดา ตามวิธีของ Google Maps API V3 ครับ มาเริ่มน่าสนใจตั้งแต่บรรทัดที่ 16 ลงมา
ก่อนอื่นมาทำความเข้าใจกันก่อนครับ ว่าใน Google Maps API V3 เนี้ย การหาเส้นทางจะใช้ API หลักๆอยู่ 2 ตัวคือ
- google.maps.DirectionsService เอาไว้ request ให้ Google หาเส้นทางให้ โดยเราจะส่งค่า จุดเริ่มต้น จุดสิ้นสุด และวิธีการเดินทางว่าจะเอาเส้นทางแบบขับรถ หรือเดินเท้า ไปให้ Google และ Google ก็จะส่งผลลัพธ์กลับมาให้ครับ
- google.maps.DirectionsRenderer เอาไว้แสดงผลลัพธ์ที่ Google ส่งกลับมาให้เราครับ
โดยในบรรทัดที่ 16-22 เป็นการ define DirectionsRenderer เพื่อเอาไว้แสดงผลครับ
โดยเรากำหนดให้เส้นทางที่จะแสดงสามารถจัดเลื่อนได้ โดยการกำหนด parameter draggable : true ในตอนสร้าง DirectionsRenderer
จากนั้นในบรรทัดที่ 21 เรากำหนดให้ ตัวแสดงผลของที่ แสดงเส้นทางในแผนที่ (ตัวแปล map) ที่เราสร้างแผนที่ไว้ก่อนหน้าแล้ว
บรรทัดที่ 22 เป็นการกำหนดให้แสดงคำอธิบายเส้นทาง ประมาณว่า “ตรงไป 1 กม. แล้วเลี่้ยวขวา” ใน markup ที่ที id = “route” ซึ่งเรากำหนด DIV ที่มี id = “route” เอาไว้แล้ว
แค่นี้ตัวแสดงผลของเราก็เรียบร้อย เหลือแค่การ request เส้นทางเท่านั้นเองครับ
ในบรรทัดที่ 24 เราก็สร้าง directionsService ขึ้นมาเพื่อเอาไว้ขอเส้นทาง
และเราขอเส้นทางกับ Google โดยใช้ method directionsService.route ครับ โดยรูปแบบการเรียกใช้งานคือ
directionsService.route(request:DirectionsRequest, callback:function(DirectionsResult,DirectionsStatus)))
parameter ตัวแรก DirectionRequest ก็คือพวกระบุจุดเริ่มต้น จุดหมายปลายทาง วิธีการเดินทาง จะให้หลบทางด่วนไหม อะไรประมาณนี้ครับ ใครอยากดูทั้งหมดลองดูที่ (DirectionsRequest)
parameter ตัวที่สอง คือ callback function ที่จะทำงานหลังได้ผลลัพธ์จาก Google ครับ
ในตัวอย่างเราระบุจุดเริ่มต้น จุดหมายปลายทาง และวิธีการเดินทางดังนี้ครับ
var request = {
origin: "14.068, 100.6009",
destination: "13.8152, 100.5606",
travelMode: google.maps.DirectionsTravelMode.DRIVING
};
และบรรทัดที่ 31 ก็ส่ง object request เป็น parameter แรกของ method route และกำหนดให้ callback function แสดงผลลัพธ์ด้วย method directionsDisplay.setDirections(response); ในบรรทัดที่ 33 ครับ
แต่ถ้า Google ไม่สามารถหาเส้นทางได้ status จะไม่เท่ากับ google.maps.DirectionsStatus.OK เราก็จะไม่แสดงผลลัพธ์ครับ
แค่นี้ก็เป็นอันเสร็จครับ เส้นทางที่เราสร้างขึ้นก็จะสามารถจับเลื่อนได้ และหลังจากเปลี่ยนเส้นทางแล้ว Google จะแสดงเส้นทางใหม่พร้อม update คำอธิบายการเดินทางให้เองเลยครับ เห็นไหมครับ ว่า Google Maps API V3 เนี้ยเจ๋งจริงๆ
ถ้ามีคำถามตรงไหน เชิญใน Comment ได้เลยครับ
Pingback: การหาเส้นทางโดย Google Maps API (GDirections) — tanomsak.com