【问题标题】:How do I simply get the current geolocation using leaflet without events?如何在没有事件的情况下使用传单简单地获取当前地理位置?
【发布时间】:2018-02-06 20:54:55
【问题描述】:

我已经相当深入地阅读了传单文档,但我找不到我的问题的简单答案。

首先是一些上下文:

我创建了一个新地图并将其置于当前位置的中心,并为找到的位置添加了一个侦听器。

    var map = L.map('map', {zoomControl: false}).fitWorld();

    L.tileLayer('https://api.mapbox.com/styles/v1/mapbox/outdoors-v9/tiles/256/{z}/{x}/{y}?access_token=pk.eyJ1IjoiZG9ucZhc3o3ODMifQ.3-x6nnTgePEK0ERPllV7oQ', {
        maxZoom: 20
    }).addTo(map);

    map.locate({setView: true, watch: true, maxZoom: 17});
    map.on('locationfound', onLocationFound);

我现在想在当前位置创建一个标记,例如

    marker = L.marker(map.getLatLong);
    marker.addTo(map);

这是通过 onLocationFound() 函数完成的,因为我只想创建一次,然后使用 locationfound 事件通过 marker.setLatLng() 移动标记。

如何使用传单获取当前的经纬度?它有 HTML5 Geolocation API 的简单替代方案吗?

我试过 map.getCenter 但它返回 (0,0)

【问题讨论】:

  • this answer 中有一个示例可能有用。
  • 谢谢。这确实有效,但如果有人知道没有事件的整洁方式,我也将不胜感激。
  • 可能不会,因为您正在与服务器通信以获取此信息,并且 99.9% 的时间将基于事件。

标签: javascript leaflet


【解决方案1】:

这将通过onLocationFound() 函数完成,因为我只想创建一次

在这种情况下,请使用map.once() 而不是map.on()。如您所见,read in the documentationonce()on() 相同,但仅在此类事件的第一个事件上运行。

然后使用locationfound 事件通过marker.setLatLng() 移动标记。

在这种情况下,请检查标记是否已创建,如果未创建则创建,如果已创建则移动它。比如……

var marker;
map.on('locationfound', function(ev){
    if (!marker) {
        marker = L.marker(ev.latlng);
    } else {
        marker.setLatLng(ev.latlng);
    }
})

如果有人知道没有事件的整洁方法,我也将不胜感激

在这种情况下,请查看HTML5 geolocation API。没有事件,但无论如何都有异步回调。您可以直接使用这些回调,您可以将它们包装在事件处理程序中(就像 Leaflet 一样),您可以将它们包装在 Promises 中,但是您必须以一种或另一种方式处理并非完全无关紧要的异步问题.

【讨论】:

    猜你喜欢
    • 2012-05-29
    • 2016-06-12
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多