Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.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 GoogleMapsJSAPI只加载第一条路径_Javascript_Google Maps Api 3 - Fatal编程技术网

Javascript GoogleMapsJSAPI只加载第一条路径

Javascript GoogleMapsJSAPI只加载第一条路径,javascript,google-maps-api-3,Javascript,Google Maps Api 3,我为我正在进行的一个项目创建了一个原型,在这个原型中,用户应该在地图中创建各种标记,能够删除它们,使用标记计算路线,然后返回管理标记 我使用geocodezip.com中的一些代码来计算路线,并为标记编写了一些代码,等等 我的问题是,一旦用户计算了路线,无论他如何编辑标记,当单击按钮计算路线时,地图仅返回带有他第一次单击按钮时存在的标记的路线。最奇怪的是,我检查了传递给生成路由的脚本的坐标,函数发送了它应该发送的标记,但是不管发送的坐标是什么,它只在第一次正确工作 Js小提琴: 代码真的很长,所

我为我正在进行的一个项目创建了一个原型,在这个原型中,用户应该在地图中创建各种标记,能够删除它们,使用标记计算路线,然后返回管理标记

我使用geocodezip.com中的一些代码来计算路线,并为标记编写了一些代码,等等

我的问题是,一旦用户计算了路线,无论他如何编辑标记,当单击按钮计算路线时,地图仅返回带有他第一次单击按钮时存在的标记的路线。最奇怪的是,我检查了传递给生成路由的脚本的坐标,函数发送了它应该发送的标记,但是不管发送的坐标是什么,它只在第一次正确工作

Js小提琴:

代码真的很长,所以一切都在掌握之中,但它就是这样做的:
1.用户单击地图,生成标记,标记进入数组
2.如果用户删除标记,它在数组中变为null,以维护索引
3. '“清除”标记数组按顺序接收所有标记,不包含空项
4.使用所有标记调用一个函数,该函数创建路由

5.为了管理标记,一个函数会像开始时一样重新加载地图,但会渲染标记数组中已经存在的所有标记,因此我相信这就是正在发生的事情

在函数
markMap()
中,您正在实例化属于google map对象的新标记

  for (var i = 0; i < markerElements.length; i++){    //Loop para gerar os marcadores
    if (markerElements[i] != null){
      marker = new google.maps.Marker({
        position: markerElements[i].position,
        map: map,
        title: markerElements[i].title
      });
    }
  }
现在我们可以在数组中循环,并将
setMap
设置为null

  // un-reference marker from map
  markerGlobal[2].setMap(null);
我看到您尝试使用
removeMarker()
函数来执行此操作,但它没有已添加到地图的标记的句柄

一些建议

如果我是你,我会考虑重构代码,使之成为一个包含所有标记、它们的行信息、变量等的多维对象

您可以更进一步,创建一个构造函数来处理映射及其相关标记。这将是最有效的


祝你好运。

以下是我相信正在发生的事情

在函数
markMap()
中,您正在实例化属于google map对象的新标记

  for (var i = 0; i < markerElements.length; i++){    //Loop para gerar os marcadores
    if (markerElements[i] != null){
      marker = new google.maps.Marker({
        position: markerElements[i].position,
        map: map,
        title: markerElements[i].title
      });
    }
  }
现在我们可以在数组中循环,并将
setMap
设置为null

  // un-reference marker from map
  markerGlobal[2].setMap(null);
我看到您尝试使用
removeMarker()
函数来执行此操作,但它没有已添加到地图的标记的句柄

一些建议

如果我是你,我会考虑重构代码,使之成为一个包含所有标记、它们的行信息、变量等的多维对象

您可以更进一步,创建一个构造函数来处理映射及其相关标记。这将是最有效的


祝你好运。

如果在
tour\u启动
函数定义中删除条件
if(!window.tour)
,则效果良好

如果在
tour\u启动
函数定义中删除条件
if(!window.tour)
,则可以正常工作

谢谢,它解决了持久化路由的问题。谢谢,它解决了持久化路由的问题。谢谢,这是我第一次使用Google Maps Js API进行开发,所以我不使用代码,因为时间有点长,我已经在代码中发现了很多简单的问题。您帮助我解决了可视化管理标记的问题(我真的忘了在我的问题中谈论这个bug)。然而,阿尔菲尤姆的回答解决了我所问的问题,这是坚持的第一条路线。关于构造器,谢谢你的想法,我计划随着时间的推移使代码更加抽象和优化,但现在我只需要一个工作原型。@BrunoVaz它确实有很多东西需要消化。我将继续修复代码,因为通过删除tour_启动中的if语句来重新加载map对象不如管理屏幕上已经存在的map有效。(我想这就是我的行为,我没有检查)。听起来你在正确的道路上。谢谢,这是我第一次使用谷歌地图Js API进行开发,所以我没有使用代码,因为时间有点长,我已经在代码中发现了很多简单的问题。您帮助我解决了可视化管理标记的问题(我真的忘了在我的问题中谈论这个bug)。然而,阿尔菲尤姆的回答解决了我所问的问题,这是坚持的第一条路线。关于构造器,谢谢你的想法,我计划随着时间的推移使代码更加抽象和优化,但现在我只需要一个工作原型。@BrunoVaz它确实有很多东西需要消化。我将继续修复代码,因为通过删除tour_启动中的if语句来重新加载map对象不如管理屏幕上已经存在的map有效。(我想这就是我的行为,我没有检查)。听起来你走的路是对的。