Google Maps V3, полилинии javascript привязываются к дороге с большим количеством точек на карте

Я застрял на этом некоторое время, я работал над системой, которая отслеживает драйверы через приложение на их мобильном телефоне. Теперь я работаю, чтобы показать это на веб-сайте с картами Google. Каждые 100 метров местоположение GPS регистрируется в базе данных.

Вы можете представить себе, что у меня могут быть сотни или даже тысячи точек на карте, а приведенный ниже код рисует ломаные линии между точками относительно гладко, даже в больших количествах.

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

Я пытался направить сервис между точками на карте, но кажется, что он имеет ограничение 8 или 10.

Мне было трудно найти других людей с такой же проблемой.

Любая помощь или предложения были бы хороши.

Ниже приведена функция, которую я использую для рисования полилиний.

сделал массив полилиний глобальным, поэтому он не объявлен в этой функции

function drawLines(userID, createdOn){
    var points = new Array;
    jQuery.ajax({
     type: "POST",
     url: "/wp-content/themes/default/ajax/get_coordinates.php",
     data: {userID: userID, createdOn: createdOn}
     }).done(function(msg) 
     {
        clearLines();
        var msg = JSON.parse(String(msg));

        for(var i = 0; i < msg.length; i++){
            points[i] = new google.maps.LatLng(msg[i].lat, msg[i].lng);
        }
        polyLines[0] = new google.maps.Polyline({
            path: points,
            strokeColor: "01357c",
            strokeOpacity: 1.0,
            strokeWeight: 3,
            geodesic: true,
            map: map 
        }); 
     });    
}
function clearLines(){
    for(var i = 0; i < polyLines.length; i++){
        polyLines[i].setMap(null);  
    }
    polyLines = [];
}

person Frankm88    schedule 08.07.2014    source источник


Ответы (2)


Сначала я не совсем понял, что вы пытаетесь сделать в своем ответе, после некоторых дополнительных исследований, если нашел этот учебник.

http://lemonharpy.wordpress.com/2011/12/15/working-around-8-waypoint-limit-in-google-maps-directions-api/

С некоторыми изменениями я заставил его работать для моего проекта. Единственным недостатком является то, что я боюсь, что я все еще ограничен 2500 запросами в день. С ограничением путевых точек на 10, что составляет примерно 25 000 точек, я должен иметь возможность подключаться в день.

function createBatches(userID, createdOn){
        jQuery.ajax({
         type: "POST",
         url: "/wp-content/themes/default/ajax/get_coordinates.php",
         data: {userID: userID, createdOn: createdOn}
         }).done(function(msg) 
         {
            var msg = JSON.parse(String(msg));
            var batches = new Array;
            var itemsPerBatch = 10; 
            var itemsCounter = 0;
            var wayptsExist = msg.length > 0;

            while(wayptsExist){
                var subBatch = [];
                var subitemsCounter = 0;

                for (var i = itemsCounter; i < msg.length; i++) {
                    subitemsCounter++;
                    subBatch.push({
                        location: new google.maps.LatLng(msg[i].lat,msg[i].lng),
                        stopover: true
                    });
                    if (subitemsCounter == itemsPerBatch)
                        break;
                }
                itemsCounter += subitemsCounter;
                batches.push(subBatch);
                wayptsExist = itemsCounter < msg.length;
                itemsCounter--;
            }
            calcRoute(batches); 
        });
    }
    function calcRoute(batches){
        var combinedResults;
        var directionsResultsReturned = 0;
        for(var i = 0; i < batches.length; i++) {
            var lastIndex = batches[i].length - 1;
            var start = batches[i][0].location;
            var end = batches[i][lastIndex].location;

            var waypts = [];
            waypts = batches[i];
            waypts.splice(0, 1);
            waypts.splice(waypts.length - 1, 1);

            var request = {
                origin: start,
                destination: end,
                waypoints: waypts,
                travelMode: google.maps.TravelMode.DRIVING
            };
            directionsService.route(request, function (result, status) {
                if (status == google.maps.DirectionsStatus.OK) {
                    if (directionsResultsReturned == 0) {
                        combinedResults = result;
                        directionsResultsReturned++;
                    }
                    else {
                        combinedResults.routes[0].legs = combinedResults.routes[0].legs.concat(result.routes[0].legs);
                        directionsResultsReturned++;
                    }
                    if (directionsResultsReturned == batches.length){ 
                        directionsDisplay.setDirections(combinedResults);
                    }
                }
            });
        }
    }
person Frankm88    schedule 09.07.2014

У меня есть решение с ним. :3 Вы можете разрезать его на несколько путей местоположения и использовать "waypoint" в направлении googlemap, 1 ограничение направления 10 точек :) ...

решение: Конечная точка направления1 является начальной точкой направления2

пример кода

Array_point.push({
    waypoint : Array_Waypoint
});
Deriction_Array.push({
        travelmode : travelmode,
        polyline : Array_point
});     
person HoangHieu    schedule 08.07.2014