mstdmstd
Новичок
У google map есть служба DistanceMatrixService (
https://developers.google.com/maps/documentation/javascript/distancematrix )
Наэтой же старнице написано "Accessing the Distance Matrix service is asynchronous, since the Google Maps API needs to make a call to an external server"
Мне нужно получить расстояние от одной точки сразу нескольких точек - и проболема в том когда приходит ответ этой службы я не могу сопоставить
у какому именно запросу он относится
В нете нашел ( http://stackoverflow.com/questions/14061990/javascript-pass-parameter-to-callback-or-set-variable-value-in-distancematrixsta ) как передать еще один параметр в запрос этой службы
Делаю :
я вывожу отладочную инфу в мемо info_textarea чтобы не выводить алерты и в нем вижу :
то есть третий и необходимый параметр всегда имеет значения последнего вызова
Дела как и во 2м примере из ссылки выше:
и результат то же
Как это можно побороть ?
https://developers.google.com/maps/documentation/javascript/distancematrix )
Наэтой же старнице написано "Accessing the Distance Matrix service is asynchronous, since the Google Maps API needs to make a call to an external server"
Мне нужно получить расстояние от одной точки сразу нескольких точек - и проболема в том когда приходит ответ этой службы я не могу сопоставить
у какому именно запросу он относится
В нете нашел ( http://stackoverflow.com/questions/14061990/javascript-pass-parameter-to-callback-or-set-variable-value-in-distancematrixsta ) как передать еще один параметр в запрос этой службы
Делаю :
Код:
for (var i = 0; i < eventLocationsList.length; i++) { // Все элементы массива
this_m_curreventLocationId= eventLocationsList[i].id // Дополнительный ID параметр передаваемый в callbackEvents
$("#info_textarea").html( $("#info_textarea").html() + " " + "\r NOW+ this_m_curreventLocationId::" + this_m_curreventLocationId ) // мемо поле с отладочной инфой
service.getDistanceMatrix( {
origins: [defaultLocation], // Точка относительно которой измеряется расстояние
destinations: [ new google.maps.LatLng(eventLocationsList[i].lat, eventLocationsList[i].lng) ], // следующая точка
travelMode: google.maps.TravelMode.DRIVING,
unitSystem: google.maps.UnitSystem.METRIC,
avoidHighways: false,
avoidTolls: false
}, function(response, status) {callbackEvents( response, status, this_m_curreventLocationId ) } );
//}, callbackEvents);
}
function callbackEvents(response, status, itemId) { // вызов колбека с 3им параметорм
$("#info_textarea").html( $("#info_textarea").html() + " " + "\r!!! callbackEvents itemId::" + itemId )
...
я вывожу отладочную инфу в мемо info_textarea чтобы не выводить алерты и в нем вижу :
Код:
NOW+ this_m_curreventLocationId::1
NOW+ this_m_curreventLocationId::2
NOW+ this_m_curreventLocationId::3
NOW+ this_m_curreventLocationId::4
NOW+ this_m_curreventLocationId::5
NOW+ this_m_curreventLocationId::6
!!! callbackEvents itemId::6
!!! callbackEvents itemId::6
!!! callbackEvents itemId::6
!!! callbackEvents itemId::6
!!! callbackEvents itemId::6
!!! callbackEvents itemId::6
Дела как и во 2м примере из ссылки выше:
Код:
for (var i = 0; i < eventLocationsList.length; i++) {
//alert( "i::"+i+" eventLocationsList[i]::"+var_dump(eventLocationsList[i]) )
this_m_curreventLocationId= eventLocationsList[i].id
$("#info_textarea").html( $("#info_textarea").html() + " " + "\r NOW+ this_m_curreventLocationId::" + this_m_curreventLocationId )
service.getDistanceMatrix({
origins: [defaultLocation],
destinations: [new google.maps.LatLng(eventLocationsList[i].lat, eventLocationsList[i].lng)],
travelMode: google.maps.TravelMode.DRIVING,
unitSystem: google.maps.UnitSystem.METRIC,
avoidHighways: false,
avoidTolls: false
},
function callback(response, status)
{
if (status == google.maps.DistanceMatrixStatus.OK)
{
$("#info_textarea").html( $("#info_textarea").html() + " " + "\r!!! ZZcallbackEvents this_m_curreventLocationId::" + this_m_curreventLocationId )
Как это можно побороть ?