ภาพรวม
คุณสามารถคำนวณเส้นทาง (โดยใช้วิธีการเดินทางที่หลากหลาย) โดยใช้ออบเจ็กต์ DirectionsService ออบเจ็กต์นี้จะสื่อสารกับบริการเส้นทางของ Google Maps API ซึ่งรับคำขอเส้นทางและแสดงผลเส้นทางที่มีประสิทธิภาพ
ระยะเวลาเดินทางเป็นปัจจัยหลักที่ได้รับการเพิ่มประสิทธิภาพ แต่ปัจจัยอื่นๆ เช่น ระยะทาง จำนวนการเลี้ยว และอื่นๆ อีกมากมายอาจได้รับการพิจารณาด้วย
คุณจะจัดการผลลัพธ์ที่แสดงแนวโน้มเหล่านี้ด้วยตนเองหรือใช้ออบเจ็กต์ DirectionsRenderer เพื่อแสดงผลลัพธ์เหล่านี้ก็ได้
เมื่อระบุจุดเริ่มต้นหรือจุดหมายในคำขอเส้นทาง คุณสามารถระบุสตริงการค้นหา (เช่น "Chicago, IL" หรือ "Darwin, NSW, Australia"), ค่า LatLng หรือออบเจ็กต์ Place
บริการเส้นทางสามารถแสดงเส้นทางแบบหลายส่วนโดยใช้ชุดจุดอ้างอิง เส้นทางจะแสดงเป็นเส้นประกอบที่วาดเส้นทางบนแผนที่ หรือแสดงเป็นชุดคำอธิบายแบบข้อความภายในองค์ประกอบ <div> (เช่น "เลี้ยวขวาเข้าสู่ทางลาดสะพานวิลเลียมส์เบิร์ก")
เริ่มต้นใช้งาน
ก่อนใช้บริการเส้นทางใน Maps JavaScript API ให้ตรวจสอบก่อนว่าได้เปิดใช้ Directions API (เดิม) ในคอนโซล Google Cloud ในโปรเจ็กต์เดียวกับที่คุณตั้งค่าไว้สำหรับ Maps JavaScript API
วิธีดูรายการ API ที่เปิดใช้
- ไปที่ คอนโซล Google Cloud
- คลิกปุ่มเลือกโปรเจ็กต์ แล้วเลือกโปรเจ็กต์เดียวกับที่ตั้งค่าไว้สำหรับ Maps JavaScript API แล้วคลิกเปิด
- จากรายการ API ในแดชบอร์ด ให้มองหา Directions API (เดิม)
- หากเห็น API ในรายการ แสดงว่าทุกอย่างเรียบร้อยแล้ว หากไม่มี API ดังกล่าว ให้เปิดใช้ที่ https://console.cloud.google.com/apis/library/directions-backend.googleapis.com
ราคาและนโยบาย
ราคา
ดูข้อมูลเกี่ยวกับนโยบายราคาและการใช้งานสำหรับบริการเส้นทาง JavaScript ได้ที่การใช้งานและการเรียกเก็บเงินสำหรับ Directions API (เดิม)
นโยบาย
การใช้บริการเส้นทางต้องเป็นไปตามนโยบายที่อธิบายไว้สำหรับ Directions API (เดิม)
คำขอเส้นทาง
การเข้าถึงบริการเส้นทางเป็นแบบอะซิงโครนัส เนื่องจาก Google Maps API ต้องเรียกใช้เซิร์ฟเวอร์ภายนอก ด้วยเหตุนี้ คุณจึงต้องส่งเมธอด callback เพื่อดำเนินการเมื่อคำขอเสร็จสมบูรณ์ เมธอด Callback นี้ควรประมวลผลผลลัพธ์ โปรดทราบว่าบริการเส้นทางอาจแสดงแผนการเดินทางที่เป็นไปได้มากกว่า 1 รายการเป็นอาร์เรย์ของ routes[] ที่แยกกัน
หากต้องการใช้เส้นทางใน Maps JavaScript API ให้สร้างออบเจ็กต์ประเภท DirectionsService และเรียกใช้ DirectionsService.route() เพื่อเริ่มส่งคำขอไปยังบริการเส้นทาง โดยส่งออบเจ็กต์นิยามคู่ DirectionsRequest ที่มีคำที่ป้อนและเมธอด Callback เพื่อดำเนินการเมื่อได้รับการตอบกลับ
ออบเจ็กต์นิยามคู่ DirectionsRequest มีช่องต่อไปนี้
{ origin: LatLng | String | google.maps.Place, destination: LatLng | String | google.maps.Place, travelMode: TravelMode, transitOptions: TransitOptions, drivingOptions: DrivingOptions, unitSystem: UnitSystem, waypoints[]: DirectionsWaypoint, optimizeWaypoints: Boolean, provideRouteAlternatives: Boolean, avoidFerries: Boolean, avoidHighways: Boolean, avoidTolls: Boolean, region: String }
โดยช่องเหล่านี้มีคำอธิบายดังนี้
origin(ต้องระบุ) ระบุตำแหน่งเริ่มต้นที่จะใช้คำนวณเส้นทาง ค่านี้อาจระบุเป็นString(เช่น "Chicago, IL"), เป็นค่าLatLngหรือเป็นออบเจ็กต์ Place หากใช้ออบเจ็กต์ Place คุณสามารถระบุรหัสสถานที่ สตริงคำค้นหา หรือตำแหน่งLatLngได้ คุณสามารถดึงข้อมูลรหัสสถานที่จากบริการการเข้ารหัสพิกัดภูมิศาสตร์ การค้นหาสถานที่ และ Place Autocomplete ใน Maps JavaScript API ดูตัวอย่างการใช้รหัสสถานที่จาก Place Autocomplete ได้ที่การเติมข้อความอัตโนมัติสำหรับสถานที่และเส้นทางdestination(ต้องระบุ) ระบุสถานที่ปลายทางที่จะคำนวณเส้นทาง ตัวเลือกจะเหมือนกับช่องoriginที่อธิบายไว้ข้างต้นtravelMode(ต้องระบุ) ระบุรูปแบบการเดินทางที่จะใช้เมื่อคำนวณเส้นทาง ค่าที่ถูกต้องจะระบุไว้ในโหมดการเดินทางด้านล่างtransitOptions(ไม่บังคับ) ระบุค่าที่ใช้กับคำขอที่travelModeเป็นTRANSITเท่านั้น ค่าที่ถูกต้องจะอธิบายไว้ในตัวเลือกการขนส่งด้านล่างdrivingOptions(ไม่บังคับ) ระบุค่าที่ใช้กับคำขอที่travelModeเป็นDRIVINGเท่านั้น ค่าที่ถูกต้องจะอธิบายไว้ในตัวเลือกการขับขี่ด้านล่างunitSystem(ไม่บังคับ) ระบุระบบหน่วยที่จะใช้เมื่อแสดงผลลัพธ์ ค่าที่ถูกต้องจะระบุไว้ในระบบหน่วยด้านล่างwaypoints[](ไม่บังคับ) ระบุอาร์เรย์ของDirectionsWaypointจุดอ้างอิงจะเปลี่ยนเส้นทางโดยกำหนดเส้นทางผ่านสถานที่ที่ระบุ จุดอ้างอิงจะระบุเป็นออบเจ็กต์นิยามคู่ที่มีช่องที่แสดงด้านล่างlocationระบุตำแหน่งของจุดอ้างอิงเป็นLatLng, เป็นออบเจ็กต์ Place หรือเป็นStringซึ่งจะได้รับการเข้ารหัสพิกัดภูมิศาสตร์stopoverเป็นบูลีนที่ระบุว่าจุดอ้างอิงเป็นจุดแวะพักในเส้นทาง ซึ่งส่งผลให้เส้นทางแยกออกเป็น 2 เส้นทาง
(ดูข้อมูลเพิ่มเติมเกี่ยวกับจุดอ้างอิงได้ที่การใช้จุดอ้างอิงในเส้นทางด้านล่าง)
optimizeWaypoints(ไม่บังคับ) ระบุว่าเส้นทางที่ใช้waypointsที่ระบุอาจได้รับการเพิ่มประสิทธิภาพโดยการจัดเรียงจุดอ้างอิงใหม่ตามลำดับที่มีประสิทธิภาพมากขึ้น หากเป็นtrueบริการเส้นทางจะแสดงผลwaypointsที่เรียงลำดับใหม่ในช่องwaypoint_order(ดูข้อมูลเพิ่มเติมได้ที่การใช้จุดอ้างอิงในเส้นทางด้านล่าง)provideRouteAlternatives(ไม่บังคับ) เมื่อตั้งค่าเป็นtrueจะระบุว่าบริการเส้นทางอาจแสดงทางเลือกเส้นทางมากกว่า 1 เส้นทางในการตอบกลับ โปรดทราบว่าการระบุเส้นทางสำรองอาจเพิ่มเวลาในการตอบกลับจากเซิร์ฟเวอร์ ฟีเจอร์นี้ใช้ได้กับคำขอที่ไม่มีจุดอ้างอิงระหว่างทางเท่านั้นavoidFerries(ไม่บังคับ) เมื่อตั้งค่าเป็นtrueจะระบุว่าเส้นทางที่คำนวณควรหลีกเลี่ยงเรือข้ามฟาก หากเป็นไปได้avoidHighways(ไม่บังคับ) เมื่อตั้งค่าเป็นtrueจะระบุว่าเส้นทางที่คำนวณควรหลีกเลี่ยงทางหลวงสายหลัก หากเป็นไปได้avoidTolls(ไม่บังคับ) เมื่อตั้งค่าเป็นtrueจะระบุว่าเส้นทางที่คำนวณควรหลีกเลี่ยงทางพิเศษ หากเป็นไปได้region(ไม่บังคับ) ระบุรหัสภูมิภาค ซึ่งระบุเป็นค่า ccTLD ("โดเมนระดับบนสุด") 2 อักขระ (ดูข้อมูลเพิ่มเติมได้ที่การให้น้ำหนักภูมิภาคด้านล่าง)
ตัวอย่าง DirectionsRequest มีดังนี้
{ origin: 'Chicago, IL', destination: 'Los Angeles, CA', waypoints: [ { location: 'Joplin, MO', stopover: false },{ location: 'Oklahoma City, OK', stopover: true }], provideRouteAlternatives: false, travelMode: 'DRIVING', drivingOptions: { departureTime: new Date(/* now, or future date */), trafficModel: 'pessimistic' }, unitSystem: google.maps.UnitSystem.IMPERIAL }
โหมดการเดินทาง
เมื่อคำนวณเส้นทาง คุณต้องระบุรูปแบบการเดินทางที่จะใช้ ปัจจุบันระบบรองรับโหมดการเดินทางต่อไปนี้
DRIVING(ค่าเริ่มต้น) ระบุเส้นทางการขับขี่มาตรฐานโดยใช้เครือข่ายถนนBICYCLINGขอเส้นทางการปั่นจักรยานผ่านเส้นทางจักรยานและถนนที่ต้องการTRANSITขอเส้นทางผ่านเส้นทางขนส่งสาธารณะWALKINGขอเส้นทางเดินเท้าผ่านทางเท้าและทางเดิน
ดูรายละเอียดความครอบคลุมของ Google Maps Platform เพื่อพิจารณาว่าประเทศหนึ่งๆ รองรับเส้นทางมากน้อยเพียงใด หากคุณขอเส้นทางสำหรับภูมิภาคที่ไม่มีเส้นทางประเภทนั้น การตอบกลับจะแสดง DirectionsStatus="ZERO_RESULTS"
หมายเหตุ: เส้นทางเดินเท้าอาจไม่มีทางเท้าที่ชัดเจน ดังนั้นเส้นทางเดินเท้าจะแสดงคำเตือนใน DirectionsResult คำเตือนเหล่านี้ต้องแสดงต่อผู้ใช้เสมอ หากคุณไม่ได้ใช้ DirectionsRenderer เริ่มต้น คุณจะต้องรับผิดชอบในการตรวจสอบว่าคำเตือนแสดงขึ้น
ตัวเลือกขนส่งสาธารณะ
ตัวเลือกที่ใช้ได้สำหรับคำขอเส้นทางจะแตกต่างกันไปตามรูปแบบการเดินทาง
เมื่อขอเส้นทางขนส่งสาธารณะ ระบบจะไม่สนใจตัวเลือก avoidHighways, avoidTolls, waypoints[] และ optimizeWaypoints คุณระบุตัวเลือกการกำหนดเส้นทางที่เจาะจงสำหรับขนส่งสาธารณะได้ผ่านออบเจ็กต์นิยามคู่ TransitOptions
เส้นทางขนส่งสาธารณะจะขึ้นอยู่กับเวลา ระบบจะแสดงเส้นทางสำหรับเวลาในอนาคตเท่านั้น
ออบเจ็กต์นิยามคู่ TransitOptions ประกอบด้วยช่องต่อไปนี้
{ arrivalTime: Date, departureTime: Date, modes[]: TransitMode, routingPreference: TransitRoutePreference }
โดยช่องเหล่านี้มีคำอธิบายดังนี้
arrivalTime(ไม่บังคับ) ระบุเวลาที่ต้องการมาถึงเป็นออบเจ็กต์Dateหากระบุเวลาถึง ระบบจะไม่สนใจเวลาออกเดินทางdepartureTime(ไม่บังคับ) ระบุเวลาออกเดินทางที่ต้องการเป็นออบเจ็กต์Dateระบบจะไม่สนใจdepartureTimeหากมีการระบุarrivalTimeค่าเริ่มต้นจะเป็นตอนนี้ (นั่นคือ เวลาปัจจุบัน) หากไม่ได้ระบุค่าสำหรับdepartureTimeหรือarrivalTimemodes[](ไม่บังคับ) คืออาร์เรย์ที่มีออบเจ็กต์นิยามคู่TransitModeอย่างน้อย 1 รายการ ช่องนี้จะรวมได้ก็ต่อเมื่อคำขอมีคีย์ API เท่านั้นTransitModeแต่ละรายการจะระบุรูปแบบการขนส่งที่ต้องการ ค่าที่อนุญาตมีดังนี้BUSบ่งบอกว่าเส้นทางที่คำนวณควรเลือกการเดินทางโดยรถประจำทางRAILระบุว่าเส้นทางที่คำนวณควรเลือกเดินทางโดยรถไฟ รถราง รถไฟฟ้ารางเบา และรถไฟใต้ดินSUBWAYบ่งชี้ว่าเส้นทางที่คำนวณควรเลือกใช้การเดินทางโดยรถไฟใต้ดินTRAINบ่งบอกว่าเส้นทางที่คำนวณควรเลือกการเดินทางโดยรถไฟTRAMบ่งชี้ว่าเส้นทางที่คำนวณควรแนะนำการเดินทางโดยรถรางและรถไฟฟ้ารางเบา
routingPreference(ไม่บังคับ) ระบุค่ากำหนดสำหรับเส้นทางขนส่งสาธารณะ เมื่อใช้ตัวเลือกนี้ คุณจะให้น้ำหนักกับตัวเลือกที่แสดงผลได้ แทนที่จะยอมรับเส้นทางที่ดีที่สุดตามค่าเริ่มต้นที่ API เลือก ระบุช่องนี้ได้ก็ต่อเมื่อคำขอมีคีย์ API ค่าที่อนุญาตมีดังนี้FEWER_TRANSFERSระบุว่าเส้นทางที่คำนวณควรเลือกการเปลี่ยนเส้นทางแบบจำกัดจำนวนครั้งLESS_WALKINGระบุว่าเส้นทางที่คำนวณควรจำกัดการเดินให้น้อยที่สุด
ตัวอย่าง DirectionsRequest ตามการขนส่งสาธารณะแสดงอยู่ด้านล่าง
{ origin: 'Hoboken NJ', destination: 'Carroll Gardens, Brooklyn', travelMode: 'TRANSIT', transitOptions: { departureTime: new Date(1337675679473), modes: ['BUS'], routingPreference: 'FEWER_TRANSFERS' }, unitSystem: google.maps.UnitSystem.IMPERIAL }
ตัวเลือกการขับขี่
คุณระบุตัวเลือกการกำหนดเส้นทางสำหรับเส้นทางการขับขี่ได้ผ่านออบเจ็กต์ DrivingOptions
ออบเจ็กต์ DrivingOptions มีช่องต่อไปนี้
{ departureTime: Date, trafficModel: TrafficModel }
โดยช่องเหล่านี้มีคำอธิบายดังนี้
departureTime(ต้องระบุเพื่อให้ Object Literal ของdrivingOptionsถูกต้อง) ระบุเวลาออกเดินทางที่ต้องการเป็นออบเจ็กต์Dateโดยต้องตั้งค่าเป็นเวลาปัจจุบันหรือเวลาในอนาคต โดยต้องไม่เป็นวันที่ที่ผ่านมาแล้ว (API จะแปลงวันที่ทั้งหมดเป็น UTC เพื่อให้มั่นใจว่าการจัดการจะสอดคล้องกันในเขตเวลาต่างๆ) สำหรับลูกค้า Google Maps Platform แพ็กเกจพรีเมียม หากคุณรวมdepartureTimeไว้ในคำขอ API จะแสดงเส้นทางที่ดีที่สุดตามสภาพการจราจรที่คาดไว้ในขณะนั้น และรวมเวลาที่คาดการณ์ในการจราจร (duration_in_traffic) ไว้ในการตอบกลับ หากคุณไม่ได้ระบุเวลาออกเดินทาง (นั่นคือ หากคำขอไม่มีdrivingOptions) เส้นทางที่แสดงผลจะเป็นเส้นทางที่ดีโดยทั่วไปโดยไม่คำนึงถึงสภาพการจราจรtrafficModel(ไม่บังคับ) ระบุสมมติฐานที่จะใช้เมื่อคำนวณเวลาในการจราจร การตั้งค่านี้ส่งผลต่อค่าที่แสดงผลในช่องduration_in_trafficในการตอบกลับ ซึ่งมีเวลาที่คาดการณ์ในการจราจรตามค่าเฉลี่ยที่ผ่านมา ค่าเริ่มต้นคือbestguessค่าที่อนุญาตมีดังนี้bestguess(ค่าเริ่มต้น) บ่งชี้ว่าduration_in_trafficที่แสดงผลควรเป็นค่าประมาณที่ดีที่สุดของระยะเวลาเดินทาง โดยพิจารณาจากข้อมูลที่ทราบเกี่ยวกับทั้งสภาพการจราจรที่ผ่านมาและการจราจรแบบเรียลไทม์ การเข้าชมแบบเรียลไทม์จะมีความสำคัญมากขึ้นเมื่อdepartureTimeใกล้ถึงเวลาปัจจุบันpessimisticบ่งชี้ว่าduration_in_trafficที่แสดงผลควรนานกว่าระยะเวลาเดินทางจริงในวันส่วนใหญ่ แม้ว่าบางวันที่มีสภาพการจราจรแย่เป็นพิเศษอาจเกินค่านี้optimisticบ่งชี้ว่าduration_in_trafficที่แสดงผลควรสั้นกว่าระยะเวลาเดินทางจริงในวันส่วนใหญ่ แม้ว่าบางวันที่มีสภาพการจราจรดีเป็นพิเศษอาจเร็วกว่าค่านี้
ด้านล่างนี้คือตัวอย่าง DirectionsRequest สำหรับเส้นทางการขับขี่
{ origin: 'Chicago, IL', destination: 'Los Angeles, CA', travelMode: 'DRIVING', drivingOptions: { departureTime: new Date(Date.now() + N), // for the time N milliseconds from now. trafficModel: 'optimistic' } }
ระบบหน่วยวัด
โดยค่าเริ่มต้น ระบบจะคำนวณและแสดงเส้นทางโดยใช้ระบบหน่วยของประเทศหรือภูมิภาคต้นทาง
(หมายเหตุ: ต้นทางที่แสดงโดยใช้พิกัดละติจูด/ลองจิจูดแทนที่อยู่จะใช้หน่วยเมตริกเป็นค่าเริ่มต้นเสมอ) เช่น เส้นทางจาก "ชิคาโก อิลลินอยส์" ไปยัง "โตรอนโต ออนแทรีโอ" จะแสดงผลลัพธ์เป็นไมล์ ส่วนเส้นทางขากลับจะแสดงผลลัพธ์เป็นกิโลเมตร คุณสามารถลบล้างระบบหน่วยนี้ได้โดยการตั้งค่าอย่างชัดเจนภายในคำขอโดยใช้ค่า UnitSystem ค่าใดค่าหนึ่งต่อไปนี้
UnitSystem.METRICระบุการใช้ระบบเมตริก ระยะทางจะแสดงเป็นกิโลเมตรUnitSystem.IMPERIALระบุการใช้ระบบหน่วยวัดแบบอังกฤษ (English) ระยะทางจะแสดงเป็นไมล์
หมายเหตุ: การตั้งค่าระบบหน่วยนี้จะมีผลกับข้อความที่แสดงต่อผู้ใช้เท่านั้น ผลลัพธ์เส้นทางยังมีค่าระยะทางซึ่งไม่ได้แสดงต่อผู้ใช้ โดยจะแสดงเป็นเมตรเสมอ
การให้น้ำหนักพิเศษกับบางภูมิภาคสำหรับเส้นทาง
บริการเส้นทางของ Google Maps API จะแสดงผลลัพธ์ที่อยู่ซึ่งได้รับอิทธิพลจากโดเมน (ภูมิภาคหรือประเทศ) ที่คุณโหลด JavaScript บูตสแตรป (เนื่องจากผู้ใช้ส่วนใหญ่โหลด https://maps.googleapis.com/
ซึ่งจะตั้งค่าโดเมนโดยนัยเป็นสหรัฐอเมริกา) หากคุณโหลด Bootstrap จากโดเมนอื่นที่รองรับ คุณจะได้รับผลลัพธ์ที่ได้รับอิทธิพลจากโดเมนนั้น ตัวอย่างเช่น การค้นหา "San Francisco" อาจแสดงผลลัพธ์ที่แตกต่างกันจากแอปพลิเคชันที่โหลด https://maps.googleapis.com/ (สหรัฐอเมริกา) กับแอปพลิเคชันที่โหลด http://maps.google.es/ (สเปน)
นอกจากนี้ คุณยังตั้งค่าบริการเส้นทางให้แสดงผลลัพธ์ที่ให้น้ำหนักไปทางภูมิภาคใดภูมิภาคหนึ่งโดยเฉพาะได้ โดยใช้พารามิเตอร์ region พารามิเตอร์นี้จะใช้รหัสภูมิภาคที่ระบุเป็นแท็กย่อยของภูมิภาค Unicode แบบ 2 อักขระ (ไม่ใช่ตัวเลข) ในกรณีส่วนใหญ่ แท็กเหล่านี้จะแมปโดยตรงกับค่า 2 อักขระของ ccTLD ("โดเมนระดับบนสุด") เช่น "uk" ใน "co.uk" เป็นต้น ในบางกรณี แท็ก region ยังรองรับรหัส ISO-3166-1 ซึ่งบางครั้งอาจแตกต่างจากค่า ccTLD (เช่น "GB" สำหรับ "Great Britain")
เมื่อใช้พารามิเตอร์ region
- ระบุประเทศหรือภูมิภาคเพียงแห่งเดียว ระบบจะไม่สนใจค่าหลายค่า และอาจส่งผลให้คำขอล้มเหลว
- ใช้แท็กย่อยของภูมิภาคที่มีอักขระ 2 ตัวเท่านั้น (รูปแบบ Unicode CLDR) ส่วนอินพุตอื่นๆ ทั้งหมดจะส่งผลให้เกิดข้อผิดพลาด
ระบบรองรับการให้น้ำหนักภูมิภาคเฉพาะในประเทศและภูมิภาคที่รองรับเส้นทางเท่านั้น ดูรายละเอียดความครอบคลุมของ Google Maps Platform เพื่อดูความครอบคลุมระหว่างประเทศของ Directions API (เดิม)
การแสดงเส้นทาง
การเริ่มต้นคำขอเส้นทางไปยัง DirectionsService ด้วยเมธอด route() ต้องส่งผ่าน Callback ซึ่งจะทำงานเมื่อคำขอบริการเสร็จสมบูรณ์ Callback นี้จะแสดงผล DirectionsResult และรหัส DirectionsStatus ในการตอบกลับ
สถานะของการค้นหาเส้นทาง
DirectionsStatus อาจแสดงผลค่าต่อไปนี้
OKบ่งชี้ว่าการตอบกลับมีDirectionsResultที่ถูกต้องNOT_FOUNDบ่งชี้ว่าไม่สามารถเข้ารหัสพิกัดภูมิศาสตร์ของสถานที่ตั้งอย่างน้อย 1 แห่งที่ระบุในต้นทาง ปลายทาง หรือจุดอ้างอิงของคำขอZERO_RESULTSบ่งชี้ว่าไม่พบเส้นทางระหว่างต้นทางและปลายทางMAX_WAYPOINTS_EXCEEDEDบ่งชี้ว่ามีช่องDirectionsWaypointมากเกินไปในDirectionsRequestดูส่วนด้านล่างเกี่ยวกับขีดจำกัดสำหรับจุดอ้างอิงMAX_ROUTE_LENGTH_EXCEEDEDบ่งชี้ว่าเส้นทางที่ขอมีความยาวเกินไปและไม่สามารถประมวลผลได้ ข้อผิดพลาดนี้จะเกิดขึ้นเมื่อระบบแสดงเส้นทางที่ซับซ้อนมากขึ้น ลองลดจำนวนจุดอ้างอิง การเลี้ยว หรือคำสั่งINVALID_REQUESTบ่งชี้ว่าDirectionsRequestที่ระบุไม่ถูกต้อง สาเหตุที่พบบ่อยที่สุดของรหัสข้อผิดพลาดนี้คือคำขอที่ไม่มีต้นทางหรือปลายทาง หรือคำขอขนส่งสาธารณะที่มีจุดอ้างอิงOVER_QUERY_LIMITบ่งชี้ว่าหน้าเว็บได้ส่งคำขอมากเกินไปภายในระยะเวลาที่อนุญาตREQUEST_DENIEDบ่งชี้ว่าหน้าเว็บไม่ได้รับอนุญาตให้ใช้บริการเส้นทางUNKNOWN_ERRORบ่งชี้ว่าไม่สามารถประมวลผลคำขอเส้นทางได้เนื่องจากข้อผิดพลาดเกี่ยวกับเซิร์ฟเวอร์ คำขออาจสำเร็จหากคุณลองอีกครั้ง
คุณควรตรวจสอบว่าคำค้นหาเส้นทางแสดงผลลัพธ์ที่ถูกต้องโดยตรวจสอบค่านี้ก่อนประมวลผลผลลัพธ์
การแสดง DirectionsResult
DirectionsResult มีผลลัพธ์ของคำค้นหาเส้นทาง ซึ่งคุณอาจจัดการเองหรือส่งไปยังออบเจ็กต์ DirectionsRenderer ซึ่งสามารถจัดการการแสดงผลลัพธ์บนแผนที่โดยอัตโนมัติ
หากต้องการแสดง DirectionsResult โดยใช้ DirectionsRenderer คุณต้องทำดังนี้
- สร้างออบเจ็กต์
DirectionsRenderer - เรียก
setMap()ในโปรแกรมแสดงผลเพื่อเชื่อมโยงกับแผนที่ที่ส่งมา - เรียกใช้
setDirections()ในโปรแกรมแสดงผล โดยส่งDirectionsResultตามที่ระบุไว้ข้างต้น เนื่องจากตัวแสดงผลเป็นMVCObjectระบบจะตรวจหาการเปลี่ยนแปลงพร็อพเพอร์ตี้โดยอัตโนมัติและอัปเดตแผนที่เมื่อเส้นทางที่เชื่อมโยงมีการเปลี่ยนแปลง
ตัวอย่างต่อไปนี้จะคำนวณเส้นทางระหว่างสถานที่ 2 แห่งบน Route 66 โดยที่ต้นทางและปลายทางจะกำหนดโดยค่า "start" และ "end" ที่ระบุในรายการแบบเลื่อนลง DirectionsRenderer จะจัดการการแสดงผลของเส้นประกอบระหว่างสถานที่ที่ระบุ และการวางเครื่องหมายที่จุดเริ่มต้น ปลายทาง และจุดอ้างอิง (หากมี)
function initMap() { var directionsService = new google.maps.DirectionsService(); var directionsRenderer = new google.maps.DirectionsRenderer(); var chicago = new google.maps.LatLng(41.850033, -87.6500523); var mapOptions = { zoom:7, center: chicago } var map = new google.maps.Map(document.getElementById('map'), mapOptions); directionsRenderer.setMap(map); } function calcRoute() { var start = document.getElementById('start').value; var end = document.getElementById('end').value; var request = { origin: start, destination: end, travelMode: 'DRIVING' }; directionsService.route(request, function(result, status) { if (status == 'OK') { directionsRenderer.setDirections(result); } }); }
ในเนื้อหา HTML ให้ทำดังนี้
<div> <strong>Start: </strong> <select id="start" onchange="calcRoute();"> <option value="chicago, il">Chicago</option> <option value="st louis, mo">St Louis</option> <option value="joplin, mo">Joplin, MO</option> <option value="oklahoma city, ok">Oklahoma City</option> <option value="amarillo, tx">Amarillo</option> <option value="gallup, nm">Gallup, NM</option> <option value="flagstaff, az">Flagstaff, AZ</option> <option value="winona, az">Winona</option> <option value="kingman, az">Kingman</option> <option value="barstow, ca">Barstow</option> <option value="san bernardino, ca">San Bernardino</option> <option value="los angeles, ca">Los Angeles</option> </select> <strong>End: </strong> <select id="end" onchange="calcRoute();"> <option value="chicago, il">Chicago</option> <option value="st louis, mo">St Louis</option> <option value="joplin, mo">Joplin, MO</option> <option value="oklahoma city, ok">Oklahoma City</option> <option value="amarillo, tx">Amarillo</option> <option value="gallup, nm">Gallup, NM</option> <option value="flagstaff, az">Flagstaff, AZ</option> <option value="winona, az">Winona</option> <option value="kingman, az">Kingman</option> <option value="barstow, ca">Barstow</option> <option value="san bernardino, ca">San Bernardino</option> <option value="los angeles, ca">Los Angeles</option> </select> </div>
ตัวอย่างต่อไปนี้แสดงเส้นทางโดยใช้รูปแบบการเดินทางที่แตกต่างกันระหว่าง Haight-Ashbury ไปยัง Ocean Beach ในซานฟรานซิสโก รัฐแคลิฟอร์เนีย
function initMap() { var directionsService = new google.maps.DirectionsService(); var directionsRenderer = new google.maps.DirectionsRenderer(); var haight = new google.maps.LatLng(37.7699298, -122.4469157); var oceanBeach = new google.maps.LatLng(37.7683909618184, -122.51089453697205); var mapOptions = { zoom: 14, center: haight } var map = new google.maps.Map(document.getElementById('map'), mapOptions); directionsRenderer.setMap(map); } function calcRoute() { var selectedMode = document.getElementById('mode').value; var request = { origin: haight, destination: oceanBeach, // Note that JavaScript allows us to access the constant // using square brackets and a string value as its // "property." travelMode: google.maps.TravelMode[selectedMode] }; directionsService.route(request, function(response, status) { if (status == 'OK') { directionsRenderer.setDirections(response); } }); }
ในเนื้อหา HTML ให้ทำดังนี้
<div> <strong>Mode of Travel: </strong> <select id="mode" onchange="calcRoute();"> <option value="DRIVING">Driving</option> <option value="WALKING">Walking</option> <option value="BICYCLING">Bicycling</option> <option value="TRANSIT">Transit</option> </select> </div>
DirectionsRenderer ไม่เพียงแต่จัดการการแสดงผลของเส้นประกอบและเครื่องหมายที่เกี่ยวข้องเท่านั้น แต่ยังจัดการการแสดงผลข้อความของเส้นทางเป็นชุดขั้นตอนได้ด้วย โดยเรียกใช้ setPanel() ใน DirectionsRenderer และส่ง <div> ที่จะแสดงข้อมูลนี้
การดำเนินการนี้ยังช่วยให้มั่นใจว่าคุณแสดงข้อมูลลิขสิทธิ์ที่เหมาะสมและคำเตือนที่อาจเกี่ยวข้องกับผลลัพธ์
ระบบจะแสดงคำแนะนำแบบข้อความโดยใช้การตั้งค่าภาษาที่ต้องการของเบราว์เซอร์ หรือภาษาที่ระบุเมื่อโหลด JavaScript ของ API โดยใช้พารามิเตอร์ language (ดูข้อมูลเพิ่มเติมได้ที่
การแปลภาษา) ในกรณีของเส้นทางขนส่งสาธารณะ เวลาจะแสดงตามเขตเวลาที่ป้ายจอดรถของขนส่งสาธารณะนั้น
ตัวอย่างต่อไปนี้เหมือนกับตัวอย่างที่แสดงด้านบน แต่มีแผง <div> เพื่อแสดงเส้นทาง
function initMap() { var directionsService = new google.maps.DirectionsService(); var directionsRenderer = new google.maps.DirectionsRenderer(); var chicago = new google.maps.LatLng(41.850033, -87.6500523); var mapOptions = { zoom:7, center: chicago } var map = new google.maps.Map(document.getElementById('map'), mapOptions); directionsRenderer.setMap(map); directionsRenderer.setPanel(document.getElementById('directionsPanel')); } function calcRoute() { var start = document.getElementById('start').value; var end = document.getElementById('end').value; var request = { origin:start, destination:end, travelMode: 'DRIVING' }; directionsService.route(request, function(response, status) { if (status == 'OK') { directionsRenderer.setDirections(response); } }); }
ในเนื้อหา HTML ให้ทำดังนี้
<div id="map" style="float:left;width:70%;height:100%"></div> <div id="directionsPanel" style="float:right;width:30%;height:100%"></div>
ออบเจ็กต์ DirectionsResult
เมื่อส่งคำขอเส้นทางไปยัง DirectionsService คุณจะได้รับการตอบกลับซึ่งประกอบด้วยรหัสสถานะและผลลัพธ์ ซึ่งเป็นออบเจ็กต์ DirectionsResult DirectionsResult คือออบเจ็กต์นิยามคู่ที่มีช่องต่อไปนี้
geocoded_waypoints[]มีอาร์เรย์ของออบเจ็กต์DirectionsGeocodedWaypointซึ่งแต่ละออบเจ็กต์มีรายละเอียดเกี่ยวกับการเข้ารหัสพิกัดภูมิศาสตร์ของต้นทาง ปลายทาง และจุดอ้างอิงroutes[]มีอาร์เรย์ของออบเจ็กต์DirectionsRouteแต่ละเส้นทางจะระบุวิธีเดินทางจากต้นทางไปยังจุดหมายที่ระบุไว้ในDirectionsRequestโดยทั่วไป ระบบจะแสดงผลเพียงเส้นทางเดียวสำหรับคำขอหนึ่งๆ เว้นแต่จะมีการตั้งค่าฟิลด์provideRouteAlternativesของคำขอเป็นtrueซึ่งในกรณีนี้ ระบบอาจแสดงผลหลายเส้นทาง
หมายเหตุ: พร็อพเพอร์ตี้ via_waypoint เลิกใช้งานแล้วในเส้นทางอื่น เวอร์ชัน 3.27 เป็นเวอร์ชันสุดท้ายของ API ที่เพิ่มจุดอ้างอิงผ่านเพิ่มเติมในเส้นทางอื่น สำหรับ API เวอร์ชัน 3.28 ขึ้นไป คุณสามารถใช้เส้นทางที่ลากได้ต่อไปโดยใช้บริการเส้นทางโดยปิดใช้การลากเส้นทางอื่น
เฉพาะเส้นทางหลักเท่านั้นที่ควรลากได้ ผู้ใช้สามารถลากเส้นทางหลักจนกว่าจะตรงกับเส้นทางอื่น
จุดอ้างอิงที่เข้ารหัสพิกัดภูมิศาสตร์ของเส้นทาง
DirectionsGeocodedWaypoint มีรายละเอียดเกี่ยวกับการเข้ารหัสพิกัดภูมิศาสตร์ของต้นทาง ปลายทาง และจุดอ้างอิง
DirectionsGeocodedWaypoint คือ Object Literal ที่มีช่องต่อไปนี้
geocoder_statusระบุรหัสสถานะที่ได้จากการดำเนินการเข้ารหัสพิกัดภูมิศาสตร์ ช่องนี้อาจมีค่าต่อไปนี้"OK"บ่งบอกว่าไม่มีข้อผิดพลาดเกิดขึ้น ระบบแยกวิเคราะห์ที่อยู่เรียบร้อยแล้ว และแสดงผลรหัสพิกัดภูมิศาสตร์อย่างน้อย 1 รายการ"ZERO_RESULTS"บ่งชี้ว่าการเข้ารหัสพิกัดภูมิศาสตร์สำเร็จ แต่ไม่แสดงผลลัพธ์ กรณีนี้อาจเกิดขึ้นหากโปรแกรมเข้ารหัสพิกัดภูมิศาสตร์ได้รับaddressที่ไม่มีอยู่
-
partial_matchบ่งชี้ว่าโปรแกรมเข้ารหัสพิกัดภูมิศาสตร์ไม่แสดงผลลัพธ์ที่ตรงทั้งหมดกับคำขอเดิม แม้ว่าจะสามารถจับคู่ส่วนหนึ่งของที่อยู่ที่ขอได้ก็ตาม คุณอาจต้องตรวจสอบคำขอเดิมเพื่อหาการสะกดผิดและ/หรือที่อยู่ที่ไม่สมบูรณ์การจับคู่บางส่วนมักเกิดขึ้นกับที่อยู่ซึ่งไม่มีอยู่จริงในท้องถิ่นที่คุณส่งมาในคำขอ ระบบอาจแสดงผลการจับคู่บางส่วนด้วยเมื่อคำขอตรงกับสถานที่ตั้ง 2 แห่งขึ้นไปในท้องถิ่นเดียวกัน เช่น "Hillpar St, Bristol, UK" จะแสดงผลการจับคู่บางส่วนสำหรับทั้ง Henry Street และ Henrietta Street โปรดทราบว่าหากคำขอมีคอมโพเนนต์ที่อยู่ซึ่งสะกดผิด บริการเข้ารหัสพิกัดภูมิศาสตร์อาจแนะนำที่อยู่อื่น คำแนะนำที่เรียกใช้ด้วยวิธีนี้จะได้รับการทำเครื่องหมายว่าตรงกันบางส่วนด้วย
place_idคือตัวระบุที่ไม่ซ้ำกันของสถานที่ ซึ่งสามารถใช้กับ Google APIs อื่นๆ ได้ ตัวอย่างเช่น คุณสามารถใช้place_idกับไลบรารี Google Places API เพื่อดูรายละเอียดของธุรกิจในพื้นที่ เช่น หมายเลขโทรศัพท์ เวลาทำการ รีวิวจากผู้ใช้ และอื่นๆ ดูภาพรวมรหัสสถานที่types[]คืออาร์เรย์ที่ระบุประเภทของผลลัพธ์ที่แสดงผล อาร์เรย์นี้มีชุดแท็กอย่างน้อย 0 รายการที่ระบุประเภทของฟีเจอร์ที่แสดงในผลลัพธ์ ตัวอย่างเช่น รหัสพิกัดภูมิศาสตร์ของ "ชิคาโก" จะแสดงผล "locality" ซึ่งบ่งบอกว่า "ชิคาโก" เป็นเมือง และยังแสดงผล "political" ซึ่งบ่งบอกว่าเป็นหน่วยงานทางการเมืองด้วย
เส้นทาง
หมายเหตุ: ออบเจ็กต์ DirectionsTrip เดิมเปลี่ยนชื่อเป็น DirectionsRoute แล้ว โปรดทราบว่าตอนนี้เส้นทางหมายถึงการเดินทางทั้งหมดตั้งแต่ต้นจนจบ ไม่ใช่แค่ช่วงหนึ่งของการเดินทางหลัก
DirectionsRoute มีผลลัพธ์เดียวจากต้นทางและปลายทางที่ระบุ เส้นทางนี้อาจประกอบด้วยช่วงการเดินทางอย่างน้อย 1 ช่วง (ประเภท DirectionsLeg) โดยขึ้นอยู่กับว่ามีการระบุจุดอ้างอิงหรือไม่ นอกจากนี้ เส้นทางยังมีข้อมูลลิขสิทธิ์และคำเตือนซึ่งต้องแสดงต่อผู้ใช้นอกเหนือจากข้อมูลการกำหนดเส้นทาง
DirectionsRoute คือ Object Literal ที่มีช่องต่อไปนี้
legs[]มีอาร์เรย์ของออบเจ็กต์DirectionsLegซึ่งแต่ละออบเจ็กต์มีข้อมูลเกี่ยวกับช่วงของเส้นทางจากสถานที่ 2 แห่งภายในเส้นทางที่ระบุ ระบบจะแสดงเส้นทางแยกกันสำหรับจุดอ้างอิงหรือจุดหมายแต่ละแห่งที่ระบุ (เส้นทางที่ไม่มีจุดอ้างอิงจะมีDirectionsLegเพียง 1 รายการ) แต่ละช่วงประกอบด้วยDirectionStepหลายรายการwaypoint_orderมีอาร์เรย์ที่ระบุลำดับของจุดอ้างอิงในเส้นทางที่คำนวณ อาร์เรย์นี้อาจมีลำดับที่เปลี่ยนแปลงหากมีการส่งDirectionsRequestoptimizeWaypoints: trueoverview_pathมีอาร์เรย์ของLatLngที่แสดงเส้นทางโดยประมาณ (ปรับให้ราบรื่น) ของเส้นทางที่ได้overview_polylineมีออบเจ็กต์pointsรายการเดียวที่เก็บการแสดงเส้นประกอบที่เข้ารหัสของเส้นทาง เส้นประกอบนี้เป็นเส้นทางโดยประมาณ (ปรับให้ราบรื่น) ของเส้นทางที่ได้boundsมีLatLngBoundsที่ระบุขอบเขตของเส้นประกอบตามเส้นทางที่ระบุนี้copyrightsมีข้อความลิขสิทธิ์ที่จะแสดงสำหรับเส้นทางนี้warnings[]มีอาร์เรย์ของคำเตือนที่จะแสดงเมื่อแสดงเส้นทางเหล่านี้ หากไม่ใช้ออบเจ็กต์DirectionsRendererที่ให้มา คุณต้องจัดการและแสดงคำเตือนเหล่านี้ด้วยตนเองfareมีค่าโดยสารทั้งหมด (นั่นคือ ค่าตั๋วทั้งหมด) ในเส้นทางนี้ ระบบจะแสดงพร็อพเพอร์ตี้นี้สำหรับคำขอขนส่งสาธารณะและเฉพาะเส้นทางที่มีข้อมูลค่าโดยสารสำหรับทุกช่วงการเดินทางด้วยขนส่งสาธารณะเท่านั้น ข้อมูลดังกล่าวประกอบด้วยcurrency: รหัสสกุลเงิน ISO 4217 ที่ระบุสกุลเงินที่ใช้แสดงจำนวนเงินvalue: จำนวนค่าโดยสารทั้งหมดในสกุลเงินที่ระบุไว้ด้านบน
เส้นทาง
หมายเหตุ: ออบเจ็กต์ DirectionsRoute เดิมเปลี่ยนชื่อเป็น DirectionsLeg แล้ว
DirectionsLeg กำหนดช่วงการเดินทางช่วงเดียวจากต้นทางไปยังจุดหมายในเส้นทางที่คำนวณ
สำหรับเส้นทางที่ไม่มีจุดอ้างอิง เส้นทางจะประกอบด้วย "ช่วง" เดียว แต่สำหรับเส้นทางที่กำหนดจุดอ้างอิงอย่างน้อย 1 จุด เส้นทางจะประกอบด้วยช่วงอย่างน้อย 1 ช่วง ซึ่งสอดคล้องกับช่วงที่เฉพาะเจาะจงของการเดินทาง
DirectionsLeg คือออบเจ็กต์นิยามคู่ที่มีฟิลด์ต่อไปนี้
steps[]มีอาร์เรย์ของออบเจ็กต์DirectionsStepที่แสดงข้อมูลเกี่ยวกับแต่ละขั้นตอนแยกกันของช่วงการเดินทางdistanceระบุระยะทางทั้งหมดที่ครอบคลุมโดยช่วงนี้เป็นออบเจ็กต์Distanceในรูปแบบต่อไปนี้valueระบุระยะทางเป็นเมตรtextมีการแสดงสตริงของระยะทาง ซึ่งโดยค่าเริ่มต้นจะแสดงเป็นหน่วยที่ใช้ที่ต้นทาง (เช่น ระบบจะใช้หน่วยไมล์สำหรับต้นทางที่อยู่ในสหรัฐอเมริกา) คุณอาจลบล้างระบบหน่วยวัดนี้ได้โดยตั้งค่าUnitSystemในการค้นหาเดิมโดยเฉพาะ โปรดทราบว่าไม่ว่าคุณจะใช้ระบบหน่วยใด ช่องdistance.valueจะมีค่าที่แสดงเป็นเมตรเสมอ
ระบบอาจไม่ได้กำหนดฟิลด์เหล่านี้หากไม่ทราบระยะทาง
durationระบุระยะเวลาทั้งหมดของช่วงนี้เป็นออบเจ็กต์Durationในรูปแบบต่อไปนี้valueหมายถึงระยะเวลาเป็นวินาทีtextมีการแสดงสตริงของระยะเวลา
ระบบอาจไม่ได้กำหนดฟิลด์เหล่านี้หากไม่ทราบระยะเวลา
duration_in_trafficระบุระยะเวลารวมของช่วงนี้ โดยพิจารณาจากสภาพการจราจรในปัจจุบัน ระบบจะแสดงผลduration_in_trafficก็ต่อเมื่อเป็นไปตามเงื่อนไขต่อไปนี้ทั้งหมด- คำขอไม่มีจุดอ้างอิงสำหรับการแวะพัก กล่าวคือ ไม่รวมจุดอ้างอิงที่
stopoverเป็นtrue - คำขอมีไว้สำหรับเส้นทางการขับขี่โดยเฉพาะ โดยตั้งค่า
modeเป็นdriving departureTimeจะรวมเป็นส่วนหนึ่งของฟิลด์drivingOptionsในคำขอ- สภาพการจราจรพร้อมใช้งานสำหรับเส้นทางที่ขอ
duration_in_trafficมีช่องต่อไปนี้valueหมายถึงระยะเวลาเป็นวินาทีtextมีการแสดงระยะเวลาที่มนุษย์อ่านได้
- คำขอไม่มีจุดอ้างอิงสำหรับการแวะพัก กล่าวคือ ไม่รวมจุดอ้างอิงที่
arrival_timeมีเวลาถึงโดยประมาณสำหรับช่วงนี้ ระบบจะแสดงพร็อพเพอร์ตี้นี้สำหรับเส้นทางขนส่งสาธารณะเท่านั้น ระบบจะแสดงผลลัพธ์เป็นออบเจ็กต์Timeที่มีพร็อพเพอร์ตี้ 3 รายการ ดังนี้valueเวลาที่ระบุเป็นออบเจ็กต์DateJavaScripttextเวลาที่ระบุเป็นสตริง ระบบจะแสดงเวลาตามเขตเวลาของป้ายจอดรถสาธารณะtime_zoneมีเขตเวลาของสถานีนี้ ค่าคือชื่อของเขตเวลาตามที่ระบุไว้ในฐานข้อมูลเขตเวลา IANA เช่น "America/New_York"
departure_timeมีเวลาออกเดินทางโดยประมาณสำหรับช่วงนี้ ซึ่งระบุเป็นออบเจ็กต์Timedeparture_timeใช้ได้กับเส้นทางขนส่งสาธารณะเท่านั้นstart_locationมีLatLngของต้นทางของเส้นทางนี้ เนื่องจากเว็บเซอร์วิสเส้นทางจะคำนวณเส้นทางระหว่างสถานที่ต่างๆ โดยใช้ตัวเลือกการขนส่งที่ใกล้ที่สุด (โดยปกติจะเป็นถนน) ที่จุดเริ่มต้นและจุดสิ้นสุดstart_locationจึงอาจแตกต่างจากต้นทางที่ระบุของช่วงนี้ เช่น หากถนนไม่ได้อยู่ใกล้กับต้นทางend_locationมีLatLngของจุดหมายของการเดินทางช่วงนี้ เนื่องจากDirectionsServiceคำนวณเส้นทางระหว่างสถานที่ต่างๆ โดยใช้ตัวเลือกการขนส่งที่ใกล้ที่สุด (โดยปกติคือถนน) ที่จุดเริ่มต้นและจุดสิ้นสุดend_locationจึงอาจแตกต่างจากจุดหมายที่ระบุไว้ของช่วงนี้ เช่น หากถนนไม่ได้อยู่ใกล้จุดหมายstart_addressมีที่อยู่ที่มนุษย์อ่านได้ (โดยทั่วไปคือที่อยู่) ของจุดเริ่มต้นของช่วงนี้
เนื้อหานี้มีไว้เพื่อให้อ่านตามที่เป็นอยู่ อย่าแยกวิเคราะห์ที่อยู่ที่จัดรูปแบบแล้วแบบเป็นโปรแกรมend_addressมีที่อยู่ที่มนุษย์อ่านได้ (โดยทั่วไปคือที่อยู่) ของจุดสิ้นสุดของช่วงนี้
เนื้อหานี้มีไว้เพื่อให้อ่านตามที่เป็นอยู่ อย่าแยกวิเคราะห์ที่อยู่ที่จัดรูปแบบแล้วแบบเป็นโปรแกรม
ขั้นตอนการขอเส้นทาง
DirectionsStep คือหน่วยที่เล็กที่สุดของเส้นทางในคำแนะนำ โดยมีขั้นตอนเดียวที่อธิบายคำสั่งเฉพาะรายการเดียวในการเดินทาง เช่น "เลี้ยวซ้ายที่ถนน W. 4th St." ขั้นตอนไม่เพียงอธิบายคำสั่งเท่านั้น แต่ยังมีข้อมูลระยะทางและระยะเวลาที่เกี่ยวข้องกับความสัมพันธ์ของขั้นตอนนี้กับขั้นตอนต่อไปด้วย
ตัวอย่างเช่น ขั้นตอนที่ระบุว่า "เข้าสู่ I-80 West" อาจมีระยะเวลา "37 ไมล์" และ "40 นาที" ซึ่งบ่งชี้ว่าขั้นตอนถัดไปอยู่ห่างจากขั้นตอนนี้ 37 ไมล์/40 นาที
เมื่อใช้บริการเส้นทางเพื่อค้นหาเส้นทางขนส่งสาธารณะ อาร์เรย์ขั้นตอนจะมีข้อมูลเฉพาะเกี่ยวกับการขนส่งสาธารณะเพิ่มเติมในรูปแบบของออบเจ็กต์ transit หากเส้นทางมีรูปแบบการเดินทางหลายรูปแบบ ระบบจะแสดงเส้นทางแบบละเอียดสำหรับขั้นตอนการเดินหรือการขับรถในอาร์เรย์ steps[]
ตัวอย่างเช่น ขั้นตอนการเดินจะรวมเส้นทางจากสถานที่เริ่มต้นและสถานที่สิ้นสุด: "เดินไปที่ Innes Ave และ Fitch St" ขั้นตอนดังกล่าวจะรวมเส้นทางเดินเท้าโดยละเอียดสำหรับเส้นทางนั้นในอาร์เรย์ steps[] เช่น "มุ่งหน้าไปทางตะวันตกเฉียงเหนือ" "เลี้ยวซ้ายเข้าสู่ Arelious Walker" และ "เลี้ยวซ้ายเข้าสู่ Innes Ave"
DirectionsStep คือออบเจ็กต์นิยามคู่ที่มีฟิลด์ต่อไปนี้
instructionsมีวิธีการสำหรับขั้นตอนนี้ภายในสตริงข้อความdistanceมีระยะทางที่ครอบคลุมโดยขั้นตอนนี้จนถึงขั้นตอนถัดไปเป็นออบเจ็กต์Distance(ดูคำอธิบายในDirectionsLegด้านบน) ช่องนี้อาจไม่ได้กำหนดไว้หากไม่ทราบระยะทางdurationมีค่าประมาณของเวลาที่ต้องใช้ในการดำเนินการตามขั้นตอนจนถึงขั้นตอนถัดไปเป็นออบเจ็กต์Duration(ดูคำอธิบายในDirectionsLegด้านบน) ช่องนี้อาจไม่ได้กำหนดไว้หากไม่ทราบระยะเวลาstart_locationมีLatLngที่เข้ารหัสพิกัดภูมิศาสตร์ของจุดเริ่มต้นของขั้นตอนนี้end_locationมีLatLngของจุดสิ้นสุดของขั้นตอนนี้polylineมีออบเจ็กต์pointsรายการเดียวซึ่งเก็บการแสดงเส้นประกอบที่เข้ารหัสของขั้นตอน เส้นประกอบนี้เป็นเส้นทางโดยประมาณ (ปรับให้ราบรื่น) ของขั้นตอนsteps[]ออบเจ็กต์นิยามคู่DirectionsStepที่มีเส้นทางโดยละเอียดสำหรับขั้นตอนการเดินหรือขับรถในเส้นทางขนส่งสาธารณะ ขั้นตอนย่อยใช้ได้กับเส้นทางขนส่งสาธารณะเท่านั้นtravel_modeมีTravelModeที่ใช้ในขั้นตอนนี้ เส้นทางขนส่งสาธารณะอาจรวมถึงเส้นทางเดินและเส้นทางขนส่งสาธารณะpathมีอาร์เรย์ของLatLngsที่อธิบายขั้นตอนของขั้นตอนนี้transitมีข้อมูลเฉพาะเกี่ยวกับการขนส่งสาธารณะ เช่น เวลาที่มาถึงและเวลาที่ออกเดินทาง รวมถึงชื่อสายขนส่งสาธารณะ
ข้อมูลเฉพาะของขนส่งสาธารณะ
เส้นทางขนส่งสาธารณะจะแสดงข้อมูลเพิ่มเติมที่ไม่เกี่ยวข้องกับรูปแบบการเดินทางอื่นๆ พร็อพเพอร์ตี้เพิ่มเติมเหล่านี้จะแสดงผ่านออบเจ็กต์ TransitDetails ซึ่งแสดงผลเป็นพร็อพเพอร์ตี้ของ DirectionsStep จากออบเจ็กต์ TransitDetails คุณสามารถเข้าถึงข้อมูลเพิ่มเติมสำหรับออบเจ็กต์ TransitStop, TransitLine, TransitAgency และ VehicleType ตามที่อธิบายไว้ด้านล่าง
รายละเอียดขนส่งสาธารณะ
ออบเจ็กต์ TransitDetails จะแสดงพร็อพเพอร์ตี้ต่อไปนี้
arrival_stopมีออบเจ็กต์TransitStopที่แสดงสถานี/ป้ายที่มาถึงซึ่งมีพร็อพเพอร์ตี้ต่อไปนี้nameชื่อสถานีขนส่ง/ป้ายจอดรถ เช่น "Union Square"locationตำแหน่งของสถานี/ป้ายหยุดรถขนส่งสาธารณะ ซึ่งแสดงเป็นLatLng
departure_stopมีออบเจ็กต์TransitStopที่แสดงสถานี/ป้ายรถเมล์ต้นทางarrival_timeมีเวลาถึงที่ระบุเป็นออบเจ็กต์Timeที่มีพร็อพเพอร์ตี้ 3 รายการ ดังนี้valueเวลาที่ระบุเป็นออบเจ็กต์DateJavaScripttextเวลาที่ระบุเป็นสตริง ระบบจะแสดงเวลาตามเขตเวลาของป้ายจอดรถสาธารณะtime_zoneมีเขตเวลาของสถานีนี้ ค่าคือชื่อของเขตเวลาตามที่ระบุไว้ในฐานข้อมูลเขตเวลา IANA เช่น "America/New_York"
departure_timeมีเวลาออกเดินทางที่ระบุเป็นออบเจ็กต์Timeheadsignระบุทิศทางการเดินทางในสายนี้ตามที่ระบุไว้บนยานพาหนะหรือที่ป้ายรถเมล์ต้นทาง ซึ่งมักจะเป็นสถานีปลายทางheadwayหากมี ข้อมูลนี้จะระบุจำนวนวินาทีที่คาดไว้ระหว่างการออกเดินทางจากป้ายเดียวกัน ณ เวลานี้ เช่น หากค่าheadwayเป็น 600 คุณอาจต้องรอ 10 นาทีหากตกรถประจำทางlineมีออบเจ็กต์นิยามคู่TransitLineที่มีข้อมูลเกี่ยวกับสายขนส่งสาธารณะที่ใช้ในขั้นตอนนี้TransitLineจะระบุชื่อและผู้ให้บริการของสาย รวมถึงพร็อพเพอร์ตี้อื่นๆ ที่อธิบายไว้ในเอกสารอ้างอิงTransitLinenum_stopsมีจำนวนป้ายรถเมล์ในขั้นตอนนี้ รวมป้ายขาเข้า แต่ไม่รวมป้ายขาออก ตัวอย่างเช่น หากเส้นทางของคุณเกี่ยวข้องกับการออกจากป้าย A ผ่านป้าย B และ C และมาถึงป้าย Dnum_stopsจะแสดงผลเป็น 3
เส้นทางเดินรถ
ออบเจ็กต์ TransitLine จะแสดงพร็อพเพอร์ตี้ต่อไปนี้
nameมีชื่อเต็มของสายขนส่งสาธารณะนี้ เช่น "7 Avenue Express" หรือ "14th St Crosstown"short_nameมีชื่อย่อของสายขนส่งสาธารณะนี้ โดยปกติแล้วจะเป็นหมายเลขสาย เช่น "2" หรือ "M14"agenciesคืออาร์เรย์ที่มีออบเจ็กต์TransitAgencyรายการเดียว ออบเจ็กต์TransitAgencyให้ข้อมูลเกี่ยวกับผู้ให้บริการของสายนี้ ซึ่งรวมถึงพร็อพเพอร์ตี้ต่อไปนี้nameมีชื่อของบริษัทขนส่งphoneมีหมายเลขโทรศัพท์ของบริษัทขนส่งurlมี URL ของบริษัทขนส่ง
หมายเหตุ: หากคุณแสดงผลเส้นทางขนส่งสาธารณะด้วยตนเองแทนการใช้ออบเจ็กต์
DirectionsRendererคุณต้องแสดงชื่อและ URL ของบริษัทขนส่งสาธารณะที่ให้บริการผลการเดินทางurlมี URL ของสายขนส่งสาธารณะนี้ตามที่บริษัทขนส่งสาธารณะระบุไว้iconมี URL สำหรับไอคอนที่เชื่อมโยงกับบรรทัดนี้ เมืองส่วนใหญ่จะใช้ไอคอนทั่วไปที่แตกต่างกันไปตามประเภทยานพาหนะ สายขนส่งสาธารณะบางสาย เช่น ระบบรถไฟใต้ดินของนิวยอร์ก จะมีไอคอนเฉพาะสำหรับสายนั้นๆcolorมีสีที่ใช้กันโดยทั่วไปในป้ายสำหรับขนส่งสาธารณะนี้ สีจะระบุเป็นสตริงฐานสิบหก เช่น #FF0033text_colorมีสีของข้อความที่ใช้กันโดยทั่วไปสำหรับป้ายของสายนี้ โดยจะระบุสีเป็นสตริงฐานสิบหกvehicleมีออบเจ็กต์Vehicleซึ่งมีพร็อพเพอร์ตี้ต่อไปนี้nameมีชื่อของยานพาหนะในบรรทัดนี้ เช่น "Subway"typeมีประเภทของยานพาหนะที่ใช้ในสายนี้ ดูรายการค่าที่รองรับทั้งหมดได้ในเอกสารประกอบเกี่ยวกับประเภทยานพาหนะiconมี URL สำหรับไอคอนที่เชื่อมโยงกับประเภทยานพาหนะนี้โดยทั่วไปlocal_iconมี URL ของไอคอนที่เชื่อมโยงกับประเภทยานพาหนะนี้ โดยอิงตามป้ายการขนส่งในท้องถิ่น
ประเภทยานพาหนะ
ออบเจ็กต์ VehicleType จะแสดงพร็อพเพอร์ตี้ต่อไปนี้
| ค่า | คำจำกัดความ |
|---|---|
VehicleType.RAIL |
รถไฟ |
VehicleType.METRO_RAIL |
รถไฟฟ้ารางเบา |
VehicleType.SUBWAY |
รถไฟฟ้ารางเบาใต้ดิน |
VehicleType.TRAM |
รถไฟฟ้ารางเบาเหนือพื้นดิน |
VehicleType.MONORAIL |
รถไฟรางเดี่ยว |
VehicleType.HEAVY_RAIL |
รถไฟทั่วไป |
VehicleType.COMMUTER_TRAIN |
รถไฟชานเมือง |
VehicleType.HIGH_SPEED_TRAIN |
รถไฟความเร็วสูง |
VehicleType.BUS |
ธุรกิจ |
VehicleType.INTERCITY_BUS |
รถบัสทางไกล |
VehicleType.TROLLEYBUS |
รถรางไฟฟ้า |
VehicleType.SHARE_TAXI |
รถแท็กซี่ร่วมเป็นรถประจำทางประเภทหนึ่งที่สามารถรับส่งผู้โดยสารได้ทุกที่ในเส้นทาง |
VehicleType.FERRY |
เรือข้ามฟาก |
VehicleType.CABLE_CAR |
ยานพาหนะที่เคลื่อนที่บนสายเคเบิล ซึ่งมักจะอยู่บนพื้นดิน กระเช้าลอยฟ้าอาจเป็นประเภท VehicleType.GONDOLA_LIFT |
VehicleType.GONDOLA_LIFT |
กระเช้าลอยฟ้า |
VehicleType.FUNICULAR |
ยานพาหนะที่ถูกดึงขึ้นทางลาดชันด้วยสายเคเบิล โดยปกติแล้วรถรางไฟฟ้าจะประกอบด้วยรถ 2 คัน โดยรถแต่ละคันจะทำหน้าที่เป็นตัวถ่วงน้ำหนักซึ่งกันและกัน |
VehicleType.OTHER |
ยานพาหนะอื่นๆ ทั้งหมดจะแสดงผลประเภทนี้ |
กำลังตรวจสอบ DirectionsResults
ระบบอาจตรวจสอบและใช้คอมโพเนนต์ DirectionsResults ซึ่งได้แก่ DirectionsRoute, DirectionsLeg, DirectionsStep และ TransitDetails เมื่อแยกวิเคราะห์การตอบกลับเส้นทาง
สำคัญ: หากคุณแสดงผลเส้นทางขนส่งสาธารณะด้วยตนเองแทนที่จะใช้ออบเจ็กต์ DirectionsRenderer คุณต้องแสดงชื่อและ URL ของบริษัทขนส่งสาธารณะที่ให้บริการผลการเดินทาง
ตัวอย่างต่อไปนี้แสดงเส้นทางเดินเท้าไปยังสถานที่ท่องเที่ยวบางแห่งในนิวยอร์กซิตี้ เราตรวจสอบ DirectionsStep ของเส้นทางเพื่อเพิ่มเครื่องหมายสำหรับแต่ละขั้นตอน และแนบข้อมูลกับ InfoWindow พร้อมข้อความคำแนะนำสำหรับขั้นตอนนั้น
หมายเหตุ: เนื่องจากเรากำลังคำนวณเส้นทางเดินเท้า เราจึงแสดงคำเตือนแก่ผู้ใช้ในแผง <div> แยกต่างหากด้วย
var map; var directionsRenderer; var directionsService; var stepDisplay; var markerArray = []; function initMap() { // Instantiate a directions service. directionsService = new google.maps.DirectionsService(); // Create a map and center it on Manhattan. var manhattan = new google.maps.LatLng(40.7711329, -73.9741874); var mapOptions = { zoom: 13, center: manhattan } map = new google.maps.Map(document.getElementById('map'), mapOptions); // Create a renderer for directions and bind it to the map. var rendererOptions = { map: map } directionsRenderer = new google.maps.DirectionsRenderer(rendererOptions) // Instantiate an info window to hold step text. stepDisplay = new google.maps.InfoWindow(); } function calcRoute() { // First, clear out any existing markerArray // from previous calculations. for (i = 0; i < markerArray.length; i++) { markerArray[i].setMap(null); } // Retrieve the start and end locations and create // a DirectionsRequest using WALKING directions. var start = document.getElementById('start').value; var end = document.getElementById('end').value; var request = { origin: start, destination: end, travelMode: 'WALKING' }; // Route the directions and pass the response to a // function to create markers for each step. directionsService.route(request, function(response, status) { if (status == "OK") { var warnings = document.getElementById("warnings_panel"); warnings.innerHTML = "" + response.routes[0].warnings + ""; directionsRenderer.setDirections(response); showSteps(response); } }); } function showSteps(directionResult) { // For each step, place a marker, and add the text to the marker's // info window. Also attach the marker to an array so we // can keep track of it and remove it when calculating new // routes. var myRoute = directionResult.routes[0].legs[0]; for (var i = 0; i < myRoute.steps.length; i++) { var marker = new google.maps.Marker({ position: myRoute.steps[i].start_point, map: map }); attachInstructionText(marker, myRoute.steps[i].instructions); markerArray[i] = marker; } } function attachInstructionText(marker, text) { google.maps.event.addListener(marker, 'click', function() { stepDisplay.setContent(text); stepDisplay.open(map, marker); }); }
ในเนื้อหา HTML ให้ทำดังนี้
<div>
<strong>Start: </strong>
<select id="start">
<option value="penn station, new york, ny">Penn Station</option>
<option value="grand central station, new york, ny">Grand Central Station</option>
<option value="625 8th Avenue New York NY 10018">Port Authority Bus Terminal</option>
<option value="staten island ferry terminal, new york, ny">Staten Island Ferry Terminal</option>
<option value="101 E 125th Street, New York, NY">Harlem - 125th St Station</option>
</select>
<strong>End: </strong>
<select id="end" onchange="calcRoute();">
<option value="260 Broadway New York NY 10007">City Hall</option>
<option value="W 49th St & 5th Ave, New York, NY 10020">Rockefeller Center</option>
<option value="moma, New York, NY">MOMA</option>
<option value="350 5th Ave, New York, NY, 10118">Empire State Building</option>
<option value="253 West 125th Street, New York, NY">Apollo Theatre</option>
<option value="1 Wall St, New York, NY">Wall St</option>
</select>
<div>การใช้จุดอ้างอิงในเส้นทาง
ตามที่ระบุไว้ใน DirectionsRequest คุณยังระบุจุดอ้างอิง (ประเภท DirectionsWaypoint) ได้ด้วยเมื่อคำนวณเส้นทางโดยใช้บริการเส้นทางสำหรับการเดิน การปั่นจักรยาน หรือการขับรถ จุดอ้างอิงใช้ไม่ได้กับเส้นทางขนส่งสาธารณะ
จุดอ้างอิงช่วยให้คุณคำนวณเส้นทางผ่านสถานที่เพิ่มเติมได้ ซึ่งในกรณีนี้ เส้นทางที่แสดงผลจะผ่านจุดอ้างอิงที่ระบุ
waypoint ประกอบด้วยช่องต่อไปนี้
location(ต้องระบุ) ระบุที่อยู่ของจุดอ้างอิงstopover(ไม่บังคับ) ระบุว่าจุดอ้างอิงนี้เป็นจุดแวะพักจริงในเส้นทาง (true) หรือเป็นเพียงค่ากำหนดให้กำหนดเส้นทางผ่านสถานที่ที่ระบุ (false) จุดแวะพักจะเป็นtrueโดยค่าเริ่มต้น
โดยค่าเริ่มต้น บริการเส้นทางจะคำนวณเส้นทางผ่านจุดอ้างอิงที่ระบุตามลำดับที่ระบุ คุณสามารถส่ง optimizeWaypoints: true ภายใน
DirectionsRequest เพื่ออนุญาตให้บริการเส้นทางเพิ่มประสิทธิภาพเส้นทางที่ระบุโดยจัดเรียงจุดอ้างอิงใหม่ตามลำดับที่มีประสิทธิภาพมากขึ้นได้ (ไม่บังคับ) (การเพิ่มประสิทธิภาพนี้เป็นการประยุกต์ใช้
ปัญหาพนักงานขายเดินทาง) ระยะเวลาเดินทางเป็นปัจจัยหลักที่ได้รับการเพิ่มประสิทธิภาพ แต่ปัจจัยอื่นๆ เช่น ระยะทาง จำนวนการเลี้ยว และอื่นๆ อีกมากมายอาจได้รับการพิจารณาเมื่อตัดสินใจว่าเส้นทางใดมีประสิทธิภาพมากที่สุด จุดอ้างอิงทั้งหมดต้องเป็นจุดแวะพักเพื่อให้ Directions Service เพิ่มประสิทธิภาพเส้นทางได้
หากคุณสั่งให้บริการเส้นทางเพิ่มประสิทธิภาพลำดับของจุดอ้างอิง ระบบจะแสดงลำดับของจุดอ้างอิงในช่อง waypoint_order ภายในออบเจ็กต์ DirectionsResult
ตัวอย่างต่อไปนี้จะคำนวณเส้นทางข้ามประเทศในสหรัฐอเมริกาโดยใช้จุดเริ่มต้น จุดสิ้นสุด และจุดอ้างอิงที่หลากหลาย (หากต้องการเลือกจุดอ้างอิงหลายจุด ให้กด Ctrl แล้วคลิกเมื่อเลือกรายการในรายการ)
โปรดทราบว่าเราตรวจสอบ routes.start_address และ routes.end_address เพื่อให้เรามีข้อความสำหรับจุดเริ่มต้นและจุดสิ้นสุดของแต่ละเส้นทาง
TypeScript
function initMap(): void { const directionsService = new google.maps.DirectionsService(); const directionsRenderer = new google.maps.DirectionsRenderer(); const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 6, center: { lat: 41.85, lng: -87.65 }, } ); directionsRenderer.setMap(map); (document.getElementById("submit") as HTMLElement).addEventListener( "click", () => { calculateAndDisplayRoute(directionsService, directionsRenderer); } ); } function calculateAndDisplayRoute( directionsService: google.maps.DirectionsService, directionsRenderer: google.maps.DirectionsRenderer ) { const waypts: google.maps.DirectionsWaypoint[] = []; const checkboxArray = document.getElementById( "waypoints" ) as HTMLSelectElement; for (let i = 0; i < checkboxArray.length; i++) { if (checkboxArray.options[i].selected) { waypts.push({ location: (checkboxArray[i] as HTMLOptionElement).value, stopover: true, }); } } directionsService .route({ origin: (document.getElementById("start") as HTMLInputElement).value, destination: (document.getElementById("end") as HTMLInputElement).value, waypoints: waypts, optimizeWaypoints: true, travelMode: google.maps.TravelMode.DRIVING, }) .then((response) => { directionsRenderer.setDirections(response); const route = response.routes[0]; const summaryPanel = document.getElementById( "directions-panel" ) as HTMLElement; summaryPanel.innerHTML = ""; // For each route, display summary information. for (let i = 0; i < route.legs.length; i++) { const routeSegment = i + 1; summaryPanel.innerHTML += "<b>Route Segment: " + routeSegment + "</b><br>"; summaryPanel.innerHTML += route.legs[i].start_address + " to "; summaryPanel.innerHTML += route.legs[i].end_address + "<br>"; summaryPanel.innerHTML += route.legs[i].distance!.text + "<br><br>"; } }) .catch((e) => window.alert("Directions request failed due to " + status)); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
function initMap() { const directionsService = new google.maps.DirectionsService(); const directionsRenderer = new google.maps.DirectionsRenderer(); const map = new google.maps.Map(document.getElementById("map"), { zoom: 6, center: { lat: 41.85, lng: -87.65 }, }); directionsRenderer.setMap(map); document.getElementById("submit").addEventListener("click", () => { calculateAndDisplayRoute(directionsService, directionsRenderer); }); } function calculateAndDisplayRoute(directionsService, directionsRenderer) { const waypts = []; const checkboxArray = document.getElementById("waypoints"); for (let i = 0; i < checkboxArray.length; i++) { if (checkboxArray.options[i].selected) { waypts.push({ location: checkboxArray[i].value, stopover: true, }); } } directionsService .route({ origin: document.getElementById("start").value, destination: document.getElementById("end").value, waypoints: waypts, optimizeWaypoints: true, travelMode: google.maps.TravelMode.DRIVING, }) .then((response) => { directionsRenderer.setDirections(response); const route = response.routes[0]; const summaryPanel = document.getElementById("directions-panel"); summaryPanel.innerHTML = ""; // For each route, display summary information. for (let i = 0; i < route.legs.length; i++) { const routeSegment = i + 1; summaryPanel.innerHTML += "<b>Route Segment: " + routeSegment + "</b><br>"; summaryPanel.innerHTML += route.legs[i].start_address + " to "; summaryPanel.innerHTML += route.legs[i].end_address + "<br>"; summaryPanel.innerHTML += route.legs[i].distance.text + "<br><br>"; } }) .catch((e) => window.alert("Directions request failed due to " + status)); } window.initMap = initMap;
ขีดจำกัดและข้อจำกัดสำหรับจุดอ้างอิง
โดยมีขีดจำกัดการใช้งานและข้อจำกัดดังนี้
- จำนวนจุดอ้างอิงสูงสุดที่อนุญาตเมื่อใช้บริการเส้นทางใน Maps JavaScript API คือ 25 จุด รวมทั้งจุดเริ่มต้นและจุดหมาย ขีดจำกัดจะเหมือนกันสำหรับบริการเว็บ Directions API (เดิม)
- สำหรับ บริการบนเว็บ Directions API (เดิม) ลูกค้าจะได้รับอนุญาตให้ใช้จุดอ้างอิง 25 จุด รวมถึงจุดเริ่มต้นและจุดหมาย
- ลูกค้าแพ็กเกจพรีเมียมของ Google Maps Platform จะใช้จุดอ้างอิงได้ 25 จุด รวมถึงจุดเริ่มต้นและจุดหมาย
- เส้นทางขนส่งสาธารณะไม่รองรับจุดอ้างอิง
เส้นทางที่ลากได้
ผู้ใช้อาจแก้ไขเส้นทางการปั่นจักรยาน การเดิน หรือเส้นทางการขับขี่ที่แสดงโดยใช้ DirectionsRenderer แบบไดนามิกได้หากลากได้ ซึ่งช่วยให้ผู้ใช้เลือกและแก้ไขเส้นทางได้โดยคลิกและลากเส้นทางที่ได้บนแผนที่
คุณระบุได้ว่าการแสดงผลของโปรแกรมแสดงผลอนุญาตให้ใช้เส้นทางที่ลากได้หรือไม่โดยตั้งค่าพร็อพเพอร์ตี้ draggable เป็น true ไม่สามารถทำให้เส้นทางขนส่งสาธารณะลากได้
เมื่อเส้นทางลากได้ ผู้ใช้อาจเลือกจุดใดก็ได้บนเส้นทาง (หรือจุดอ้างอิง) ของผลลัพธ์ที่แสดงผล และย้ายคอมโพเนนต์ที่ระบุไปยังตำแหน่งใหม่ DirectionsRenderer จะอัปเดตแบบไดนามิกเพื่อแสดงเส้นทางที่แก้ไข เมื่อปล่อย จุดอ้างอิงเปลี่ยนผ่านจะเพิ่มลงในแผนที่ (ระบุด้วยเครื่องหมายสีขาวขนาดเล็ก) การเลือกและย้ายส่วนของเส้นทางจะเปลี่ยนช่วงของเส้นทางนั้น ขณะที่การเลือกและย้ายเครื่องหมายจุดอ้างอิง (รวมถึงจุดเริ่มต้นและจุดสิ้นสุด) จะเปลี่ยนช่วงของเส้นทางที่ผ่านจุดอ้างอิงนั้น
เนื่องจากเส้นทางที่ลากได้ได้รับการแก้ไขและแสดงผลฝั่งไคลเอ็นต์ คุณจึงอาจต้องการตรวจสอบและจัดการเหตุการณ์ directions_changed ใน DirectionsRenderer เพื่อรับการแจ้งเตือนเมื่อผู้ใช้แก้ไขเส้นทางที่แสดง
โค้ดต่อไปนี้แสดงการเดินทางจากเพิร์ทบนชายฝั่งตะวันตกของออสเตรเลียไปยังซิดนีย์บนชายฝั่งตะวันออก โค้ดจะตรวจสอบเหตุการณ์ directions_changed เพื่ออัปเดตระยะทางรวมของทุกช่วงการเดินทาง
TypeScript
function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 4, center: { lat: -24.345, lng: 134.46 }, // Australia. } ); const directionsService = new google.maps.DirectionsService(); const directionsRenderer = new google.maps.DirectionsRenderer({ draggable: true, map, panel: document.getElementById("panel") as HTMLElement, }); directionsRenderer.addListener("directions_changed", () => { const directions = directionsRenderer.getDirections(); if (directions) { computeTotalDistance(directions); } }); displayRoute( "Perth, WA", "Sydney, NSW", directionsService, directionsRenderer ); } function displayRoute( origin: string, destination: string, service: google.maps.DirectionsService, display: google.maps.DirectionsRenderer ) { service .route({ origin: origin, destination: destination, waypoints: [ { location: "Adelaide, SA" }, { location: "Broken Hill, NSW" }, ], travelMode: google.maps.TravelMode.DRIVING, avoidTolls: true, }) .then((result: google.maps.DirectionsResult) => { display.setDirections(result); }) .catch((e) => { alert("Could not display directions due to: " + e); }); } function computeTotalDistance(result: google.maps.DirectionsResult) { let total = 0; const myroute = result.routes[0]; if (!myroute) { return; } for (let i = 0; i < myroute.legs.length; i++) { total += myroute.legs[i]!.distance!.value; } total = total / 1000; (document.getElementById("total") as HTMLElement).innerHTML = total + " km"; } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 4, center: { lat: -24.345, lng: 134.46 }, // Australia. }); const directionsService = new google.maps.DirectionsService(); const directionsRenderer = new google.maps.DirectionsRenderer({ draggable: true, map, panel: document.getElementById("panel"), }); directionsRenderer.addListener("directions_changed", () => { const directions = directionsRenderer.getDirections(); if (directions) { computeTotalDistance(directions); } }); displayRoute( "Perth, WA", "Sydney, NSW", directionsService, directionsRenderer, ); } function displayRoute(origin, destination, service, display) { service .route({ origin: origin, destination: destination, waypoints: [ { location: "Adelaide, SA" }, { location: "Broken Hill, NSW" }, ], travelMode: google.maps.TravelMode.DRIVING, avoidTolls: true, }) .then((result) => { display.setDirections(result); }) .catch((e) => { alert("Could not display directions due to: " + e); }); } function computeTotalDistance(result) { let total = 0; const myroute = result.routes[0]; if (!myroute) { return; } for (let i = 0; i < myroute.legs.length; i++) { total += myroute.legs[i].distance.value; } total = total / 1000; document.getElementById("total").innerHTML = total + " km"; } window.initMap = initMap;