Genel Bakış
Google'ın Mesafe Matrisi hizmeti, belirli bir ulaşım şeklini kullanarak birden fazla başlangıç ve varış noktası arasındaki seyahat mesafesini ve yolculuk süresini hesaplar.
Bu hizmet ayrıntılı rota bilgileri döndürmez. Çoklu çizgiler ve metin biçimindeki yol tarifleri de dahil olmak üzere rota bilgileri, istenen tek başlangıç ve hedefi Directions Service'e ileterek elde edilebilir.
Başlarken
Maps JavaScript API'de Distance Matrix hizmetini kullanmadan önce, Distance Matrix API'nin (Eski) Google Cloud Console'da Maps JavaScript API için ayarladığınız projede etkinleştirildiğinden emin olun.
Etkinleştirilen API'ler listenizi görüntülemek için:
- Google Cloud Console'a gidin.
- Proje seçin düğmesini tıklayın, ardından Maps JavaScript API için ayarladığınız projeyi seçip Aç'ı tıklayın.
- Kontrol paneli'ndeki API listesinde Distance Matrix API (Eski)'yi bulun.
- API'yi listede görüyorsanız hazırsınız demektir. API listelenmemişse https://console.cloud.google.com/apis/library/distance-matrix-backend.googleapis.com adresinden etkinleştirin.
Fiyatlandırma ve politikalar
Fiyatlandırma
JavaScript Distance Matrix hizmetinin fiyatlandırma ve kullanım politikaları hakkında bilgi edinmek için Distance Matrix API (Eski) ile ilgili Kullanım ve Faturalandırma bölümüne bakın.
Not: Distance Matrix hizmetine gönderilen her sorgu, izin verilen öğe sayısıyla sınırlıdır. Öğelerin sayısı, başlangıç noktalarının sayısı ile varış noktalarının sayısının çarpımıyla belirlenir.
Politikalar
Mesafe Matrisi hizmetinin kullanımı, Mesafe Matrisi API'si (Eski) için açıklanan politikalara uygun olmalıdır.
Distance Matrix istekleri
Google Haritalar API'sinin harici bir sunucuya çağrı yapması gerektiğinden Distance Matrix hizmetine erişim eşzamansızdır. Bu nedenle, sonuçları işlemek için isteğin tamamlanması üzerine yürütülecek bir geri çağırma yöntemi iletmeniz gerekir.
Kodunuzda google.maps.DistanceMatrixService oluşturucu nesnesi aracılığıyla Distance Matrix hizmetine erişirsiniz.
DistanceMatrixService.getDistanceMatrix() yöntemi, Distance Matrix hizmetine bir istek başlatır ve bu isteğe kaynakları, hedefleri ve seyahat modunu içeren bir DistanceMatrixRequest nesne değişmez değeri ile yanıt alındığında yürütülecek bir geri çağırma yöntemi iletir.
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 aşağıdaki alanları içerir:
origins(zorunlu) — Mesafe ve sürenin hesaplanacağı bir veya daha fazla adres dizesi,google.maps.LatLngnesnesi ya da Yer nesnesi içeren bir dizi.destinations(zorunlu) — Mesafenin ve sürenin hesaplanacağı bir veya daha fazla adres dizesi,google.maps.LatLngnesnesi ya da Yer nesnesi içeren bir dizi.travelMode(isteğe bağlı): Yol tarifi hesaplanırken kullanılacak ulaşım şekli. Seyahat modları bölümüne bakın.transitOptions(isteğe bağlı) — YalnızcatravelModedeğerininTRANSITolduğu istekler için geçerli olan seçenekler. Geçerli değerler, toplu taşıma seçenekleri bölümünde açıklanmıştır.drivingOptions(isteğe bağlı), yalnızcatravelModedeğerininDRIVINGolduğu istekler için geçerli olan değerleri belirtir. Geçerli değerler, Sürüş Seçenekleri bölümünde açıklanmıştır.unitSystem(isteğe bağlı) — Mesafeyi gösterirken kullanılacak birim sistemi. Kabul edilen değerler:google.maps.UnitSystem.METRIC(varsayılan)google.maps.UnitSystem.IMPERIAL
avoidHighways(isteğe bağlı) —trueise başlangıç ve varış noktaları arasındaki rotalar mümkün olduğunda otoyolları içermeyecek şekilde hesaplanır.avoidTolls(isteğe bağlı):trueise noktalar arasındaki yol tarifleri mümkün olduğunda ücretli olmayan yollar kullanılarak hesaplanır.
Seyahat Modları
Süreleri ve mesafeleri hesaplarken hangi ulaşım modunun kullanılacağını belirtebilirsiniz. Şu anda aşağıdaki seyahat modları desteklenmektedir:
BICYCLINGistekleri Bisiklet yolları ve tercih edilen caddeler üzerinden bisikletle yol tarifi (Şu anda yalnızca ABD'de ve Kanada'daki bazı şehirlerde kullanılabilir).DRIVING(varsayılan) Yol ağını kullanarak standart arabayla yol tariflerini gösterir.TRANSITtoplu taşıma rotalarıyla yol tarifi ister. Bu seçenek yalnızca istek bir API anahtarı içeriyorsa belirtilebilir. Bu tür isteklerde kullanılabilen seçenekler için toplu taşıma seçenekleri bölümüne bakın.WALKINGistekleri Yaya yolları ve kaldırımlar üzerinden yaya yol tarifi (mevcut olduğu yerlerde).
Toplu Taşıma Seçenekleri
Toplu Taşıma Hizmeti şu anda "deneysel" aşamadadır. Bu aşamada, API'nin kötüye kullanımını önlemek için sıklık sınırları uygulayacağız. API'nin adil kullanımına bağlı olarak, harita yükleme başına toplam sorgu sayısına bir sınır getireceğiz.
Mesafe matrisi isteği için kullanılabilen seçenekler seyahat modlarına göre değişir.
Toplu taşıma isteklerinde avoidHighways ve avoidTolls seçenekleri yoksayılır. TransitOptions nesne değişmez değeri aracılığıyla toplu taşıma araçlarına özel rota seçenekleri belirtebilirsiniz.
Toplu taşıma istekleri zamana duyarlıdır. Yalnızca gelecekteki zamanlar için hesaplamalar döndürülür.
TransitOptions nesne değişmez değeri aşağıdaki alanları içerir:
{ arrivalTime: Date, departureTime: Date, modes: [transitMode1, transitMode2] routingPreference: TransitRoutePreference }
Bu alanlar aşağıda açıklanmıştır:
arrivalTime(isteğe bağlı), istenen varış zamanınıDatenesnesi olarak belirtir. Varış zamanı belirtilmişse kalkış zamanı yoksayılır.departureTime(isteğe bağlı), istenen kalkış zamanınıDatenesnesi olarak belirtir.arrivalTimebelirtilmişsedepartureTimeyoksayılır.departureTimeveyaarrivalTimeiçin değer belirtilmezse varsayılan olarak şu anki zaman kullanılır.modes(isteğe bağlı), bir veya daha fazlaTransitModenesne değişmezi içeren bir dizidir. Bu alan yalnızca istekte API anahtarı varsa eklenebilir. HerTransitMode, tercih edilen bir toplu taşıma şeklini belirtir. Aşağıdaki değerlere izin verilir:BUS, hesaplanan rotada otobüsle seyahatin tercih edilmesi gerektiğini gösterir.RAIL, hesaplanan rotada tren, tramvay, hafif raylı sistem ve metro ile seyahatin tercih edilmesi gerektiğini gösterir.SUBWAY, hesaplanan rotada metroyla seyahatin tercih edilmesi gerektiğini gösterir.TRAIN, hesaplanan rotada trenle seyahatin tercih edilmesi gerektiğini gösterir.TRAM, hesaplanan rotada tramvay ve hafif raylı sistemle seyahatin tercih edilmesi gerektiğini gösterir.
routingPreference(isteğe bağlı), transit rotalarıyla ilgili tercihleri belirtir. Bu seçeneği kullanarak, API'nin seçtiği varsayılan en iyi rotayı kabul etmek yerine döndürülen seçenekleri etkileyebilirsiniz. Bu alan yalnızca istek bir API anahtarı içeriyorsa belirtilebilir. Aşağıdaki değerlere izin verilir:FEWER_TRANSFERSHesaplanan rotada sınırlı sayıda aktarma tercih edilmesi gerektiğini gösterir.LESS_WALKINGHesaplanan rotada sınırlı miktarda yürüyüş tercih edilmesi gerektiğini gösterir.
Sürüş Seçenekleri
Beklenen trafik koşulları göz önünde bulundurularak varış noktanıza ulaşmak için en iyi rotayı hesaplarken kalkış zamanını belirtmek üzere drivingOptions nesnesini kullanın. Ayrıca, trafikteki tahmini sürenin kötümser, iyimser veya geçmiş trafik koşullarına ve canlı trafiğe göre en iyi tahmin olmasını isteyip istemediğinizi de belirtebilirsiniz.
drivingOptions nesnesi aşağıdaki alanları içerir:
{ departureTime: Date, trafficModel: TrafficModel }
Bu alanlar aşağıda açıklanmıştır:
departureTime(drivingOptionsnesne değişmezinin geçerli olması için gereklidir), istenen kalkış zamanınıDatenesnesi olarak belirtir. Değer, geçerli zamana veya gelecekteki bir zamana ayarlanmalıdır. Geçmişte olamaz. (API, tüm tarihleri UTC'ye dönüştürerek farklı saat dilimlerinde tutarlı bir şekilde işlenmesini sağlar.) İsteğedepartureTimedahil ederseniz: API, o sırada beklenen trafik koşulları göz önüne alındığında en iyi rotayı döndürür ve yanıta trafikteki tahmini süreyi (duration_in_traffic) dahil eder. Kalkış saati belirtmezseniz (yani istekdrivingOptionsiçermiyorsa) döndürülen rota, trafik koşulları dikkate alınmadan genel olarak iyi bir rotadır.trafficModel(isteğe bağlı), trafikteki süreyi hesaplarken kullanılacak varsayımları belirtir. Bu ayar, yanıttakiduration_in_trafficalanında döndürülen değeri etkiler. Bu alan, geçmiş ortalamalara dayalı olarak trafikteki tahmini süreyi içerir. Varsayılan olarakbest_guessdeğerine ayarlanır. Aşağıdaki değerlere izin verilir:bestguess(varsayılan), döndürülenduration_in_trafficdeğerinin, hem geçmiş trafik koşulları hem de canlı trafik hakkında bilinenler göz önüne alındığında seyahat süresinin en iyi tahmini olması gerektiğini gösterir. Canlı trafik,departureTimeşu ana ne kadar yakınsa o kadar önemli hale gelir.pessimistic, döndürülenduration_in_trafficdeğerinin çoğu günde gerçek seyahat süresinden daha uzun olması gerektiğini gösterir. Ancak trafik koşullarının özellikle kötü olduğu bazı günlerde bu değer aşılabilir.optimistic, döndürülenduration_in_trafficdeğerinin çoğu günde gerçek seyahat süresinden daha kısa olması gerektiğini gösterir. Ancak zaman zaman, trafik koşullarının özellikle iyi olduğu günlerde bu değerden daha hızlı olabilir.
Aşağıda, kalkış saati ve trafik modeli de dahil olmak üzere DistanceMatrixRequest sürüş rotalarıyla ilgili bir örnek verilmiştir:
{ 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 yanıtları
Mesafe Matrisi hizmetine yapılan başarılı bir çağrı, DistanceMatrixResponse nesnesini ve DistanceMatrixStatus nesnesini döndürür. Bunlar, istekte belirttiğiniz geri çağırma işlevine iletilir.
DistanceMatrixResponse nesnesi, rota hesaplanabilen her başlangıç/hedef çifti için mesafe ve süre bilgilerini içerir.
{ "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" } } ] } ] }
Distance Matrix Sonuçları
Yanıt içinde desteklenen alanlar aşağıda açıklanmıştır.
originAddresses, Mesafe Matrisi isteğininoriginsalanında iletilen konumları içeren bir dizidir. Adresler, coğrafi kodlayıcı tarafından biçimlendirildiği şekilde döndürülür.destinationAddresses,destinationsalanında iletilen konumları içeren bir dizidir. Bu dizi, coğrafi kodlayıcı tarafından döndürülen biçimdedir.rows, her satırı bir kaynağa karşılık gelenDistanceMatrixResponseRownesnelerinden oluşan bir dizidir.elements,rowsöğesinin alt öğeleridir ve satırın kaynağının her hedefle eşleştirilmesine karşılık gelir. Her başlangıç/varış çifti için durum, süre, mesafe ve ücret bilgileri (varsa) yer alır.- Her
elementaşağıdaki alanları içerir:status: Olası durum kodlarının listesi için Durum Kodları'na bakın.duration: Bu rotada seyahat etmek için gereken süre, saniye cinsinden (valuealanı) vetextolarak ifade edilir. Metin değeri, istekte (veya tercih sağlanmadıysa metrikte) belirtilenunitSystemgöre biçimlendirilir.duration_in_traffic: Mevcut trafik koşulları dikkate alınarak bu rotada seyahat etmek için gereken süre. Saniye cinsinden (valuealanı) vetextolarak ifade edilir. Metin değeri, istekte (veya tercih sağlanmadıysa metrikte) belirtilenunitSystemgöre biçimlendirilir.duration_in_trafficyalnızca trafik verilerinin mevcut olduğu durumlarda döndürülür,modedrivingolarak ayarlanır vedepartureTime, istektekidistanceMatrixOptionsalanının bir parçası olarak eklenir.distance: Bu rotanın toplam mesafesi, metre (value) vetextolarak ifade edilir. Metin değeri, istekte (veya tercih belirtilmediyse metrikte) belirtilenunitSystembiçimine göre biçimlendirilir.fare: Bu rotadaki toplam ücreti (yani toplam bilet maliyetlerini) içerir. Bu özellik yalnızca toplu taşıma istekleri ve yalnızca ücret bilgilerinin mevcut olduğu toplu taşıma sağlayıcıları için döndürülür. Bu bilgiler arasında şunlar yer alır:currency: Tutarın ifade edildiği para birimini gösteren bir ISO 4217 para birimi kodu.value: Yukarıda belirtilen para biriminde toplam ücret tutarı.
Durum Kodları
Mesafe Matrisi yanıtı, yanıtın tamamı için bir durum kodu ve her öğe için bir durum içerir.
Yanıt Durum Kodları
DistanceMatrixResponse için geçerli olan durum kodları DistanceMatrixStatus nesnesinde iletilir ve şunları içerir:
OK: İstek geçerlidir. Bu durum, başlangıç ve varış noktaları arasında rota bulunmasa bile döndürülebilir. Öğe düzeyindeki durum bilgileri için Öğe Durum Kodları'na bakın.INVALID_REQUEST: Sağlanan istek geçersizdi. Bu durum genellikle zorunlu alanların eksik olmasından kaynaklanır. Yukarıdaki desteklenen alanlar listesine bakın.MAX_ELEMENTS_EXCEEDED— Başlangıç noktaları ve hedeflerin ürünü, sorgu başına sınırı aşıyor.MAX_DIMENSIONS_EXCEEDED— İsteğinizde 25'ten fazla kaynak veya 25'ten fazla hedef vardı.OVER_QUERY_LIMIT— Uygulamanız, izin verilen süre içinde çok fazla öğe istedi. Makul bir süre sonra tekrar denerseniz istek başarılı olur.REQUEST_DENIED— Hizmet, web sayfanızın Mesafe Matrisi hizmetini kullanmasını reddetti.UNKNOWN_ERROR: Bir Mesafe Matrisi isteği, sunucu hatası nedeniyle işlenemedi. Tekrar denerseniz istek başarılı olabilir.
Öğe Durum Kodları
Aşağıdaki durum kodları belirli DistanceMatrixElement nesneleri için geçerlidir:
NOT_FOUND: Bu eşlemenin kaynağı ve/veya hedefi coğrafi olarak kodlanamadı.OK: Yanıt geçerli bir sonuç içeriyor.ZERO_RESULTS: Başlangıç ve varış noktası arasında rota bulunamadı.
Sonuçları ayrıştırma
DistanceMatrixResponse nesnesi, istekte iletilen her kaynak için bir row içerir. Her satır, söz konusu kaynağın sağlanan hedeflerle eşleşmesi için bir element alanı içerir.
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]; } } } }