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

K. *_*ith 2 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);
Run Code Online (Sandbox Code Playgroud)

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

    marker = L.marker(map.getLatLong);
    marker.addTo(map);
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能使用传单来获取当前的 LatLong?它是否有 HTML5 Geolocation API 的简单替代方案?

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

Iva*_*hez 7

这是用onLocationFound()函数来完成的,因为我只想创建它一次

在这种情况下,请使用map.once()代替map.on()。正如你可以在文档中读取的once()是一样的on(),但只能运行在那种第一个事件。

然后使用该locationfound事件让标记移动marker.setLatLng()

在这种情况下,然后检查标记是否已创建,如果没有则创建,如果已创建则移动它。就像是...

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

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

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