Leaflet Routing in Angular

Jinnapatsariarporn
MAPEDIA BLOG
Published in
Nov 8, 2022

หลายๆ ท่านคงเคยใช้งาน Google Map Direction APIกันเป็นอย่างดีอยู่แล้วในการหาเส้ททางที่สั้นที่สุดหรือเส้นทางที่เหมาะสมที่สุดในการเดินทางจากจุดเริ่มต้นไปที่จุดเป้าหมายของเรา วันนี้ผมลองนำเสนอ Leaflet Routing Machine เป็นเครื่องมืออีกตัวนึงที่ใช้งานบน Leaflet ซึ่งการใช้งานก็ค่อนข้างง่ายและสะดวก เพียงเขียน Code ไม่กี่บรรทัดก็สามารถกำหนดเส้นทางที่ใช้งานได้อย่างสมบูรณ์ การสร้างเส้นทางในแผนที่ด้วย Leaflet Routing สามารถเข้าไปดูได้ที่ Leaflet Routing Machine (liedman.net) โดยเส้นทางจะถูกสร้างขึ้นอัตโนมัติเมื่อทำการเลือกจุดเริ่มต้นและจุดสิ้นสุดให้กับแผนที่ วิธีการสร้างมีดังต่อไปนี้

  1. เริ่มต้นด้วยการติดตั้งปลั๊กอิน

npm i leaflet

npm i — save-dev @types/leaflet

npm i leaflet-routing-machine

npm i — save-dev @types/leaflet-routing-machine

2. สร้างแผนที่

style.css

#map { height: 800px; width: 100%; }

map.html

<div id=”map”></div>

map.ts

this.map = L.map(‘map’).setView([ตำแหน่ง Lat, ตำแหน่ง Lng], Zoom level)

L.tileLayer(‘https://tile.openstreetmap.org/{z}/{x}/{y}.png', {

maxZoom: 22

}).addTo(this.map);

3. กำหนดตำแหน่งจุดและสร้างหมุด ใช้ในการสร้างเส้นทาง

start = [ตำแหน่ง Lat, ตำแหน่ง Lng]

end = [ตำแหน่ง Lat, ตำแหน่ง Lng]

L.marker(this.start).addTo(this.map)

L.marker(this.end).addTo(this.map)

4. เริ่มการสร้างเส้นทาง

L.Routing.control({

waypoints: [L.latLng(this.start),L.latLng(this.end)]

})

.addTo(this.map);

5. เพิ่มเติม สร้างการเคลื่อนที่ตามเส้นทางที่สร้างไว้ โดยเริ่มจากการสร้างตัวแปรหมุดที่เราจะใช้ในการขยับ

var marker_route = L.marker(this.center_latlng).addTo(this.map)

เพิ่มโค้ดการขยับหมุด ต่อท้ายฟังก์ชั่น L.Routing.control

.on(‘routesfound’,(e:any)=>{

var routes = e.routes[0]

routes.coordinates.forEach((f:any,i:any) => {

setTimeout(() => {

marker_route.setLatLng([f.lat, f.lng])

}, 80*i);

});

})

--

--