Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用谷歌地图删除路线_Javascript_Google Maps_Google Maps Api 3 - Fatal编程技术网

Javascript 使用谷歌地图删除路线

Javascript 使用谷歌地图删除路线,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我得到了一个使用谷歌地图方向服务功能的小应用程序。它工作得很好,我可以更改路由,但我有一个小问题,用户可以在跟踪路由后返回标记列表 我找不到用谷歌地图删除路线的方法。对于标记,我存储它们并执行设置映射(null),这里没有办法…如果使用DirectionsRenderer显示路线,也可以在其上调用设置映射(null)。这样可以删除显示的路线 在这里使用示例代码 就打电话 directionsDisplay.setMap(null); 您还可以使用: directionsDisplay.set

我得到了一个使用谷歌地图方向服务功能的小应用程序。它工作得很好,我可以更改路由,但我有一个小问题,用户可以在跟踪路由后返回标记列表


我找不到用谷歌地图删除路线的方法。对于标记,我存储它们并执行设置映射(null),这里没有办法…

如果使用DirectionsRenderer显示路线,也可以在其上调用设置映射(null)。这样可以删除显示的路线

在这里使用示例代码

就打电话

directionsDisplay.setMap(null);
您还可以使用:

directionsDisplay.setDirections({routes: []});

通过这种方式,您可以继续对所有路线使用一个带有一个渲染器的贴图。

其他答案对我不起作用。我从中找到了解决办法


定义
方向显示
仅1次(在
单击
-处理程序之外)

我遇到类似问题,我尝试使用
方向显示.setMap(null)但它不起作用

问题是我创建的
directionsDisplay
对象是在本地声明的

我将其更改为全局,每次调用该函数时,它都将使用相同的全局
方向display
对象并对其进行更改。这肯定会删除同一对象上显示的上一条路线。

这是修复方法

// Clear past routes
if (directionsDisplay != null) {
    directionsDisplay.setMap(null);
    directionsDisplay = null;
}

设置strokeWeight:0,则多段线将隐藏,因为每次调用时,都会创建DirectionRenderer的新实例,这就是为什么每个新实例都不知道以前的实例

移动

到全局变量(位于所有其他全局变量已初始化的顶部。)


通过这样做,每次您都将使用DirectionRenderer的单个实例。

重要的是——至少在我的情况下是这样的——虽然可以全局声明
directionsDisplay
,但必须在map对象之后创建实例,否则会出现引用错误

    var map;
    var directionsDisplay;

    function initMap() { 

        map = new google.maps.Map(...);

        directionsDisplay = new google.maps.DirectionsRenderer(...);

     }

     function yourFunction() {

        // your code

        directionsDisplay.addListener(...);

     }

这对我来说是一个更好的解决方案,因为如果您再次尝试获取方向,第一个解决方案将抛出JS错误。但是,我确实使用了
directionsDisplay.setDirections({routes:[]})我同意,使用文字是比使用新关键字更好的解决方案,我已经更新了我的答案。这不允许我继续使用相同的地图。它只是将路径堆叠在同一地图上。@ajbraus可能API已经更改,因为我回答了这个问题,我已经有一段时间没有检查它了。请考虑在回答之前的答案。Ajabu,你不提供你的代码,我只能假设你的代码有一些其他的错误。很可能是范围问题。如果您这样做,当您尝试用另一个路由覆盖时,它会返回,因此您会在地图上显示两个路由。这不是真的!我刚刚在一个小POC上测试过。运行
directionsDisplay.setDirections(directions)
并使用
directionsDisplay.setMap(map)
将渲染器添加回贴图时,它会正常工作。它只显示一条路径(方向的内容)。您的代码中一定存在其他问题。这可以从地图中删除directionsDisplay对象,但如果您要用另一条路线替换一条路线,则只会将替换的路线添加到地图中。如ajbraus所说,将显示2条或更多路线。未清洗。请参阅下面我的答案,它修复了问题最有用的答案!
    var map;
    var directionsDisplay;

    function initMap() { 

        map = new google.maps.Map(...);

        directionsDisplay = new google.maps.DirectionsRenderer(...);

     }

     function yourFunction() {

        // your code

        directionsDisplay.addListener(...);

     }