ภาพรวม
บริการ Distance Matrix ของ Google จะคำนวณระยะทางการเดินทาง และระยะเวลาการเดินทางระหว่างต้นทางและปลายทางหลายแห่ง โดยใช้รูปแบบการเดินทางที่กำหนด
บริการนี้จะไม่แสดงข้อมูลเส้นทางแบบละเอียด คุณรับข้อมูลเส้นทาง ซึ่งรวมถึงโพลีไลน์และเส้นทางที่เป็นข้อความได้โดยส่งต้นทางและปลายทางเดียวที่ต้องการไปยังบริการเส้นทาง
เริ่มต้นใช้งาน
ก่อนใช้บริการเมทริกซ์ระยะทางใน Maps JavaScript API โปรดตรวจสอบก่อนว่าได้เปิดใช้ Distance Matrix API (เดิม) ในคอนโซล Google Cloud ในโปรเจ็กต์เดียวกันกับที่ตั้งค่าไว้สำหรับ Maps JavaScript API
วิธีดูรายการ API ที่เปิดใช้
- ไปที่ คอนโซล Google Cloud
- คลิกปุ่มเลือกโปรเจ็กต์ แล้วเลือกโปรเจ็กต์เดียวกันกับที่คุณตั้งค่า สำหรับ Maps JavaScript API แล้วคลิกเปิด
- จากรายการ API ในแดชบอร์ด ให้มองหา Distance Matrix API (เดิม)
- หากเห็น API ในรายการ แสดงว่าคุณพร้อมใช้งานแล้ว หากไม่เห็น API ดังกล่าว ให้เปิดใช้ที่ https://console.cloud.google.com/apis/library/distance-matrix-backend.googleapis.com
ราคาและนโยบาย
ราคา
ดูข้อมูลเกี่ยวกับนโยบายการกำหนดราคาและการใช้งานสำหรับบริการเมทริกซ์ระยะทาง JavaScript ได้ที่ การใช้งานและการเรียกเก็บเงิน สำหรับ Distance Matrix API (เดิม)
หมายเหตุ: คำค้นหาแต่ละรายการที่ส่งไปยังบริการ Distance Matrix จะจำกัด ตามจำนวนองค์ประกอบที่อนุญาต โดยจำนวนต้นทางคูณด้วย จำนวนปลายทางจะเป็นจำนวนองค์ประกอบ
นโยบาย
การใช้บริการ Distance Matrix ต้องเป็นไปตาม นโยบายที่อธิบาย สำหรับ Distance Matrix API (เดิม)
คำขอ Distance Matrix
การเข้าถึงบริการเมทริกซ์ระยะทางเป็นแบบไม่พร้อมกัน เนื่องจาก Google Maps API ต้องทำการเรียกไปยังเซิร์ฟเวอร์ภายนอก ด้วยเหตุนี้ คุณจึงต้องส่งเมธอดการเรียกกลับเพื่อดำเนินการเมื่อคำขอเสร็จสมบูรณ์ เพื่อประมวลผลผลลัพธ์
คุณเข้าถึงบริการ Distance Matrix ภายในโค้ดผ่าน
ออบเจ็กต์ตัวสร้าง google.maps.DistanceMatrixService
เมธอด DistanceMatrixService.getDistanceMatrix() จะเริ่มคำขอไปยังบริการ Distance Matrix โดยส่ง Object Literal DistanceMatrixRequest ที่มีต้นทาง ปลายทาง และโหมดการเดินทาง รวมถึงเมธอด Callback เพื่อดำเนินการเมื่อได้รับคำตอบ
var origin1 = new google.maps.LatLng(55.930385, -3.118425); var origin2 = 'Greenwich, England'; var destinationA = 'Stockholm, Sweden'; var destinationB = new google.maps.LatLng(50.087692, 14.421150); var service = new google.maps.DistanceMatrixService(); service.getDistanceMatrix( { origins: [origin1, origin2], destinations: [destinationA, destinationB], travelMode: 'DRIVING', transitOptions: TransitOptions, drivingOptions: DrivingOptions, unitSystem: UnitSystem, avoidHighways: Boolean, avoidTolls: Boolean, }, callback); function callback(response, status) { // See Parsing the Results for // the basics of a callback function. }
DistanceMatrixRequest มีฟิลด์ต่อไปนี้
origins(ต้องระบุ) - อาร์เรย์ที่มีสตริงที่อยู่google.maps.LatLngออบเจ็กต์ หรือออบเจ็กต์ Place อย่างน้อย 1 รายการที่จะใช้คำนวณระยะทางและเวลาdestinations(ต้องระบุ) — อาร์เรย์ที่มีสตริงที่อยู่google.maps.LatLngออบเจ็กต์ หรือออบเจ็กต์ Place อย่างน้อย 1 รายการที่จะใช้คำนวณระยะทางและเวลาtravelMode(ไม่บังคับ) — โหมดการ เดินทางที่จะใช้เมื่อคำนวณเส้นทาง ดูส่วนเกี่ยวกับ รูปแบบการเดินทางtransitOptions(ไม่บังคับ) — ตัวเลือก ที่ใช้กับคำขอที่travelModeเป็นTRANSITเท่านั้น ค่าที่ถูกต้องจะอธิบายไว้ ในส่วนตัวเลือกการขนส่งdrivingOptions(ไม่บังคับ) ระบุ ค่าที่ใช้กับคำขอที่travelModeเป็นDRIVINGเท่านั้น ค่าที่ใช้ได้จะอธิบายไว้ ในส่วนตัวเลือกการขับขี่unitSystem(ไม่บังคับ) — ระบบหน่วยที่จะ ใช้เมื่อแสดงระยะทาง ค่าที่ยอมรับมีดังนี้google.maps.UnitSystem.METRIC(ค่าเริ่มต้น)google.maps.UnitSystem.IMPERIAL
avoidHighways(ไม่บังคับ) — หากtrueระบบจะคำนวณเส้นทางระหว่างต้นทางและปลายทาง เพื่อหลีกเลี่ยงทางหลวงหากเป็นไปได้avoidTolls(ไม่บังคับ) — หากtrueระบบจะคำนวณเส้นทางระหว่างจุดโดยใช้ เส้นทางที่ไม่ใช่ทางด่วน (หากเป็นไปได้)
รูปแบบการเดินทาง
เมื่อคำนวณเวลาและระยะทาง คุณจะระบุ รูปแบบการเดินทางที่จะใช้ได้ ปัจจุบันระบบรองรับโหมดการเดินทางต่อไปนี้
BICYCLINGคำขอ เส้นทางจักรยานผ่านเส้นทางจักรยานและถนนที่แนะนำ (ขณะนี้มีให้บริการในสหรัฐอเมริกาและบางเมืองในแคนาดาเท่านั้น)DRIVING(ค่าเริ่มต้น) ระบุเส้นทางการขับขี่มาตรฐานโดยใช้เครือข่ายถนนTRANSITขอเส้นทางผ่าน เส้นทางขนส่งสาธารณะ ตัวเลือกนี้จะระบุได้ก็ต่อเมื่อคำขอมีคีย์ API เท่านั้น ดูส่วนตัวเลือก การขนส่งสาธารณะสำหรับตัวเลือกที่มีในการขอประเภทนี้WALKINGคำขอ เส้นทางเดินเท้าผ่านทางเท้าและทางเดิน (หากมี)
ตัวเลือกขนส่งสาธารณะ
ขณะนี้บริการขนส่งสาธารณะยังอยู่ในขั้น "ทดลอง" ในระยะนี้ เราจะใช้การจำกัดอัตราเพื่อป้องกันการละเมิด API เราจะ บังคับใช้ขีดจํากัดของคําค้นหาทั้งหมดต่อการโหลดแผนที่ในที่สุดตามการใช้งาน API อย่างเป็นธรรม
ตัวเลือกที่มีสำหรับคำขอเมทริกซ์ระยะทางจะแตกต่างกันไปตามโหมดการเดินทาง
ในคำขอการเดินทาง ระบบจะไม่สนใจตัวเลือก avoidHighways และ
avoidTolls คุณระบุตัวเลือกการกำหนดเส้นทางเฉพาะการขนส่งได้ผ่านออบเจ็กต์ลิเทอรัล TransitOptions
คำขอการเดินทางมีความละเอียดอ่อนด้านเวลา ระบบจะแสดงการคำนวณสำหรับเวลาในอนาคตเท่านั้น
ออบเจ็กต์ลิเทอรัล TransitOptions มีฟิลด์ต่อไปนี้
{ arrivalTime: Date, departureTime: Date, modes: [transitMode1, transitMode2] 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ระบุว่าเส้นทางที่คำนวณควรมีการเดินในระยะทางที่จำกัด
ตัวเลือกการขับขี่
ใช้ออบเจ็กต์ drivingOptions เพื่อระบุเวลาออกเดินทางสำหรับ
การคำนวณเส้นทางที่ดีที่สุดไปยังจุดหมายปลายทางตามสภาพการจราจรที่คาดการณ์ไว้ นอกจากนี้ คุณยังระบุได้ด้วยว่าต้องการให้เวลาโดยประมาณในการจราจรเป็นแบบมองในแง่ร้าย มองในแง่ดี หรือ
การประมาณที่ดีที่สุดโดยอิงตามสภาพการจราจรในอดีตและการจราจรแบบเรียลไทม์
ออบเจ็กต์ drivingOptions มีช่องต่อไปนี้
{ departureTime: Date, trafficModel: TrafficModel }
โดยมีคำอธิบายดังนี้
departureTime(ต้องระบุเพื่อให้ ออบเจ็กต์ลิเทอรัลdrivingOptionsใช้ได้) ระบุ เวลาออกเดินทางที่ต้องการเป็นออบเจ็กต์Dateค่าต้อง ตั้งเป็นเวลาปัจจุบันหรือเวลาในอนาคต โดยต้องไม่ใช่วันที่ในอดีต (API จะแปลงวันที่ทั้งหมดเป็น UTC เพื่อให้มั่นใจว่าการจัดการจะสอดคล้องกัน ในเขตเวลาต่างๆ) หากคุณใส่departureTimeในคำขอ API จะแสดงเส้นทางที่ดีที่สุดตามสภาพการจราจรที่คาดไว้ในขณะนั้น และ รวมเวลาที่คาดการณ์ในการจราจร (duration_in_traffic) ในการตอบกลับ หากคุณไม่ได้ระบุเวลาออกเดินทาง (กล่าวคือ หากคำขอไม่มีdrivingOptions) เส้นทางที่แสดง จะเป็นเส้นทางที่ดีโดยทั่วไปโดยไม่คำนึงถึงสภาพการจราจรtrafficModel(ไม่บังคับ) ระบุสมมติฐานที่จะ ใช้เมื่อคำนวณเวลาในการเข้าชม การตั้งค่านี้จะส่งผลต่อค่า ที่แสดงในช่องduration_in_trafficในการตอบกลับ ซึ่งมีเวลาที่คาดการณ์ในการเข้าชมตามค่าเฉลี่ยย้อนหลัง ค่าเริ่มต้นคือbest_guessค่าที่อนุญาตมีดังนี้bestguess(ค่าเริ่มต้น) ระบุว่าค่าที่ส่งคืนduration_in_trafficควรเป็นค่าประมาณที่ดีที่สุดของเวลาในการเดินทาง โดยพิจารณาจากข้อมูลที่ทราบเกี่ยวกับสภาพการจราจรในอดีตและ การจราจรแบบเรียลไทม์ การจราจรแบบเรียลไทม์จะมีความสำคัญมากขึ้นเมื่อdepartureTimeใกล้เคียงกับเวลาปัจจุบันpessimisticแสดงว่าเวลาเดินทางกลับduration_in_trafficควรนานกว่าเวลาเดินทางจริง ในวันส่วนใหญ่ แม้ว่าบางวันที่มีสภาพการจราจรแย่เป็นพิเศษ อาจมีค่าเกินกว่านี้optimisticแสดงว่าduration_in_trafficที่แสดงควรสั้นกว่า ระยะเวลาเดินทางจริงในวันส่วนใหญ่ แม้ว่าบางวันที่มีสภาพการจราจรดีเป็นพิเศษ อาจเร็วกว่าค่านี้
ด้านล่างนี้คือตัวอย่าง DistanceMatrixRequest สำหรับเส้นทางการขับรถ
ซึ่งรวมถึงเวลาออกเดินทางและรูปแบบการจราจร
{ origins: [{lat: 55.93, lng: -3.118}, 'Greenwich, England'], destinations: ['Stockholm, Sweden', {lat: 50.087, lng: 14.421}], travelMode: 'DRIVING', drivingOptions: { departureTime: new Date(Date.now() + N), // for the time N milliseconds from now. trafficModel: 'optimistic' } }
การตอบกลับของเมทริกซ์ระยะทาง
การเรียกใช้บริการ Distance Matrix ที่สำเร็จจะแสดงผลออบเจ็กต์
DistanceMatrixResponse และออบเจ็กต์
DistanceMatrixStatus ระบบจะส่งค่าเหล่านี้ไปยังฟังก์ชัน Callback
ที่คุณระบุในคำขอ
ออบเจ็กต์ DistanceMatrixResponse มีข้อมูลระยะทางและ
ระยะเวลาสำหรับคู่ต้นทาง/ปลายทางแต่ละคู่ที่คำนวณเส้นทางได้
{ "originAddresses": [ "Greenwich, Greater London, UK", "13 Great Carleton Square, Edinburgh, City of Edinburgh EH16 4, UK" ], "destinationAddresses": [ "Stockholm County, Sweden", "Dlouhá 609/2, 110 00 Praha-Staré Město, Česká republika" ], "rows": [ { "elements": [ { "status": "OK", "duration": { "value": 70778, "text": "19 hours 40 mins" }, "distance": { "value": 1887508, "text": "1173 mi" } }, { "status": "OK", "duration": { "value": 44476, "text": "12 hours 21 mins" }, "distance": { "value": 1262780, "text": "785 mi" } } ] }, { "elements": [ { "status": "OK", "duration": { "value": 96000, "text": "1 day 3 hours" }, "distance": { "value": 2566737, "text": "1595 mi" } }, { "status": "OK", "duration": { "value": 69698, "text": "19 hours 22 mins" }, "distance": { "value": 1942009, "text": "1207 mi" } } ] } ] }
ผลลัพธ์ของเมทริกซ์ระยะทาง
ฟิลด์ที่รองรับในการตอบกลับมีคำอธิบายอยู่ด้านล่าง
originAddressesคืออาร์เรย์ที่มีสถานที่ตั้ง ที่ส่งในฟิลด์originsของคำขอเมตริกซ์ระยะทาง ระบบจะแสดงที่อยู่ตามรูปแบบที่เข้ารหัสพิกัดภูมิศาสตร์destinationAddressesคืออาร์เรย์ที่มีสถานที่ตั้งที่ส่งในฟิลด์destinationsในรูปแบบที่ตัวเข้ารหัสพิกัดภูมิศาสตร์แสดงผลrowsคืออาร์เรย์ของออบเจ็กต์DistanceMatrixResponseRowโดยแต่ละแถวจะสอดคล้องกับต้นทางelementsเป็นรายการย่อยของrowsและสอดคล้อง กับการจับคู่ต้นทางของแถวกับแต่ละปลายทาง โดยจะมีข้อมูลสถานะ ระยะเวลา ระยะทาง และค่าโดยสาร (หากมี) สำหรับคู่ต้นทาง/ปลายทางแต่ละคู่elementแต่ละรายการมีฟิลด์ต่อไปนี้status: ดูรายการรหัสสถานะที่อาจเป็นไปได้ในรหัสสถานะduration: ระยะเวลาที่ใช้ในการเดินทางในเส้นทางนี้ แสดงเป็นวินาที (ฟิลด์value) และเป็นtextค่าข้อความจะจัดรูปแบบตามunitSystemที่ระบุในคำขอ (หรือในเมตริก หากไม่ได้ระบุ ค่ากำหนด)duration_in_traffic: ระยะเวลาที่ใช้ในการ เดินทางในเส้นทางนี้โดยพิจารณาจากสภาพการจราจรในปัจจุบัน แสดงเป็นวินาที (ฟิลด์value) และเป็นtextค่าข้อความจะจัดรูปแบบตามunitSystemที่ระบุในคำขอ (หรือในเมตริก หากไม่ได้ระบุ ค่ากำหนด) ระบบจะแสดงduration_in_trafficเมื่อมีข้อมูลการจราจรเท่านั้น โดยจะตั้งค่าmodeเป็นdrivingและรวมdepartureTimeเป็นส่วนหนึ่งของฟิลด์distanceMatrixOptionsในคำขอdistance: ระยะทางทั้งหมดของเส้นทางนี้ แสดงเป็นเมตร (value) และเป็นtextค่าข้อความ จะจัดรูปแบบตามunitSystemที่ระบุใน คำขอ (หรือในเมตริก หากไม่ได้ระบุค่ากำหนด)fare: มีค่าโดยสารทั้งหมด (นั่นคือค่าตั๋วทั้งหมด) ในเส้นทางนี้ ระบบจะแสดงพร็อพเพอร์ตี้นี้สําหรับคําขอการขนส่งสาธารณะเท่านั้น และสําหรับผู้ให้บริการขนส่งสาธารณะที่มีข้อมูลค่าโดยสารเท่านั้น ข้อมูลประกอบด้วยcurrency: รหัสสกุลเงิน ISO 4217ที่ระบุสกุลเงินที่แสดงจำนวนเงินvalue: จำนวนค่าโดยสารทั้งหมดในสกุลเงินที่ระบุ ไว้ข้างต้น
รหัสสถานะ
การตอบกลับเมทริกซ์ระยะทางจะมีรหัสสถานะสำหรับการตอบกลับโดยรวม รวมถึงสถานะของแต่ละองค์ประกอบ
รหัสสถานะการตอบกลับ
รหัสสถานะที่ใช้กับ DistanceMatrixResponse จะส่งในออบเจ็กต์ DistanceMatrixStatus และมีดังนี้
OK— คำขอถูกต้อง ระบบจะแสดงสถานะนี้แม้ว่าจะไม่พบเส้นทางระหว่างต้นทางและ ปลายทางใดๆ ก็ตาม ดูข้อมูลสถานะระดับองค์ประกอบได้ที่รหัสสถานะขององค์ประกอบINVALID_REQUEST— คำขอที่ระบุไม่ถูกต้อง ซึ่งมักเกิดจากไม่มีข้อมูลในช่องที่ต้องกรอก ดูรายการช่องที่รองรับด้านบนMAX_ELEMENTS_EXCEEDED— ผลิตภัณฑ์ของต้นทางและปลายทางเกินขีดจำกัดต่อการค้นหาMAX_DIMENSIONS_EXCEEDED— คำขอของคุณมีต้นทางมากกว่า 25 รายการ หรือปลายทางมากกว่า 25 รายการOVER_QUERY_LIMIT— แอปพลิเคชันของคุณขอองค์ประกอบมากเกินไปภายในระยะเวลาที่อนุญาต คำขอควร สำเร็จหากคุณลองอีกครั้งหลังจากผ่านไประยะเวลาที่เหมาะสมREQUEST_DENIED— บริการปฏิเสธการใช้บริการ Distance Matrix โดยหน้าเว็บของคุณUNKNOWN_ERROR— ประมวลผลคำขอเมทริกซ์ระยะทางไม่ได้เนื่องจากข้อผิดพลาดเกี่ยวกับเซิร์ฟเวอร์ คำขออาจสำเร็จหากคุณลองอีกครั้ง
รหัสสถานะขององค์ประกอบ
รหัสสถานะต่อไปนี้ใช้กับออบเจ็กต์ที่เฉพาะเจาะจง
DistanceMatrixElement
NOT_FOUND— ระบบระบุพิกัดทางภูมิศาสตร์ของต้นทางและ/หรือปลายทางของการจับคู่นี้ไม่ได้OK— การตอบกลับมีผลลัพธ์ที่ถูกต้องZERO_RESULTS— ไม่พบเส้นทางระหว่างต้นทางกับจุดหมาย
การแยกวิเคราะห์ผลลัพธ์
ออบเจ็กต์ DistanceMatrixResponse มี row หนึ่งรายการสำหรับแต่ละต้นทางที่ส่งผ่านในคำขอ แต่ละแถว
มีฟิลด์ element สำหรับการจับคู่แต่ละรายการของต้นทางนั้นกับ
ปลายทางที่ระบุ
function callback(response, status) { if (status == 'OK') { var origins = response.originAddresses; var destinations = response.destinationAddresses; for (var i = 0; i < origins.length; i++) { var results = response.rows[i].elements; for (var j = 0; j < results.length; j++) { var element = results[j]; var distance = element.distance.text; var duration = element.duration.text; var from = origins[i]; var to = destinations[j]; } } } }