为啥不从谷歌地图标记上的点击事件中调用 navigator.getCurrentPosition (function (position) )

Posted

技术标签:

【中文标题】为啥不从谷歌地图标记上的点击事件中调用 navigator.getCurrentPosition (function (position) )【英文标题】:Why does navigator.getCurrentPosition (function (position) ) not be called from a click event on a google maps marker为什么不从谷歌地图标记上的点击事件中调用 navigator.getCurrentPosition (function (position) ) 【发布时间】:2018-07-25 03:07:07 【问题描述】:

我有一个带有一些标记的谷歌地图。

我为特定标记上的“点击”事件添加了一个事件侦听器。 当用户单击标记时,我想获取从当前位置到标记位置的方向。

为此,我使用以下代码:

marker.addListener('click', function() 
    if(navigator.geolocation) 
        navigator.geolocation.getCurrentPosition(function (position) 
            gLatitude = position.coords.latitude;
            gLongitude = position.coords.longitude;
        );
    

永远不会执行更新我的全局变量 gLatitude 和 gLongitude 的两行代码。

从 google.maps.Marker 事件调用 navigator.geolocation.getCurrentPosition 是否有一些限制?

如果是这样,任何人都可以就点击谷歌地图上的标记时如何读取当前位置提供建议吗?

【问题讨论】:

控制台中是否出现任何错误?你用的是什么浏览器? 浏览器中没有错误或消息。我使用谷歌浏览器开发人员 mmhhh...你能在标记外测试geolocation service,看看它是否有效? 是的,我已经做到了。有用。我还有其他使用 navigator.geolocation.getCurrentPosition 的功能,它可以工作。这就是为什么我在想也许谷歌地图会以某种方式阻止你调用地理位置? 不,他们的文档中没有任何建议。让我明白这一点;你想在地图和标记加载后运行html5 Geolocation 【参考方案1】:

正如我在上面所解释的,如果用户不授权访问他们的地理数据,HTML5 Geolocation 可能会引发隐私问题。但是,由于您想通过单击事件提取坐标,因此您可以这样做来改进上面的 sn-p:

var map, marker;
function initMap() 
 var sidney = lat: -34.397, lng: 150.644;
 map = new google.maps.Map(document.getElementById('map'), 
 center: sidney,
 zoom: 6
);

 marker = new google.maps.Marker(
    position: sidney,
    map: map

  );

 marker.addListener('click', function() 
  if(navigator.geolocation) 
    console.log("true");

    var lat = marker.getPosition().lat();
    var lng = marker.getPosition().lng();

    console.log(lat);
    console.log(lng);

    );
   
 );
 

如果您在浏览器中对此进行测试,您将看到许多日志显示您正在寻找的坐标。

【讨论】:

感谢您的建议和您的时间。你能让它只在标记点击上工作吗?我不想在地图上的每次点击中都有位置,只在标记上? 好吧,只需将addListener 分配给标记而不是地图对象;但我猜你得到了你所期望的坐标?这样,当用户单击标记时,您将获得坐标 您还需要这方面的帮助还是已经完成了? 它现在可以在我的应用程序中使用。问题不是获得当前位置,而是我的地图和标记的范围问题。非常感谢您的帮助和代码 sn-p。它帮助我发现了我的问题。 你能接受我的回答吗?一些奖励不会伤害我的工作:)

以上是关于为啥不从谷歌地图标记上的点击事件中调用 navigator.getCurrentPosition (function (position) )的主要内容,如果未能解决你的问题,请参考以下文章

当你从谷歌地图API中点击地图中的内置位置(不是标记)时,如何自定义弹窗的内容?

从谷歌地图上的 JSON 更新标记

如何:从谷歌地图上的 JSON 动态更新标记

如何从谷歌地图标记中获取视图?

Flutter - 从谷歌地图小部件中删除标记

为啥要在标记点击事件上重新渲染地图?