【问题标题】:Changing color for the Multiple Polyline stroke on google map v3 in javascript在 javascript 中更改谷歌地图 v3 上多段线笔划的颜色
【发布时间】:2016-02-14 20:45:24
【问题描述】:

我使用来自http://www.aspsnippets.com/Articles/Google-Maps-V3-Draw-route-line-between-two-geographic-locations-Coordinates-Latitude-and-Longitude-points.aspx 的相同代码在这里我可以有 n 个点 我正在尝试更改未反映的笔划颜色

<!DOCTYPE html >
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
    <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
    <script type="text/javascript">
        var markers = [
            {
                "title": 'Alibaug',
                "lat": '18.641400',
                "lng": '72.872200',
                "description": 'xxxx'
            }
        ,
            {
                "title": 'Mumbai',
                "lat": '18.964700',
                "lng": '72.825800',
                "description": 'yyyy'
            }
        ,
            {
                "title": 'Pune',
                "lat": '18.523600',
                "lng": '73.847800',
                "description": 'zzz'
            }
];
        window.onload = function () {
            var mapOptions = {
                center: new google.maps.LatLng(markers[0].lat, markers[0].lng),
                zoom: 10,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            var map = new google.maps.Map(document.getElementById("dvMap"), mapOptions);
            var infoWindow = new google.maps.InfoWindow();
            var lat_lng = new Array();
            var latlngbounds = new google.maps.LatLngBounds();
            for (i = 0; i < markers.length; i++) {
                var data = markers[i]
                var myLatlng = new google.maps.LatLng(data.lat, data.lng);
                lat_lng.push(myLatlng);
                var marker = new google.maps.Marker({
                    position: myLatlng,
                    map: map,
                    title: data.title
                });
                latlngbounds.extend(marker.position);
                (function (marker, data) {
                    google.maps.event.addListener(marker, "click", function (e) {
                        infoWindow.setContent(data.description);
                        infoWindow.open(map, marker);
                    });
                })(marker, data);
            }
            map.setCenter(latlngbounds.getCenter());
            map.fitBounds(latlngbounds);

            //***********ROUTING****************//

            //Intialize the Path Array
            var path = new google.maps.MVCArray();

            //Intialize the Direction Service
            var service = new google.maps.DirectionsService();

            //Set the Path Stroke Color
            var poly = new google.maps.Polyline({ map: map, strokeColor: 'red' });



            //Loop and Draw Path Route between the Points on MAP
            for (var i = 0; i < lat_lng.length; i++) {
                if ((i + 1) < lat_lng.length) {
                    var src = lat_lng[i];
                    var des = lat_lng[i + 1];
                    path.push(src);
                    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]);
                            }
                        }
                    });
                }
            }
        }
    </script>
    <div id="dvMap" style="width: 500px; height: 500px">
    </div>
</body>
</html>

并将这一行替换为

 var poly = new google.maps.Polyline({ map: map, strokeColor: 'red' });

and i tried to add color using the below code as

var colorVariable = ["white","green","blue","yellow","rose"];



     for(var a =0;a<=5;a++){
            var polyOptions = {
                strokeColor: colorVariable[a],
                strokeOpacity: 1.0,
                strokeWeight: 2
            }
            poly = new google.maps.Polyline({ map: map, strokeColor: polyOptions });
            poly.setMap(map);
        }

但是我没有得到不同的颜色笔画请说如何整合它有什么问题

【问题讨论】:

  • 你想如何改变线条的颜色?
  • 使用第二部分代码
  • 我知道,但您想通过单击按钮更改所有路线吗?
  • k,不需要为标记数组中的点触发任何事件,它应该只显示不同的颜色
  • 请告诉我我在哪里工作

标签: javascript google-maps colors google-polyline


【解决方案1】:

您只能使用 setOption 更改笔触颜色,这样:

  poly.setOptions({strokeColor: 'blue'}); 

您的 polyOption 不是 strokeColor 属性的合法值。
您可以使用 obj.setOptions({attribute: value}) 模式为您的代码添加 strokeColor

【讨论】:

    【解决方案2】:

    我使用了一个技巧,通过查看 if (result.request.origin == lat_lng[i]) 来找出正在处理的请求。 (可能存在更优雅的解决方案)

    我添加了第 4 点(只是为了再看 1 种颜色,看看它是否有效)。

    这是你想要的吗?

    <!DOCTYPE html >
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Changing color for the Multiple Polyline stroke on Google maps</title>
    </head>
    <body>
        <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
        <script type="text/javascript">
            var polylines = [];  // let's make 1 polyline per color
    
            var markers = [
                {
                    "title": 'Alibaug',
                    "lat": 18.641400,
                    "lng": 72.872200,
                    "description": 'xxxx'
                },
                {
                    "title": 'Mumbai',
                    "lat": 18.964700,
                    "lng": 72.825800,
                    "description": 'yyyy'
                },
                {
                    "title": 'Pune',
                    "lat": 18.523600,
                    "lng": 73.847800,
                    "description": 'zzz'
                }, 
                {
                    "title": 'Kolhapur',
                    "lat": 16.696530010128207,
                    "lng": 74.23864138126372,
                    "description": 'Extra point'
                }
            ];
            window.onload = function () {
                var mapOptions = {
                    center: new google.maps.LatLng(markers[0].lat, markers[0].lng),
                    zoom: 10,
                    mapTypeId: google.maps.MapTypeId.ROADMAP
                };
                var map = new google.maps.Map(document.getElementById("dvMap"), mapOptions);
                var infoWindow = new google.maps.InfoWindow();
                var lat_lng = [];  // new Array();
                var latlngbounds = new google.maps.LatLngBounds();
    
                for (i = 0; i < markers.length; i++) {
                    var data = markers[i];
                    var myLatlng = new google.maps.LatLng(data.lat, data.lng);
                    lat_lng.push(myLatlng);
                    var marker = new google.maps.Marker({
                        position: myLatlng,
                        map: map,
                        title: data.title
                    });
                    latlngbounds.extend(marker.position);
    
                    (function (marker, data) {
                        google.maps.event.addListener(marker, "click", function (e) {
                            infoWindow.setContent(data.description);
                            infoWindow.open(map, marker);
                        });
                    })(marker, data);
                }
                map.setCenter(latlngbounds.getCenter());
                map.fitBounds(latlngbounds);
                //***********ROUTING****************//
                // Make the polyline
                //Loop and Draw Path Route between the Points on MAP
                for (var i = 0; i< lat_lng.length; i++) {
                  generatePath(i);  // I put this all in a function
                }
    
                // we want to know which request is being processed
                function indexOfRequest(result) {
                  for (var i = 0; i <= lat_lng.length; i++) {
                    if (result.request.origin == lat_lng[i]) {
                      return i;
                    }
                  }
                }
                function generatePath(i) {
                    // colors
                    var colorVariable = ["white", "green", "blue", "yellow", "rose"];
                    //Intialize the Direction Service
                    var service = new google.maps.DirectionsService();
                    //Intialize the Path Array
                    var path = new google.maps.MVCArray();
                    var color = colorVariable[i % colorVariable.length];  // the % makes sure the array cycles, so after rose, it's white again
                    var poly = new google.maps.Polyline({ map: map, strokeColor: color });
                    polylines.push(poly);
                    var src = lat_lng[i];
                    var des = lat_lng[i + 1];
                    path.push(src);
                    poly.setPath(path);
                    // route service
                    service.route({
                        origin: src,
                        destination: des,
                        travelMode: google.maps.DirectionsTravelMode.DRIVING
                    }, function (result, status) {
                        if (status == google.maps.DirectionsStatus.OK) {
                            var routeIndex = indexOfRequest(result);
                            polylines[routeIndex].setPath(result.routes[0].overview_path);
                        }
                    });
    
                }
            }
        </script>
        <div id="dvMap" style="width: 500px; height: 500px">
        </div>
    </body>
    </html>
    

    【讨论】:

    • 非常感谢,我正在尝试修复运行代码时在控制台中生成的错误,请您看看错误是 InvalidValueError: in property destination: not a string;而不是 LatLng 或 LatLngLiteral:不是对象;而不是 Object ...essage}return new vb(a+c)};_.xb=function(a){if(!(a instanceof vb))throw a;window... js?sensor=false (第 34 行) TypeError: a is null ...1,R:!1};f[106]={type:"b",label:1,R:!1}}f=_.zg.j(aN ,$W);_.Nk(window.document,d,_...
    【解决方案3】:

    单条折线只能有一种颜色,需要为每种颜色制作单独的折线:

    function getDirections(src, des, color, map) {
        //Intialize the Direction Service
        var service = new google.maps.DirectionsService();
        service.route({
            origin: src,
            destination: des,
            travelMode: google.maps.DirectionsTravelMode.DRIVING
        }, function (result, status) {
            if (status == google.maps.DirectionsStatus.OK) {
                //Intialize the Path Array
                var path = [];
                for (var i = 0; i < result.routes[0].overview_path.length; i++) {
                    path.push(result.routes[0].overview_path[i]);
                }
                //Set the Path Stroke Color
                var polyOptions = {
                    strokeColor: color,
                    strokeOpacity: 1.0,
                    strokeWeight: 2,
                    path: path,
                    map: map
                }
                poly = new google.maps.Polyline(polyOptions);
                poly.setMap(map);
    
            }
        });
    }
    

    proof of concept fiddle

    代码 sn-p:

    var markers = [{
      "title": 'Alibaug',
      "lat": '18.641400',
      "lng": '72.872200',
      "description": 'xxxx'
    }, {
      "title": 'Mumbai',
      "lat": '18.964700',
      "lng": '72.825800',
      "description": 'yyyy'
    }, {
      "title": 'Pune',
      "lat": '18.523600',
      "lng": '73.847800',
      "description": 'zzz'
    }];
    // white is hard to see on the map tiles, removed.
    var colorVariable = ["green", "blue", "yellow", "rose"];
    window.onload = function() {
      var mapOptions = {
        center: new google.maps.LatLng(markers[0].lat, markers[0].lng),
        zoom: 10,
        mapTypeId: google.maps.MapTypeId.ROADMAP
      };
      var map = new google.maps.Map(document.getElementById("dvMap"), mapOptions);
      var infoWindow = new google.maps.InfoWindow();
      var lat_lng = new Array();
      var latlngbounds = new google.maps.LatLngBounds();
      for (i = 0; i < markers.length; i++) {
        var data = markers[i]
        var myLatlng = new google.maps.LatLng(data.lat, data.lng);
        lat_lng.push(myLatlng);
        var marker = new google.maps.Marker({
          position: myLatlng,
          map: map,
          title: data.title
        });
        latlngbounds.extend(marker.position);
        (function(marker, data) {
          google.maps.event.addListener(marker, "click", function(e) {
            infoWindow.setContent(data.description);
            infoWindow.open(map, marker);
          });
        })(marker, data);
      }
      map.setCenter(latlngbounds.getCenter());
      map.fitBounds(latlngbounds);
    
      //***********ROUTING****************//
    
    
    
      //Set the Path Stroke Color
      var poly = new google.maps.Polyline({
        map: map,
        strokeColor: 'red'
      });
    
      //Loop and Draw Path Route between the Points on MAP
      for (var i = 0; i < lat_lng.length; i++) {
        if ((i + 1) < lat_lng.length) {
          var src = lat_lng[i];
          var des = lat_lng[i + 1];
          getDirections(src, des, colorVariable[i], map);
        }
      }
    }
    
    function getDirections(src, des, color, map) {
      //Intialize the Direction Service
      var service = new google.maps.DirectionsService();
      service.route({
        origin: src,
        destination: des,
        travelMode: google.maps.DirectionsTravelMode.DRIVING
      }, function(result, status) {
        if (status == google.maps.DirectionsStatus.OK) {
          //Intialize the Path Array
          var path = [];
          for (var i = 0; i < result.routes[0].overview_path.length; i++) {
            path.push(result.routes[0].overview_path[i]);
          }
          //Set the Path Stroke Color
          var polyOptions = {
            strokeColor: color,
            strokeOpacity: 1.0,
            strokeWeight: 2,
            path: path,
            map: map
          }
          poly = new google.maps.Polyline(polyOptions);
          poly.setMap(map);
    
        }
      });
    }
    html,
    body,
    #dvMap {
      height: 100%;
      width: 100%;
      margin: 0px;
      padding: 0px
    }
    <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script>
    <div id="dvMap"></div>

    【讨论】:

    • 谢谢你我得到了循环即使是直线请运行代码编辑的情节如果它是直线我需要不需要循环请道歉我工作但我是无法弄清楚任何帮助都会救我
    • 我将 travelMode 固定为 TRANSIT,这解决了我的问题,谢谢
    • 您在编辑中的点得到的循环是因为这些点位于单向道路上,并且该道路上行驶方向的顺序错误。如果我reverse them, the loops go away
    • 你能指导一下如何旋转生成的图
    猜你喜欢
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多