Надеюсь, это сэкономит время и разочарование для всех, кто пытается заставить это работать.

жете создать маркеры в моем веб-приложении и создать маршрут с указаниями Google с этими маркерами. Но я хочу, чтобы пользователь мог также изменить маршрут, и я нашел перетаскиваемые направления в API карт Google v3. Есть ли способ сохранить измененные направления в базе данных, чтобы вы могли снова создать точный маршрут с этой информацией?

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

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

var map = new google.maps.Map(document.getElementById('map_canvas'), {
        zoom: 8,
        center: new google.maps.LatLng(/* center of map */),
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }),
    directions = new google.maps.DirectionsService(),
    displayer = new google.maps.DirectionsRenderer({
        draggable: true
    });

displayer.setMap(map);
directions.route({
    origin: new google.maps.LatLng(/* start point */),
    destination: new google.maps.LatLng(/* end point */),
    travelMode: google.maps.DirectionsTravelMode.DRIVING
}, function (result) {
    displayer.setDirections(result);
});

По сути, это просто предполагает, что начальная и конечная точки уже выбраны, а маршрут по умолчанию уже проложен. (НОТА: DirectionsRenderer был инициализирован сdraggable: true.)

Когда пользователь меняет маршрут, приложение запускаетdirections_changed мероприятие. Мы можем отследить это так:

google.maps.event.addListener(displayer, 'directions_changed', some_method);

Что-то другоетакже происходит при смене маршрута: новыйwaypoint создано. Вот как мы получаем на всех путевых точках:

var some_method = function () {
    var waypoints = displayer.directions.route[0].legs[0].via_waypoint;
};

Переменнаяwaypoints является массивом объектов, описывающих остановки, которые делает маршрут на пути к месту назначения. (Обратите внимание, что были сделаны дополнительные предположения: вы используетеroute[0], legs[0], и т.д.)

каждыйwaypoint объект имеетlocation свойство, которое содержит широту и долготу (доступно вlocation.wa а такжеlocation.ya соответственно почему-то). Таким образом, мы можем сообщать приложению, что каждый раз, когда пользователь меняет маршрут, вращать (и сохранять) все латы и долготы текущих путевых точек. После того, как они у вас есть, вы можете решить, как вы хотите их хранить (AJAX на серверной странице, которая хранит их в базе данных,localStorage, и т.д.)

Затем!

При следующей загрузке этой страницы вы можете получить эти путевые точки из хранилища и инициализировать маршрут следующим образом:

directions.route({
    origin: new google.maps.LatLng(/* start point */),
    destination: new google.maps.LatLng(/* end point */),
    travelMode: google.maps.DirectionsTravelMode.DRIVING,
    waypoints: [
        { location: new google.maps.LatLng(/* lat/lng go here */) } // repeat this as necessary
    ]
}, function (result) {
    displayer.setDirections(result);
});

Это должно поддерживать новый маршрут, который выбрал пользователь. Последнее замечание: я оставилмного из этого ответа, каккак они сохраняют его, откуда вы знаете, какой пользователь хочет, какой маршрут и т. д. Но основа есть. Godspeed.

 axs03 авг. 2012 г., 05:32
отличное объяснение и ответ. Просто очень маленькая / незначительная коррекция - В var waypoints = displayer.directions.route [0] .legs [0] .via_waypoint; Это должны быть маршруты, а не маршруты
 bart26 окт. 2017 г., 11:07
Если вы добавите полеstopover: false для каждой путевой точки в вызове, чтобы восстановить маршрут, тогда они будут отображаться в виде небольшого перетаскиваемого круга, как и до того, как вы его сохранили.

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