Получить события от полилинии или маркера от DirectionsRenderer - PullRequest
3 голосов
/ 26 января 2011

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

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

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

1 Ответ

3 голосов
/ 27 января 2011

Я также ищу ответ на ваш вопрос. А пока попробую сам разобраться и выложу, если найду что-нибудь полезное.

Обновление: после нескольких минут в JavaScript я обнаружил, что объект DirectionsResult содержит массив путевых точек, включая те, которые создаются, когда путь перетаскивается курсором. Если вы завершили учебное пособие Draggable Directions , вы можете получить доступ к этому объекту с помощью directionsDisplay.directions внутри метода обратного вызова для события directions_changed . Этот объект содержит член с именем sf , который содержит массив waypoints , если они есть, если нет, то он равен нулю. Каждый элемент этого массива содержит элемент с именем location , в котором хранятся координаты под wa (широта) и ya (долгота).

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

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  
};  

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

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

С уважением, Johnny

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...