Маршруты с пользовательским кодом API не будут использовать автомагистрали / шоссе - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь кодировать на заказ, но маршруты, однако, когда я добавляю широту и долготу Геометрии для автомагистралей, по каким-то причинам они просто не будут работать в одиночку, что я делаю неправильно?

Я использую код

<meta name="viewport" content="scale=1, user-scalable=no"> 

<meta charset="utf-800"> 

<title>Google Maps JavaScript API v3 Example: Directions Waypoints</title> 

#map{ 

width: 100%; 

height: 500px; 

}

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> 

<script> 

  jQuery(function() { 

var stops = [ 

                    {"Geometry":{"Latitude":52.966717,"Longitude":-1.235977}},
                    {"Geometry":{"Latitude":52.992800,"Longitude":-1.232724}},

];

var map = new window.google.maps.Map(document.getElementById("map")); 



// new up complex objects before passing them around 

var directionsDisplay = new window.google.maps.DirectionsRenderer({suppressMarkers: true}); 

var directionsService = new window.google.maps.DirectionsService(); 



Tour_startUp(stops); 



window.tour.loadMap(map, directionsDisplay); 

window.tour.fitBounds(map); 



if (stops.length > 1) 

    window.tour.calcRoute(directionsService, directionsDisplay); 

});

функция Tour_startUp (останавливается) {

if (!window.tour) window.tour = { 

    updateStops: function (newStops) { 

        stops = newStops; 

    }, 

    // map: google map object 

    // directionsDisplay: google directionsDisplay object (comes in empty) 

    loadMap: function (map, directionsDisplay) { 

        var myOptions = { 

            zoom: 9, 

            center: new window.google.maps.LatLng(51.507937, -0.076188), // default to London 

            mapTypeId: window.google.maps.MapTypeId.ROADMAP

        }; 

        map.setOptions(myOptions); 

        directionsDisplay.setMap(map); 

    }, 

    fitBounds: function (map) { 

        var bounds = new window.google.maps.LatLngBounds(); 



        // extend bounds for each record 

        jQuery.each(stops, function (key, val) { 

            var myLatlng = new window.google.maps.LatLng(val.Geometry.Latitude, val.Geometry.Longitude); 

            bounds.extend(myLatlng); 

        }); 

        map.fitBounds(bounds); 

    }, 

    calcRoute: function (directionsService, directionsDisplay) { 

        var batches = []; 

        var itemsPerBatch = 10; // google API max = 10 - 1 start, 1 stop, and 8 waypoints 

        var itemsCounter = 0; 

        var wayptsExist = stops.length > 0; 



        while (wayptsExist) { 

            var subBatch = []; 

            var subitemsCounter = 0; 



            for (var j = itemsCounter; j < stops.length; j++) { 

                subitemsCounter++; 

                subBatch.push({ 

                    location: new window.google.maps.LatLng(stops[j].Geometry.Latitude, stops[j].Geometry.Longitude), 

                    stopover: true 

                }); 

                if (subitemsCounter == itemsPerBatch) 

                    break; 

            } 



            itemsCounter += subitemsCounter; 

            batches.push(subBatch); 

            wayptsExist = itemsCounter < stops.length; 

            // If it runs again there are still points. Minus 1 before continuing to 

            // start up with end of previous tour leg 

            itemsCounter--; 

        } 



        // now we should have a 2 dimensional array with a list of a list of waypoints 

        var combinedResults; 

        var unsortedResults = [{}]; // to hold the counter and the results themselves as they come back, to later sort 

        var directionsResultsReturned = 0; 



        for (var k = 0; k < batches.length; k++) { 

            var lastIndex = batches[k].length - 1; 

            var start = batches[k][0].location; 

            var end = batches[k][lastIndex].location; 



            // trim first and last entry from array 

            var waypts = []; 

            waypts = batches[k]; 

            waypts.splice(0, 1); 

            waypts.splice(waypts.length - 1, 1); 



            var request = { 

                origin: start, 

                destination: end, 

                waypoints: waypts, 

                travelMode: window.google.maps.TravelMode.WALKING 

            }; 

            (function (kk) { 

                directionsService.route(request, function (result, status) { 

                    if (status == window.google.maps.DirectionsStatus.OK) { 



                        var unsortedResult = { order: kk, result: result }; 

                        unsortedResults.push(unsortedResult); 



                        directionsResultsReturned++; 



                        if (directionsResultsReturned == batches.length) // we've received all the results. put to map 

                        { 

                            // sort the returned values into their correct order 

                            unsortedResults.sort(function (a, b) { return parseFloat(a.order) - parseFloat(b.order); }); 

                            var count = 0; 

                            for (var key in unsortedResults) { 

                                if (unsortedResults[key].result != null) { 

                                    if (unsortedResults.hasOwnProperty(key)) { 

                                        if (count == 0) // first results. new up the combinedResults object 

                                            combinedResults = unsortedResults[key].result; 

                                        else { 

                                            // only building up legs, overview_path, and bounds in my consolidated object. This is not a complete 

                                            // directionResults object, but enough to draw a path on the map, which is all I need 

                                            combinedResults.routes[0].legs = combinedResults.routes[0].legs.concat(unsortedResults[key].result.routes[0].legs); 

                                            combinedResults.routes[0].overview_path = combinedResults.routes[0].overview_path.concat(unsortedResults[key].result.routes[0].overview_path); 



                                            combinedResults.routes[0].bounds = combinedResults.routes[0].bounds.extend(unsortedResults[key].result.routes[0].bounds.getNorthEast()); 

                                            combinedResults.routes[0].bounds = combinedResults.routes[0].bounds.extend(unsortedResults[key].result.routes[0].bounds.getSouthWest()); 

                                        } 

                                        count++; 

                                    } 

                                } 

                            } 

                            directionsDisplay.setDirections(combinedResults); 

                            var legs = combinedResults.routes[0].legs; 

                            // alert(legs.length); 

                            for (var i=0; i < legs.length;i++){ 

              var markerletter = " ".charCodeAt(0); 

              markerletter += i; 

                              markerletter = String.fromCharCode(markerletter); 

                              createMarker(directionsDisplay.getMap(),legs[i].start_location,"marker"+i,"some text for marker "+i+"<br>"+legs[i].start_address,markerletter); 

                            } 

                            var i=legs.length; 

                            var markerletter = " ".charCodeAt(0); 

                markerletter += i; 

                            markerletter = String.fromCharCode(markerletter); 

                            createMarker(directionsDisplay.getMap(),legs[legs.length-1].end_location,"marker"+i,"some text for the "+i+"marker<br>"+legs[legs.length-1].end_address,markerletter); 

                        } 

                    } 

                }); 

            })(k); 

        } 

    } 

}; 

}

var infowindow = new google.maps.InfoWindow (

{

size: new google.maps.Size(150,50) 
* +1039 *});

var icons = new Array ();

icons ["red"] = new google.maps.MarkerImage ("mapIcons / marker_red.png",

  // This marker is 20 pixels wide by 34 pixels tall. 

  new google.maps.Size(20, 34), 

  // The origin for this image is 0,0. 

  new google.maps.Point(0,0), 

  // The anchor for this image is at 9,34. 

  new google.maps.Point(9, 34)); 

функция getMarkerImage (iconStr) {

if ((typeof (iconStr) == "undefined") || (iconStr == null)) {

  iconStr = "red";  

}

if (! Icons [iconStr]) {

  icons[iconStr] = new google.maps.MarkerImage("http://www.google.com/mapfiles/marker"+ iconStr +".png", 

  // This marker is 20 pixels wide by 34 pixels tall. 

  new google.maps.Size(20, 34), 

  // The origin for this image is 0,0. 

  new google.maps.Point(0,0), 

  // The anchor for this image is at 6,20. 

  new google.maps.Point(9, 34)); 

}

возврат значков [iconStr];

}

// Размеры маркера выражаются как Размер X, Y

// где источник изображения (0,0) расположен

// в левом верхнем углу изображения.

// Происхождение, позиции привязки и координаты маркера

// увеличение в направлении X вправо и в

// направление Y вниз.

var iconImage = new google.maps.MarkerImage ('mapIcons / marker_red.png',

  // This marker is 20 pixels wide by 34 pixels tall. 

  new google.maps.Size(20, 34), 

  // The origin for this image is 0,0. 

  new google.maps.Point(0,0), 

  // The anchor for this image is at 9,34. 

  new google.maps.Point(9, 34)); 

var iconShadow = new google.maps.MarkerImage ('http://www.google.com/mapfiles/shadow50.png',

  // The shadow image is larger in the horizontal dimension 

  // while the position and offset are the same as for the main image. 

  new google.maps.Size(37, 34), 

  new google.maps.Point(0,0), 

  new google.maps.Point(9, 34)); 

  // Shapes define the clickable region of the icon. 

  // The type defines an HTML &lt;area&gt; element 'poly' which 

  // traces out a polygon as a series of X,Y points. The final 

  // coordinate closes the poly by connecting to the first 

  // coordinate. 

var iconShape = {

  coord: [9,0,6,1,4,2,2,4,0,8,0,12,1,14,2,16,5,19,7,23,8,26,9,30,9,34,11,34,11,30,12,26,13,24,14,21,16,18,18,16,20,12,20,8,18,4,16,2,15,1,13,0], 

  type: 'poly' 

};

функция createMarker (map, latlng, label, html, color) {

// alert ("createMarker (" + latlng + "," + label + "," + html + "," + color + ")");

var contentString = '<b>'+label+'</b><br>'+html; 

var marker = new google.maps.Marker({ 

    position: latlng, 

    map: map, 

    shadow: iconShadow, 

    icon: getMarkerImage(color), 

    shape: iconShape, 

    title: label, 

    zIndex: Math.round(latlng.lat()*-100000)<<5 

    }); 

    marker.myname = label; 



google.maps.event.addListener(marker, 'click', function() { 

    infowindow.setContent(contentString);  

    infowindow.open(map,marker); 

    }); 

return marker; 

}

</script> 

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