Google Maps API v3会删除所有折线

Rom*_*mes 20 google-maps polyline google-maps-api-3 google-maps-markers

小背景.我有一个导航设置,当你点击某个导航项时,它会markers在地图上创建.如果单击其他导航项,则会删除上一个导航项markers并设置新项.

那么现在我正在努力polylines并试图在这里创建相同的概念polylines,但是我遇到了困难.这是我有的:

    // Global variable for array of lines
    var points= [];
Run Code Online (Sandbox Code Playgroud)

设置我的观点.

    line1 = new google.maps.LatLng(line1Start, line1Finish);
    line2 = new google.maps.LatLng(line2Start, line2Finish);
    line3 = new google.maps.LatLng(line3Start,line3Finish);

    points.push(line1, line2, line3);
Run Code Online (Sandbox Code Playgroud)

设置我的折线.

    var polyline = new google.maps.Polyline({
       path:points,
       strokeColor:"#FF0000",
       strokeOpacity:1.0,
       strokeWeight:2
    });
Run Code Online (Sandbox Code Playgroud)

用线初始化地图.

    polyline.setMap(map);
Run Code Online (Sandbox Code Playgroud)

一切顺利.线条被创建并显示在我的标记之间.现在让我们删除它们(或不...)

    function removeLines() {
      if (points) {
           points.length = 0;
      }
      points = [];
    }
Run Code Online (Sandbox Code Playgroud)

removeLines()在函数的开头被调用以清除它们,然后设置新的.这确实清除了我在点数组中的点,但是在地图本身上polylines仍然显示并且不会像我的标记那样消失.

是什么赋予了?!

fri*_*ism 38

你必须这样做polyline.setMap(null),这将从地图中删除该行.文档.

  • 哇..我之前做过这个,但是我在点数组上做了一个循环并做了点[i] .setMap(null); 显然这需要在折线而不是点数组...... DUH.+1感谢帮助我意识到:) (2认同)

Ara*_*sok 17

折线只是LatLng对象的数组,而不是单独的折线.我想你可能需要一个单独的折线数组,你可以循环将它们全部删除.创建全局数组行.

 var line = [];
 polyline = new google.maps.Polyline({
        path: points,
        strokeColor: "#FF0000",
        strokeOpacity: 1.0,
        strokeWeight: 2
    });
 line.push(polyline);
Run Code Online (Sandbox Code Playgroud)

现在,您将所有折线对象推送到数组线.您可以通过循环将其隐藏或从地图中删除它:

for (i=0; i<line.length; i++) 
{                           
  line[i].setMap(null); //or line[i].setVisible(false);
}
Run Code Online (Sandbox Code Playgroud)