) один, ответ Джонни идеален.

ользую DirectionsService и метод маршрута для генерации DirectionsResult. Я также использую объект DirectionsRenderer для отображения результатов, потому что он очень прост в использовании. У меня нет проблем с обнаружением событий directions_changed, но я хотел бы знать, возможно ли получить события из полилинии, представляющей маршрут, или даже события из маркеров (маленьких кружков), сгенерированных после перетаскивания полилинии.

При использовании карт Google (maps.google.com, «Получить маршруты») вы можете перетащить полилинию, щелкнуть правой кнопкой мыши по ней (или по маркерам), чтобы отобразить меню. Поэтому я думаю, что есть способ отлавливать события от DirectionsRenderer (предположим, что Google использует этот объект в этом случае).

Если у кого-нибудь есть идея

Ответы на вопрос(1)

Решение Вопроса

ожу, если найду что-нибудь полезное.

Обновление: после нескольких минут в JavaScript, я обнаружил, чтоDirectionsResult Объект содержит массив путевых точек, в том числе созданных, когда путь перетаскивается курсором. Если вы завершилиРуководство по перетаскиванию направлений вы можете получить доступ к этому объекту через directionsDisplay.directions внутри метода обратного вызова дляdirections_changed мероприятие. Этот объект содержит член с именемС.Ф. который содержитпутевые точки массив, если есть, если нет, то это ноль. Каждый член этого массива содержит член с именемместо нахождения, сохраняя координаты подВашингтон (широта) ия (долгота).

Чтобы продемонстрировать обработку путевых точек, я написал небольшую функцию, которая отображает маркеры вместо путевых точек. Чтобы проверить это, добавьте следующую глобальную переменную в скрипт;

var markers = [];  

изменитьdirections_changed функция обратного вызова события

google.maps.event.addListener(directionsDisplay, 'directions_changed', function() {  
    computeTotalDistance(directionsDisplay.directions);  
});

к следующему;

google.maps.event.addListener(directionsDisplay, 'directions_changed', function() {  
    computeTotalDistance(directionsDisplay.directions);  
    displayWaypoints(directionsDisplay.directions);  
});

и добавьте эту функцию тоже

function displayWaypoints(result) {  
    for (var i = 0; i < markers.length; ++i) {  
        markers[i].setMap(null);  
    }  
    markers = [];  
    if (result.sf.waypoints) {  
            for (var i = 0; i < result.sf.waypoints.length; ++i) {  
                    var latitude = result.sf.waypoints[i].location.wa;  
                    var longitude = result.sf.waypoints[i].location.ya;    
                    markers.push(new google.maps.Marker({  
                            position: new google.maps.LatLng(latitude, longitude),  
                            map: map  
                    }));  
            }  
    }  
}  

Вы также можете подавить встроенный рисунок маркера DirectionsRenderer. замещать

var rendererOptions = {  
    draggable: true  
};  

со следующим

var rendererOptions = {  
    draggable: true,  
    suppressMarkers: true  
};  

Я не мог найти никаких официальных ссылок на этоС.Ф. член. Используйте его на свой страх и риск, Google может изменить API без предварительного уведомления. Пока они не сделают публичный API для манипулирования путевыми точками после перетаскивания направлений, я не могу придумать лучшего решения.

Это мой первый ответ о переполнении стека. Надеюсь, он мне помог.

С наилучшими пожеланиями, Джонни

 Naoj31 янв. 2011 г., 14:37
Молодец Джонни, это именно то, чего я ожидал! Я также пытался найти такое специальное свойство на объекте результата. Не могли бы вы рассказать мне, как вы нашли это? В любом случае, спасибо!
 Johnny Levai31 янв. 2011 г., 21:58
Я использую Chrome, нажимаю правую кнопку мыши и осматриваю элемент. Я только что написал directionsDisplay в консоли JS и таким образом смог проанализировать этот объект DirectionsRenderer, увидеть его член и т. Д.
 Johnny Levai08 февр. 2011 г., 13:37
Похоже, что Google уже изменил API. Это больше не работает, и у меня почти нет свободного времени, чтобы посмотреть новое местоположение координат путевых точек. К сожалению :(
 user76441122 мая 2011 г., 03:33
Новое местоположение находится в $ f вместо sf. Вы можете отслеживать объект, используя console.log (переменную) в Chrome и проверяя вашу консоль.
 Arsen710 февр. 2012 г., 17:56
Да, точный(и задокументировано) свойство называетсяvia_waypoints, С этим свойством, используемым вместо недокументированного (и в сегодняшней версии с именемZf) один, ответ Джонни идеален.

Ваш ответ на вопрос