Genel Bakış
Google'ın Mesafe Matrisi hizmeti, belirli bir ulaşım şeklini kullanarak birden fazla başlangıç ve hedef 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 hedef Yol Tarifi Hizmeti'ne iletilerek alınabilir.
Başlarken
Maps JavaScript API'deki Distance Matrix hizmetini kullanmadan önce, Google Cloud Console'da Maps JavaScript API için ayarladığınız projede Distance Matrix API'nin (Eski) etkinleştirildiğinden emin olun.
Etkinleştirilen API'lerinizin listesini görüntülemek için:
- Google Cloud Console'a gidin.
- Proje seç 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.
- Listede API'yi 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 Mesafe Matrisi 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: Mesafe Matrisi hizmetine gönderilen her sorgu, izin verilen öğe sayısıyla sınırlıdır. Başlangıç noktalarının sayısı ile hedef noktalarının sayısı çarpılarak öğe sayısı belirlenir.
Politikalar
Mesafe Matrisi hizmetinin kullanımı, Mesafe Matrisi API'si (Eski) için açıklanan politikalara uygun olmalıdır.
Mesafe Matrisi İstekleri
Google Haritalar API'sinin harici bir sunucuya çağrı yapması gerektiğinden Mesafe Matrisi 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 Mesafe Matrisi hizmetine google.maps.DistanceMatrixService oluşturucu nesnesi üzerinden erişirsiniz.
DistanceMatrixService.getDistanceMatrix() yöntemi, Mesafe Matrisi hizmetine bir istek başlatır ve bu isteğe başlangıç noktalarını, hedefleri ve seyahat modunu içeren bir DistanceMatrixRequest nesne değişmezi 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) — Bir veya daha fazla adres dizesi,google.maps.LatLngnesnesi ya da mesafe ve zamanın hesaplanacağı 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. Ulaşım şekilleri 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 şunlardır:google.maps.UnitSystem.METRIC(varsayılan)google.maps.UnitSystem.IMPERIAL
avoidHighways(isteğe bağlı):trueise kaynaklar ve hedefler arasındaki rotalar, mümkün olduğunda otoyollardan kaçınılacak ş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.
Ulaşım şekilleri
Süreleri ve mesafeleri hesaplarken hangi ulaşım şeklinin 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) Karayolu ağını kullanarak standart araba yol tariflerini gösterir.TRANSITtoplu taşıma rotaları üzerinden 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 (mümkün olduğunda) yaya yol tarifleri.
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şmezi aracılığıyla toplu taşıma araçlarına özel rota seçenekleri belirtebilirsiniz.
Transit istekleri zamana duyarlıdır. Yalnızca gelecekteki zamanlar için hesaplamalar döndürülür.
TransitOptions nesne değişmezi 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 saat kullanılır.modes(isteğe bağlı), bir veya daha fazlaTransitModenesne değişmezi içeren bir dizidir. Bu alan yalnızca istekte bir 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ı), toplu taşıma rotalarıyla ilgili tercihleri belirtir. Bu seçeneği kullanarak, API'nin seçtiği varsayılan en iyi rota yerine döndürülen seçenekleri tercih edebilirsiniz. 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 aktarmanın 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 hedefinize 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 zorunlu), istenen kalkış zamanınıDatenesnesi olarak belirtir. Değer, geçerli zamana veya gelecekteki bir zamana ayarlanmalıdır. Geçmişte olamaz. (API, farklı saat dilimlerinde tutarlı işlem yapılmasını sağlamak için tüm tarihleri UTC'ye dönüştürür.) İ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) ekler. 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 göre 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ın olursa 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 trafik koşullarının özellikle iyi olduğu bazı günlerde bu değerden daha hızlı olabilir.
Aşağıda, kalkış saati ve trafik modeli de dahil olmak üzere sürüş rotaları için örnek bir DistanceMatrixRequest 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' } }
Mesafe Matrisi Yanıtları
Mesafe Matrisi hizmetine yapılan başarılı bir çağrı, DistanceMatrixResponse nesnesi ve DistanceMatrixStatus nesnesi 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" } } ] } ] }
Mesafe Matrisi 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ış noktası ç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ı bölümüne 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. Theduration_in_trafficis only returned where traffic data is available, themodeis set todriving, anddepartureTimeis included as part of thedistanceMatrixOptionsfield in the request.distance: Bu rotanın toplam mesafesi, metre (value) cinsinden vetextolarak ifade edilir. Metin değeri, istekte (veya tercih belirtilmediyse metrikte) belirtilenunitSystemgö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 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 Durumu 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 hedef 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ıç ve varış noktalarının çarpımı, sorgu başına sınırı aşıyor.MAX_DIMENSIONS_EXCEEDED— Talebinizde 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ırda, söz konusu kaynağın sağlanan hedefle eşleştirilmesi için bir element alanı bulunur.
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]; } } } }