如何在没有事件的情况下使用传单简单地获取当前的地理位置?

时间:2018-02-06 20:54:56

标签: javascript leaflet

我已经深入阅读了传单文档,但我无法找到问题的简单答案。

首先是一些背景:

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

    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()移动标记。

我如何使用传单获取当前的LatLong?它是否有HTML5 Geolocation API的简单替代方案?

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

1 个答案:

答案 0 :(得分:3)

  

这是使用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所做),您可以将它们包装在Promise中,但是您必须处理的方法不是完全无关紧要的异步性问题。