ผมได้สอนใช้งาน Google map api เวอร์ชั่น 3 มาบ้างแล้ว ศึกษาบทความที่เกี่ยวข้องได้จาก Google Maps API คราวนี้ผมจะสอนสร้างเส้น Polyline บ้างครับ และมีสมาชิกหลายท่าน อยากให้ผมสอนเรื่องนี้เหมือนกัน บทความนี้จะสอนทำ Polyline ให้กับแผนที่แบบง่ายๆกันก่อนครับ
Polyline จะมีลักษณะเป็นเส้นที่ลากไปเป็นจุดๆ มีประโยชน์ต่อการหาระยะทาง หรือเป็นไกด์บอกเส้นทางไปยังจุดหมายที่เราต้องการ โดยเราสามารถลากเส้นไปตามแผนที่ เพื่อบอกที่อยู่ ที่เราต้องการเดินทางไปได้
มาดูตัวอย่าง การสร้าง Polylines แบบง่ายๆ กันเลยครับ
<!DOCTYPE html> <html> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> <meta charset="utf-8"> <title>Simple Polylines</title> <style> html, body, #map-canvas { height: 100%; margin: 0px; padding: 0px } </style> <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&language=th"></script> <script> var map; function initialize() { var locations = [ //เก็บจุดพิกัดแต่ละจุดไว้ในตัวแปร locations ซึ่งเป็นแบบอาร์เรย์ ในตัวอย่างนี้ ผมได้กำหนดจุดพิกัดทั้งหมด 4 จุด [13.758610511444168, 100.65509676933289, "ที่อยู่ 1"], [13.759585913808788, 100.65545618534088, 'ที่อยุ่ 2'], [13.761597147169761, 100.65543472766876, 'ที่อยู่ 3'], [13.763097745253836, 100.65400779247284, 'ที่อยู่ 4'] ]; var mapOptions = { mapTypeId: google.maps.MapTypeId.ROADMAP,//ชนิดของแผนที่ที่ใช้แสดง zoom: 9,// ซูมเริ่มต้น panControl: false,//ไม่แสดงลูกศร scaleControl: false, mapTypeControl: false,//ไม่มีชนิดแผนที่ให้เลือก เราจะใช้แบบ ROADMAP เท่านั้น streetViewControl: true,//ใช้ Streetview ได้ overviewMapControl: false, zoomControl: true,//แสดงปุ่มซูมให้ผู้ใช้งานคลิก (+ -) zoomControlOptions: { style: google.maps.ZoomControlStyle.SMALL,//รูปแบบของซุมคอนโทรล (small) position: google.maps.ControlPosition.RIGHT_TOP //ตำแหน่งของซุมคอนโทรล ให้แสดงด้านขวา } }; map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);//เรียกใช้ google map โดยส่ง element id (map-canvas) สำหรับแสดงผลแผนที่ และ ตัวแปร mapOptions เพื่อเลือกว่าต้องแสดงอะไรในแผนที่บ้าง var infowindow = new google.maps.InfoWindow();//เรียกใช้ infowindow สำหรับแสดงข้อความเมื่อเม้าส์คลิกที่รูป icon หรือ marker var marker, poly, i; var arr = []; var lengthLocat = locations.length;//นับจำนวนอาร์เรย์ในตัวแปร locations จะมีค่าเป็น 4 (เพราราะผมได้กำหนดไว้ 4 จุด) for (var i = 0; i < lengthLocat; i++) {//วนลูปเพื่อแสดงเส้น polyline if ((i + 1) == lengthLocat) {//ถ้าถึง element ตัวสุดท้าย คือ 4 var marker = new google.maps.Marker({ //สร้าง marker ไว้ในตัวแปร marker และเปลี่ยน icon ชื่อ busIcon60.png (รูปรถทัวน์) position: new google.maps.LatLng(locations[i][0], locations[i][1]), map: map, icon: 'busIcon60.png' }); } else {//ถ้า element ยังไม่ถึงตัวสุดท้าย var marker = new google.maps.Marker({//สร้าง marker ไว้ในตัวแปร marker เปลี่ยน icon ชื่อ makerIcon32.png position: new google.maps.LatLng(locations[i][0], locations[i][1]), map: map, icon: 'makerIcon32.png' }); } arr.push(marker.getPosition());//ดึงจุดพิกัดเก็บไว้ในตัวแปร arr var poly = new google.maps.Polyline({//เรียกใช้ polyline เก็บไว้ตัวแปร poly path: arr,//ส่งจุดพิกัดจากตัวแปร arr strokeColor: '#F48EF4',//สีเส้น Polyline สีชมพู strokeOpacity: 1.0,//Opacity ของเส้น strokeWeight: 6,//ขนาดของเส้น Polyline map: map//ส่งอินสแตนด์ของแผนที่เข้าไปด้วย }); google.maps.event.addListener(marker, 'click', (function(marker, i) {//เหตุการณ์เกิดเมื่อมีการคลิกที่ Marker return function() { infowindow.setContent(locations[i][2]);//แสดงข้อมูลจากตัวแปร location ตำแแหน่งอาเรย์ที่ 2 เช่น ที่อยู่ 1,ที่อยุ่ 2 infowindow.open(map, marker);//แสดงผลโลด } })(marker, i)); } setMapsToCenter(poly);//ส่งอินสแตนด์ของ polyline ไปที่ฟังก์ชั่น setMapsToCenter เพื่อแสดงแผนที่อยุ่ตำแหน่งตรงกลาง } function setMapsToCenter(obj) { var bounds = new google.maps.LatLngBounds(); var points = obj.getPath().getArray(); for (var n = 0; n < points.length; n++) { bounds.extend(points[n]); } map.fitBounds(bounds);//เส้น Polyline จะถูกสร้างจริงจากคำสั่งนี้ครับ } google.maps.event.addDomListener(window, 'load', initialize);//แสดงแผนที่เมื่อหน้าเว็บถูกโหลด </script> </head> <body> <div id="map-canvas"></div> </body> </html>
ผมใช้รูปIconแทนรูปMarkerเดิม ดังนี้ครับ
ผมได้เขียนอธิบายโค๊ดไว้เกือบทุกบรรทัดแล้วครับ หากสงสัยตรงไหน สอบถามได้จากกล่องแสดงความคิดเห็นด้านล่างได้เลยครับ
ปล.บทความนี้เป็นบทความสุดท้ายก่อนที่ผมจะบวช วันที่ 2 เมษา นี้ครับ พบกับบทความต่อไปหลังสงกรานต์ครับ
ในกรณีนี้ต้องการดึงข้อมูลมาจากฐานข้อมูลต้องทำยังไงบ้างครับ
ตอบลบvar locations = [ //เก็บจุดพิกัดแต่ละจุดไว้ในตัวแปร locations ซึ่งเป็นแบบอาร์เรย์ ในตัวอย่างนี้ ผมได้กำหนดจุดพิกัดทั้งหมด 4 จุด
[13.758610511444168, 100.65509676933289, "ที่อยู่ 1"],
[13.759585913808788, 100.65545618534088, 'ที่อยุ่ 2'],
[13.761597147169761, 100.65543472766876, 'ที่อยู่ 3'],
[13.763097745253836, 100.65400779247284, 'ที่อยู่ 4']
];