ภาพรวม
คุณสามารถคำนวณเส้นทาง (โดยใช้วิธีการเดินทางที่หลากหลาย) ได้โดยใช้วัตถุ DirectionsService ออบเจ็กต์นี้สื่อสารกับบริการเส้นทางของ Google Maps API ซึ่งรับคำขอเส้นทางและแสดงเส้นทางที่มีประสิทธิภาพ
เวลาเดินทางเป็นปัจจัยหลักที่ได้รับการเพิ่มประสิทธิภาพ แต่ระบบอาจพิจารณาปัจจัยอื่นๆ ด้วย เช่น ระยะทาง จำนวนเลี้ยว และอื่นๆ อีกมากมาย
คุณจะจัดการผลลัพธ์เส้นทางเหล่านี้ด้วยตนเองหรือใช้
ออบเจ็กต์ DirectionsRenderer เพื่อแสดงผลลัพธ์เหล่านี้ก็ได้
เมื่อระบุต้นทางหรือปลายทางในคำขอเส้นทาง
คุณสามารถระบุสตริงการค้นหา (เช่น "ชิคาโก รัฐอิลลินอยส์" หรือ
"ดาร์วิน รัฐนอร์เทิร์นเทร์ริทอรี ออสเตรเลีย") ค่า LatLng หรือออบเจ็กต์
Place
บริการเส้นทางจะแสดงเส้นทางแบบหลายส่วนได้โดยใช้ชุด
จุดอ้างอิง เส้นทางจะแสดงเป็นภาพวาดเส้นหลายส่วนที่วาดเส้นทางบนแผนที่ หรืออาจแสดงเป็นชุดคำอธิบายที่เป็นข้อความภายในองค์ประกอบ <div> (เช่น "เลี้ยวขวาเข้าสู่ทางลาดสะพานวิลเลียมส์เบิร์ก")
เริ่มต้นใช้งาน
ก่อนใช้บริการเส้นทางใน Maps JavaScript API โปรดตรวจสอบก่อนว่าได้เปิดใช้ Directions API (เดิม) ในคอนโซล Google Cloud ในโปรเจ็กต์เดียวกันกับที่ตั้งค่าไว้สำหรับ Maps JavaScript API
วิธีดูรายการ API ที่เปิดใช้
- ไปที่ Google Cloud Console
- คลิกปุ่มเลือกโปรเจ็กต์ จากนั้นเลือกโปรเจ็กต์เดียวกันกับที่ตั้งค่าไว้สำหรับ 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 ที่มีข้อความค้นหาและเมธอดเรียกกลับเพื่อดำเนินการเมื่อได้รับการตอบกลับ
ออบเจ็กต์ลิเทอรัล 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(เช่น "ชิคาโก รัฐอิลลินอยส์") เป็นค่าLatLngหรือเป็นออบเจ็กต์ Place หากใช้ออบเจ็กต์ Place คุณจะระบุรหัสสถานที่ สตริงการค้นหา หรือLatLngสถานที่ตั้งได้ คุณสามารถดึงรหัสสถานที่จากบริการการเข้ารหัสพิกัดภูมิศาสตร์ การค้นหาสถานที่ และ Place Autocomplete ใน Maps JavaScript API ดูตัวอย่างการใช้รหัสสถานที่จาก Place Autocomplete ได้ที่ 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(ต้องระบุเพื่อให้ ออบเจ็กต์ลิเทอรัลdrivingOptionsใช้ได้) ระบุ เวลาออกเดินทางที่ต้องการเป็นออบเจ็กต์Dateค่าต้อง ตั้งเป็นเวลาปัจจุบันหรือเวลาในอนาคต ต้องไม่ใช่วันที่ที่ผ่านมาแล้ว (API จะแปลงวันที่ทั้งหมดเป็น UTC เพื่อให้มั่นใจว่าการจัดการจะสอดคล้องกัน ในเขตเวลาต่างๆ) สำหรับลูกค้า Google Maps Platform Premium Plan หากคุณ ใส่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ระบุการใช้งานระบบอิมพีเรียล (อังกฤษ) ระยะทางจะแสดงเป็นไมล์
หมายเหตุ: การตั้งค่าระบบหน่วยนี้จะมีผลกับข้อความที่แสดงต่อผู้ใช้เท่านั้น ผลลัพธ์เส้นทางยังมีค่าระยะทางซึ่งไม่ได้แสดงต่อผู้ใช้ และจะแสดงเป็นเมตรเสมอ
การให้น้ำหนักพิเศษกับบางภูมิภาคสำหรับเส้นทาง
บริการเส้นทางของ Google Maps API จะแสดงผลลัพธ์ที่อยู่ซึ่งได้รับอิทธิพล
จากโดเมน (ภูมิภาคหรือประเทศ) ที่คุณโหลด JavaScript
Bootstrap (เนื่องจากผู้ใช้ส่วนใหญ่โหลด 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 อักขระ (รูปแบบ CLDR ของ Unicode) อินพุตอื่นๆ ทั้งหมดจะทำให้เกิดข้อผิดพลาด
ระบบจะรองรับการเอนเอียงตามภูมิภาคเฉพาะในประเทศและภูมิภาคที่รองรับ เส้นทาง โปรดดูรายละเอียดความครอบคลุมของ Google Maps Platform เพื่อดูความครอบคลุมในต่างประเทศสำหรับ Directions API (เดิม)
การแสดงเส้นทาง
การเริ่มคำขอเส้นทางไปยัง
DirectionsService ด้วยเมธอด route()
ต้องส่งผ่านการเรียกกลับซึ่งจะดำเนินการเมื่อคำขอ
บริการเสร็จสมบูรณ์ โดยการเรียกกลับนี้จะแสดงรหัส 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 คือออบเจ็กต์ลิเทอรัลที่มีฟิลด์ต่อไปนี้
geocoder_statusระบุรหัสสถานะที่เกิดจากการดำเนินการแปลงพิกัดภูมิศาสตร์ ฟิลด์นี้อาจมีค่าต่อไปนี้"OK"แสดงว่าไม่มีข้อผิดพลาดเกิดขึ้น ระบบแยกวิเคราะห์ที่อยู่ได้สำเร็จและแสดงผลรหัสพิกัดภูมิศาสตร์อย่างน้อย 1 รายการ"ZERO_RESULTS"หมายความว่าการแปลงรหัสพิกัดภูมิศาสตร์สำเร็จแต่ไม่พบผลลัพธ์ ปัญหานี้อาจเกิดขึ้นหากมีการส่งaddressที่ไม่มีอยู่จริงไปยัง Geocoder
-
partial_matchบ่งชี้ว่า Geocoder ไม่ได้แสดงผล การจับคู่ที่ตรงกันทุกประการสำหรับคำขอเดิม แม้ว่าจะจับคู่ส่วนหนึ่งของ ที่อยู่ที่ขอได้ก็ตาม คุณอาจต้องตรวจสอบคำขอเดิมว่ามีการสะกดผิดและ/หรือ ที่อยู่ไม่สมบูรณ์หรือไม่การจับคู่บางส่วนมักเกิดขึ้นกับที่อยู่บนถนนที่ไม่มีอยู่ ในย่านที่คุณส่งในคำขอ ระบบอาจแสดงการจับคู่บางส่วนเมื่อคำขอตรงกับสถานที่ตั้ง 2 แห่งขึ้นไปในพื้นที่เดียวกัน เช่น "Hillpar St, Bristol, UK" จะแสดงการจับคู่บางส่วนสำหรับทั้ง Henry Street และ Henrietta Street โปรดทราบว่าหากคำขอมีองค์ประกอบที่อยู่ซึ่งสะกดผิด บริการเข้ารหัสพิกัดภูมิศาสตร์อาจแนะนำที่อยู่อื่นแทน ระบบจะทำเครื่องหมายคำแนะนำที่ทริกเกอร์ด้วยวิธีนี้ว่าเป็นการจับคู่บางส่วนด้วย
place_idเป็นตัวระบุที่ไม่ซ้ำกันของสถานที่ ซึ่งใช้กับ Google API อื่นๆ ได้ เช่น คุณสามารถใช้place_idกับไลบรารี Google Places API เพื่อดูรายละเอียดของธุรกิจในพื้นที่ เช่น หมายเลขโทรศัพท์ เวลาทำการ รีวิวของผู้ใช้ และอื่นๆ ดูภาพรวมรหัสสถานที่types[]คืออาร์เรย์ที่ระบุประเภทของ ผลการค้นหาที่แสดง อาร์เรย์นี้มีชุดแท็กตั้งแต่ 0 รายการขึ้นไปที่ระบุ ประเภทของฟีเจอร์ที่แสดงในผลลัพธ์ ตัวอย่างเช่น รหัสพิกัดภูมิศาสตร์ของ "ชิคาโก" จะแสดงผล "locality" ซึ่งระบุว่า "ชิคาโก" เป็นเมือง และ ยังแสดงผล "political" ซึ่งระบุว่าเป็นหน่วยงานทางการเมืองด้วย
เส้นทาง
หมายเหตุ: เราได้เปลี่ยนชื่อออบเจ็กต์ DirectionsTrip เดิมเป็น DirectionsRoute แล้ว
โปรดทราบว่าตอนนี้เส้นทาง
หมายถึงการเดินทางทั้งหมดตั้งแต่ต้นจนจบ ไม่ใช่แค่
การเดินทางย่อยของการเดินทางหลัก
DirectionsRoute มีผลลัพธ์เดียวจาก
ต้นทางและปลายทางที่ระบุ เส้นทางนี้อาจประกอบด้วย
ขาอย่างน้อย 1 ขา (ประเภท DirectionsLeg)
ขึ้นอยู่กับว่ามีการระบุจุดแวะพักหรือไม่ นอกจากนี้ เส้นทางยังมีข้อมูลลิขสิทธิ์และคำเตือนซึ่งต้องแสดงต่อผู้ใช้ด้วยนอกเหนือจากข้อมูลการกำหนดเส้นทาง
DirectionsRoute คือออบเจ็กต์ลิเทอรัลที่มีฟิลด์ต่อไปนี้
legs[]มีอาร์เรย์ของออบเจ็กต์DirectionsLegแต่ละออบเจ็กต์มีข้อมูล เกี่ยวกับขาของเส้นทางจาก 2 สถานที่ ภายในเส้นทางที่ระบุ โดยจะมีขาแยกต่างหากสำหรับแต่ละจุดอ้างอิงหรือปลายทางที่ระบุ (เส้นทางที่ไม่มีจุดแวะพักจะมีDirectionsLegเพียงรายการเดียว) แต่ละช่วงประกอบด้วยDirectionStepหลายรายการwaypoint_orderมีอาร์เรย์ ที่ระบุลำดับของจุดแวะพักในเส้นทางที่คำนวณแล้ว อาร์เรย์นี้อาจมีลำดับที่เปลี่ยนแปลงหากมีการส่งDirectionsRequestoptimizeWaypoints: trueoverview_pathมีอาร์เรย์ของLatLngที่แสดงเส้นทางโดยประมาณ (ปรับให้เรียบ) ของเส้นทางที่ได้overview_polylineมีออบเจ็กต์pointsรายการเดียว ซึ่งมีการนำเสนอเส้น โพลีไลน์ที่เข้ารหัสของเส้นทาง เส้นประกอบนี้คือเส้นทางโดยประมาณ (ที่ราบรื่น) ของเส้นทางที่ได้boundsมีLatLngBoundsซึ่งระบุขอบเขตของ Polyline ตามเส้นทางที่ระบุ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เวลาที่ระบุเป็นออบเจ็กต์ JavaScriptDatetextเวลาที่ระบุเป็นสตริง ระบบจะแสดงเวลาตามเขตเวลาของป้ายหยุดรถประจำทางtime_zoneมีเขตเวลาของสถานีนี้ ค่าคือชื่อของเขตเวลาตามที่กำหนดไว้ในฐานข้อมูลเขตเวลาของ IANA เช่น "America/New_York"
departure_timeมีเวลาออกเดินทางโดยประมาณสำหรับ ช่วงนี้ ซึ่งระบุเป็นออบเจ็กต์Timeโดยdeparture_timeใช้ได้กับเส้นทางขนส่งสาธารณะเท่านั้นstart_locationมีLatLngของต้นทางของขาเที่ยวนี้ เนื่องจาก บริการเว็บเส้นทางจะคำนวณเส้นทางระหว่างสถานที่ โดยใช้ตัวเลือกการเดินทางที่ใกล้ที่สุด (โดยปกติคือถนน) ที่ จุดเริ่มต้นและจุดสิ้นสุดstart_locationอาจ แตกต่างจากต้นทางที่ระบุของช่วงนี้ หากเช่น ถนนไม่ได้อยู่ใกล้ต้นทางend_locationมีLatLngของปลายทางของขาเที่ยวนี้ เนื่องจากDirectionsServiceคำนวณเส้นทางระหว่างสถานที่ โดยใช้ตัวเลือกการเดินทางที่ใกล้ที่สุด (โดยปกติคือถนน) ที่ จุดเริ่มต้นและจุดสิ้นสุดend_locationอาจ แตกต่างจากปลายทางที่ระบุของช่วงนี้ หากเช่น ถนนไม่ได้อยู่ใกล้ปลายทางstart_addressมีที่อยู่ที่มนุษย์อ่านได้ (โดยทั่วไปคือที่อยู่) ของจุดเริ่มต้นของช่วงนี้
เนื้อหานี้มีไว้ให้อ่านตามที่แสดงอยู่ ห้ามแยกวิเคราะห์ที่อยู่ที่จัดรูปแบบ โดยอัตโนมัติend_addressมีที่อยู่ที่มนุษย์อ่านได้ (โดยทั่วไปคือที่อยู่) ของจุดสิ้นสุดของช่วงนี้
เนื้อหานี้มีไว้ให้อ่านตามที่แสดงอยู่ ห้ามแยกวิเคราะห์ที่อยู่ที่จัดรูปแบบ โดยอัตโนมัติ
ขั้นตอนการขอเส้นทาง
DirectionsStep คือหน่วยที่เล็กที่สุดของเส้นทางของ
เส้นทาง ซึ่งมีขั้นตอนเดียวที่อธิบายคำสั่งเดียวที่เฉพาะเจาะจงในเส้นทาง เช่น "เลี้ยวซ้ายที่ถนนเวสต์ 4th St." ขั้นตอนนี้ไม่เพียงอธิบายวิธีการ แต่ยังมีข้อมูลระยะทางและระยะเวลา
ที่เกี่ยวข้องกับวิธีที่ขั้นตอนนี้เชื่อมโยงกับขั้นตอนถัดไป
ตัวอย่างเช่น ขั้นตอนที่ระบุว่า "เลี้ยวขวาเข้าสู่ I-80 ตะวันตก" อาจมี
ระยะทาง "37 ไมล์" และ "40 นาที" ซึ่งบ่งชี้ว่าขั้นตอนถัดไป
อยู่ห่างจากขั้นตอนนี้ 37 ไมล์/40 นาที
เมื่อใช้บริการเส้นทางเพื่อค้นหาเส้นทางขนส่งสาธารณะ อาร์เรย์
steps จะมีข้อมูลเฉพาะของขนส่งสาธารณะเพิ่มเติมในรูปแบบของออบเจ็กต์ transit หาก
เส้นทางมีรูปแบบการเดินทางหลายรูปแบบ ระบบจะแสดงเส้นทางแบบละเอียด
สำหรับขั้นตอนการเดินหรือการขับรถในsteps[]อาร์เรย์
เช่น ขั้นตอนการเดินจะมีเส้นทางจากจุดเริ่มต้นและจุดสิ้นสุด
"เดินไปที่ Innes Ave & Fitch St" ขั้นตอนนี้จะมี
เส้นทางการเดินโดยละเอียดสำหรับเส้นทางนั้นในอาร์เรย์ steps[]
เช่น "มุ่งหน้าไปทางตะวันตกเฉียงเหนือ" "เลี้ยวซ้ายเข้าสู่ถนนอเรลิอัส วอล์คเกอร์" และ
"เลี้ยวซ้ายเข้าสู่ถนนอินเนส"
DirectionsStep คือออบเจ็กต์ลิเทอรัลที่มีฟิลด์ต่อไปนี้
instructionsมีวิธีการสำหรับขั้นตอนนี้ ภายในสตริงข้อความdistanceมีระยะทางที่ก้าวนี้ครอบคลุม จนถึงก้าวถัดไป เป็นออบเจ็กต์Distance(ดูคำอธิบาย ในDirectionsLegด้านบน) ฟิลด์นี้อาจไม่กำหนด หากไม่ทราบระยะทางdurationมีการประมาณเวลาที่ต้องใช้ในการ ดำเนินการตามขั้นตอนจนถึงขั้นตอนถัดไปเป็นออบเจ็กต์Duration(ดูคำอธิบายในDirectionsLegด้านบน) ฟิลด์นี้อาจไม่กำหนด หากไม่ทราบระยะเวลาstart_locationมีพิกัดทางภูมิศาสตร์LatLngของจุดเริ่มต้นของขั้นตอนนี้end_locationมีLatLngของ จุดสิ้นสุดของขั้นตอนนี้polylineมีออบเจ็กต์pointsรายการเดียวซึ่งมีรูปแบบเส้นหลายเหลี่ยมที่เข้ารหัส แล้วของขั้นตอน Polyline นี้คือเส้นทางโดยประมาณ (ที่ราบรื่น) ของ ขั้นตอนsteps[]ออบเจ็กต์ลิเทอรัลDirectionsStepที่ มีเส้นทางโดยละเอียดสำหรับขั้นตอนการเดินหรือขับรถในเส้นทาง ขนส่งสาธารณะ ขั้นตอนย่อยใช้ได้กับเส้นทางขนส่งสาธารณะเท่านั้นtravel_modeมีTravelModeที่ใช้ใน ขั้นตอนนี้ เส้นทางการขนส่งสาธารณะอาจรวมเส้นทางการเดินและ เส้นทางการขนส่งสาธารณะpathมีอาร์เรย์ของLatLngsที่อธิบาย ลำดับของขั้นตอนนี้transitมีข้อมูลเฉพาะของการขนส่งสาธารณะ เช่น เวลามาถึงและเวลาออกเดินทาง รวมถึงชื่อสายการขนส่งสาธารณะ
ข้อมูลเฉพาะของการขนส่งสาธารณะ
เส้นทางขนส่งสาธารณะจะแสดงข้อมูลเพิ่มเติมที่ไม่เกี่ยวข้องกับ
รูปแบบการเดินทางอื่นๆ พร็อพเพอร์ตี้เพิ่มเติมเหล่านี้จะแสดงผ่านออบเจ็กต์ TransitDetails ซึ่งจะแสดงเป็นพร็อพเพอร์ตี้ของ DirectionsStep จากออบเจ็กต์ TransitDetails
คุณจะเข้าถึงข้อมูลเพิ่มเติมสำหรับออบเจ็กต์ TransitStop
TransitLine, TransitAgency และ
VehicleType ได้ตามที่อธิบายไว้ด้านล่าง
รายละเอียดการเดินทาง
ออบเจ็กต์ TransitDetails จะแสดงพร็อพเพอร์ตี้ต่อไปนี้
arrival_stopมีTransitStopออบเจ็กต์ที่แสดงสถานี/ป้ายจอดที่มาถึงพร้อมพร็อพเพอร์ตี้ต่อไปนี้nameชื่อของสถานี/ป้ายจอดรถขนส่งสาธารณะ เช่น "ยูเนียนสแควร์"locationตำแหน่งของสถานี/ป้ายขนส่งสาธารณะ แสดงเป็นLatLng
departure_stopมีออบเจ็กต์TransitStopซึ่งแสดงสถานี/ป้ายรถประจำทางต้นทางarrival_timeมีเวลามาถึงที่ระบุเป็นออบเจ็กต์Timeที่มีพร็อพเพอร์ตี้ 3 รายการ ได้แก่valueเวลาที่ระบุเป็นออบเจ็กต์ JavaScriptDatetextเวลาที่ระบุเป็นสตริง ระบบจะแสดงเวลาตามเขตเวลาของป้ายหยุดรถประจำทางtime_zoneมีเขตเวลาของสถานีนี้ ค่าคือชื่อของเขตเวลาตามที่กำหนดไว้ในฐานข้อมูลเขตเวลาของ IANA เช่น "America/New_York"
departure_timeมีเวลาออกเดินทางที่ระบุเป็นออบเจ็กต์Timeheadsignระบุทิศทางที่จะเดินทางใน สายนี้ตามที่ระบุไว้ในยานพาหนะหรือที่ป้ายหยุดรถต้นทาง ซึ่งมักจะเป็นสถานีปลายทางheadwayหากมี ข้อมูลนี้จะระบุจำนวนวินาทีที่คาดไว้ ระหว่างการออกเดินทางจากป้ายเดียวกันในเวลานี้ ตัวอย่างเช่น หากมีheadway600 คุณจะคาดการณ์ได้ว่าต้องรอ 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มีสีที่ใช้กันทั่วไปในป้ายสำหรับ การขนส่งนี้ สีจะระบุเป็นสตริงเลขฐาน 16 เช่น #FF0033text_colorมีสีของข้อความที่ใช้กันทั่วไปสำหรับ ป้ายของสายนี้ โดยจะระบุสีเป็นสตริงเลขฐานสิบหกvehicleมีออบเจ็กต์Vehicleที่ มีพร็อพเพอร์ตี้ต่อไปนี้nameมีชื่อยานพาหนะในบรรทัดนี้ เช่น "รถไฟใต้ดิน"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 ซึ่งได้แก่ 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 เพื่ออนุญาตให้บริการเส้นทางเพิ่มประสิทธิภาพเส้นทางที่ระบุโดยการจัดเรียงจุดอ้างอิงใหม่ตามลำดับที่มีประสิทธิภาพมากขึ้น (ไม่บังคับ) (การเพิ่มประสิทธิภาพนี้เป็นการประยุกต์ใช้
ปัญหาการเดินทางของพนักงานขาย) เวลาเดินทางเป็นปัจจัยหลักที่
ได้รับการเพิ่มประสิทธิภาพ แต่ปัจจัยอื่นๆ เช่น ระยะทาง จำนวนเลี้ยว และอื่นๆ อีกมากมาย
อาจนำมาพิจารณาด้วยเมื่อตัดสินใจว่าเส้นทางใดมีประสิทธิภาพมากที่สุด จุดแวะพักทั้งหมดต้องเป็นจุดแวะพักเพื่อให้บริการเส้นทางเพิ่มประสิทธิภาพเส้นทาง
ได้
หากคุณสั่งให้บริการเส้นทางเพิ่มประสิทธิภาพลำดับของ
จุดแวะพัก ระบบจะแสดงลำดับของจุดแวะพักใน
ฟิลด์ waypoint_order ภายในออบเจ็กต์
DirectionsResult
ตัวอย่างต่อไปนี้จะคำนวณเส้นทางข้ามประเทศทั่วสหรัฐอเมริกาโดยใช้จุดเริ่มต้น จุดสิ้นสุด และจุดอ้างอิงที่หลากหลาย
(หากต้องการเลือกจุดอ้างอิงหลายจุด ให้กด Ctrl-Click เมื่อเลือกรายการในรายการ)
โปรดทราบว่าเราจะตรวจสอบ 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;