【问题标题】:Snap to nearest street捕捉到最近的街道
【发布时间】:2009-04-30 07:36:03
【问题描述】:

你们最近一直在帮助解决我在使用 Google 地图方面遇到的一些问题,感谢你们。

我几乎完成了这个 - 只剩下一个问题。当我在地图上放置第一个标记时,它会捕捉到最近的街道(这很好!)但是当我将第一个标记拖到另一个地方时,方向突然混乱了。并且标记得到混合。

你可以在http://dev.korebogen.dk/gmap/看到一个例子

我需要使移动第一个标记(仍在捕捉)成为可能,当我放置第二个标记时,方向首先加载。但为了使第一个标记再次捕捉,我必须加载方向。

我希望你们中的一些人有一个解决方案。提前致谢。

【问题讨论】:

    标签: google-maps driving-directions


    【解决方案1】:

    布莱克浦社区教会 Javascript 团队有一个 excellent example of exactly this (direct link to the fourth example)。也可以查看他们的其他示例。

    (免责声明:我与他们无关,但从他们的示例中学到了很多关于 GMaps 的知识)

    编辑: 我怀疑地图事件有点像这样触发(伪代码,对于真实事件名称等,请查看 GMaps 文档):

    • 地图点击:mousedown,mouseup,点击:{set red marker}
    • 拖动红色标记:mousedown, dragstart{red marker}, mouseup, click:{set marker b} (mousedown+mouseup), dragend
    • 两个标记都设置了吗?是的,查询路线

    我的建议是:在 red-marker 和 marker-A dragstart 函数中,设置一些标志“拖动标记”,在 dragend 函数中重置它;在设置标记 B 函数中,仅当我们当前没有拖动某些东西时才设置标记(未设置标志)。

    【讨论】:

    • 我已经检查了它们并将它们的一些代码合并到我的示例中,但它没有按预期工作。不知道我做错了什么。
    • 我将在第四个示例中尝试一些新的东西,2 秒。 :)
    • 我无法让它按预期工作。你有没有可能做一些适合我的代码的东西?
    • @Jan:在 Opera 10、FF 3 和 IE 7 中检查了您的网站,按照您描述的方式正常运行 - 或者我读错了。你能描述一下应该发生的步骤和实际发生的步骤吗?还有,用什么浏览器?
    • 感谢您的宝贵时间。当然;加载地图后,我绘制第一个标记(红色)-它自动捕捉到最近的街道->完美!假设我把标记放错了,想把它拖到正确的地方:我拖动红色标记,突然它在地图上加载了方向 - 并添加了一个 A 和一个 B 标记 - 但我只想移动我的红色标记 - 尚未加载方向。当红色标记正确放置时-我放置第二个,然后加载方向。这就是我所寻求的。现在,如果我拖动红色(第一个)标记,它只会搞砸。对不起我的英语不好。
    【解决方案2】:

    我之前提供给您的代码会监听前两次点击,并为每次点击添加一个标记。问题是当您拖动第一个标记时,它会再次调用“单击”事件 - 从而在同一位置添加另一个标记。

    幸运的是,click event 可以让您知道是否点击了叠加层。因此,如果覆盖为空,则仅执行添加新标记的代码。 请注意,overlay 不是布尔值。

    var listener = GEvent.addListener(map, "click", function(overlay, latlng) {
      if (overlay == null) {
        // code to add new marker
      }
    });
    

    【讨论】:

    • 我在示例中合并了您之前的代码(可能需要刷新)。而且它有效 - 我可以拖动第一个标记而不会弄乱。但是我需要第一个标记捕捉到最近的道路(单击并拖动),因此我可以避免例如在字段上绘制标记。我显然不太擅长 Google Maps API 或 Javascript 来让它工作。感谢您的帮助。
    猜你喜欢
    • 2011-06-15
    • 1970-01-01
    • 2013-02-28
    • 2010-12-01
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    相关资源
    最近更新 更多