删除谷歌地图的路线

31

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

我找不到在谷歌地图上删除路线的方法。对于标记,我存储它们并执行setMap(null),但没有看到相关的方法...

8个回答

63

你也可以使用:

directionsDisplay.setDirections({routes: []});
以这种方式,您可以在所有路由中使用一个地图和一个渲染器。

4
这对我来说是更好的解决方案,因为如果您再次尝试获取方向,第一个解决方案会抛出JS错误。然而,我使用了directionsDisplay.setDirections({routes: []}); - DemitryT
1
我同意,使用字面量比使用new关键字更好,我已经更新了我的答案。 - thomaux
1
这样做不能让我继续使用同一张地图,而只是在同一张地图上将路线叠加在一起。 - ajbraus
1
@ajbraus 可能自从我回答这个问题以来,API已经发生了变化,我有一段时间没有检查它了。在对某些事情进行投票之前,请考虑答案的日期。 - thomaux
1
这对我来说是更好的解决方案。另一个解决方案directionsDisplay.setMap(null)会从google.maps.DirectionsService()实例中删除您的地图实例,因此如果您在此之后尝试绘制路线,则会显示JS错误。这种方法directionsDisplay.setDirections({routes: []});将您的地图实例保持连接到directionsService实例,因此您可以再次使用相同的服务绘制路线,而无需重新将地图附加到directionsService实例。 - Sami El Maameri
显示剩余3条评论

34

3
如果你这样做,当你尝试使用另一条路线进行覆盖时,它会重新出现,因此你会在地图上看到两条路径。 - ajbraus
这不是真的!我刚在一个小的POC中测试过了。当你运行directionsDisplay.setDirections(directions)并使用directionsDisplay.setMap(map)将渲染器重新添加到地图上时,它会正确地工作。它只显示一条路径(即directions变量的内容)。你的代码肯定还有其他问题。 - Tomik
2
这个方法可以从地图中移除directionsDisplay对象,但是如果你要用另一条路线替换当前路线,它只会将被替换的路线添加到地图上。 - ajbraus
2
就像ajbraus所说的那样,显示了2条或更多路由。未清理。 - Alexei Rayu
请看我的答案,已经解决了这个问题。 - Friendly Code

9

其他答案对我没用。我从这个问题中找到了一个解决方案。

click处理程序之外,只定义directionsDisplay 1次。


8

这是修复方案

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

最有用的答案! - showtime

7

因为每次调用都会创建新的 DirectionRenderer 实例,所以每个新实例都不知道之前的实例。

移动

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

将其添加到全局(在所有其他全局变量已初始化的顶部)。

这样做可以确保您每次都使用DirectionRenderer的单个实例。


1
我遇到了类似的问题,我尝试使用directionsDisplay.setMap(null);,但它没有起作用。
问题在于我创建的directionsDisplay对象被局部声明了。
我将其更改为全局并且每次调用函数时,它都会使用相同的全局directionsDisplay对象并对其进行更改。这肯定会删除在同一对象上显示的先前路线。

1

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

    var map;
    var directionsDisplay;

    function initMap() { 

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

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

     }

     function yourFunction() {

        // your code

        directionsDisplay.addListener(...);

     }

0

设置 strokeWeight: 0,那么折线将会隐藏


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接