场景

我正在尝试使用Google Maps v3在n个点(纬度,经度)之间绘制路线。 为此,我使用DirectionsService为我提供路线,然后将其推入MVCArray ,然后使用Polyline绘制该路径。

编码

这是一个jsfiddle,在这里演示了那部分代码

HTML:

<div id='map'></div>

CSS:

#map{
    width:400px;
    height:400px;
}

JavaScript:

$(function () {
    //The list of points to be connected
    var markers = [
        {
            "title": 'Duero',
            "lat": '40.480243',
            "lng": '-3.866172',
            "description": '1'
        },
        {
            "title": 'Reyes Catolicos',
            "lat": '40.477997',
            "lng": '-3.870865',
            "description": '2'
        },
        {
            "title": 'Guadarrama',
            "lat": '40.478998',
            "lng": '-3.878755',
            "description": '3'
        }
    ];

    var map;

    var mapOptions = {
        center: new google.maps.LatLng(markers[0].lat, markers[0].lng),
        zoom: 15  ,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var path = new google.maps.MVCArray();
    var service = new google.maps.DirectionsService();

    var infoWindow = new google.maps.InfoWindow();
    var map = new google.maps.Map(document.getElementById("map"), mapOptions);
    var poly = new google.maps.Polyline({
        map: map,
        strokeColor: '#F3443C'
    });
    var lat_lng = new Array();

    path.push(new google.maps.LatLng(markers[0].lat, markers[0].lng));
    for (var i = 0; i < markers.length; i++) {
        if ((i + 1) < markers.length) {
            var src = new google.maps.LatLng(markers[i].lat, markers[i].lng);
            var des = new google.maps.LatLng(markers[i+1].lat, markers[i+1].lng);

            poly.setPath(path);
            service.route({
                origin: src,
                destination: des,
                travelMode: google.maps.DirectionsTravelMode.DRIVING
            }, function (result, status) {
                if (status == google.maps.DirectionsStatus.OK) {
                    for (var i = 0, len = result.routes[0].overview_path.length; i < len; i++) {
                        path.push(result.routes[0].overview_path[i]);
                    }
                }
            });
        }
    }
});

预期行为

我应该绘制一组直线,将变量markers指定的点(lat,lan)与指定的宽度和颜色连接起来。 更具体地说, Point 1 连接Point 2Point 2又连接Point 3

随着代码的摆弄,我想看看: 在此处输入图片说明

实际行为

我得到了前一张图像,但并非总是如此。 如果您刷新,几次您最终会得到这个,我相信这是由于在乌鸦飞翔时增加一条额外的线来连接点的结果,但是,这是一种不一致的行为,我正在努力寻找它的来源,我简化了示例,您拥有一个尽可能小的顶点数组,并且据我所见,绘制的路径应该相同,因为数据相同。 诚然,我从来没有深入研究过Google Maps api,因此源代码主要是从在线示例中复制和粘贴的结果,尤其是这一示例也遇到了同样的问题。

这意味着我可能正在使用过时的Google地图版本,对其进行了不正确的初始化或任何其他基本问题或有缺陷的设置。 或者从另一方面讲,这可能是客户端的问题,例如Mac Chrome最新版本,因为显然这不是我手机上的Android版Chrome浏览器中发生的(Nexus 5,最新库存)

在此处输入图片说明

===============>>#1 票数:5

不要将目标,源和航点位置添加到折线中,只需从路线服务中指向即可:

工作小提琴

 var map = null; var infowindow = new google.maps.InfoWindow(); var bounds = new google.maps.LatLngBounds(); //The list of points to be connected var markers = [{ "title": 'Duero', "lat": '40.480243', "lng": '-3.866172', "description": '1' }, { "title": 'Reyes Catolicos', "lat": '40.47806', "lng": '-3.870937', "description": '2' }, { "title": 'Guadarrama', "lat": '40.478998', "lng": '-3.878755', "description": '3' }]; // var map; function initialize() { var mapOptions = { center: new google.maps.LatLng( parseFloat(markers[0].lat), parseFloat(markers[0].lng)), zoom: 15, mapTypeId: google.maps.MapTypeId.ROADMAP }; var service = new google.maps.DirectionsService(); var infoWindow = new google.maps.InfoWindow(); map = new google.maps.Map(document.getElementById("map"), mapOptions); var lat_lng = new Array(); var marker = new google.maps.Marker({ position: map.getCenter(), map: map, draggable: true }); bounds.extend(marker.getPosition()); google.maps.event.addListener(marker, "click", function(evt) { infowindow.setContent("coord:" + marker.getPosition().toUrlValue(6)); infowindow.open(map, marker); }); for (var i = 0; i < markers.length; i++) { if ((i + 1) < markers.length) { var src = new google.maps.LatLng(parseFloat(markers[i].lat), parseFloat(markers[i].lng)); createMarker(src); var des = new google.maps.LatLng(parseFloat(markers[i + 1].lat), parseFloat(markers[i + 1].lng)); createMarker(des); // poly.setPath(path); service.route({ origin: src, destination: des, travelMode: google.maps.DirectionsTravelMode.DRIVING }, function(result, status) { if (status == google.maps.DirectionsStatus.OK) { var path = new google.maps.MVCArray(); var poly = new google.maps.Polyline({ map: map, strokeColor: '#F3443C' }); for (var i = 0, len = result.routes[0].overview_path.length; i < len; i++) { path.push(result.routes[0].overview_path[i]); } poly.setPath(path); map.fitBounds(bounds); } }); } } } function createMarker(latLng) { var marker = new google.maps.Marker({ position: latLng, map: map, draggable: true }); bounds.extend(marker.getPosition()); google.maps.event.addListener(marker, "click", function(evt) { infowindow.setContent("coord:" + this.getPosition().toUrlValue(6)); infowindow.open(map, this); }); } google.maps.event.addDomListener(window, 'load', initialize); 
 html, body, #map { width: 100%; height: 100%; } 
 <script src="http://maps.googleapis.com/maps/api/js"></script> <div id='map'></div> 

  ask by Juan Cortés translate from so

未解决问题?本站智能推荐:

关注微信公众号