在用户位置初始化地图框地图



如何在初始化时将mapbox映射设置为用户的位置?我知道你可以像这样以编程方式转到用户的位置:

if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(e => {
map.jumpTo({center: [e.coords.longitude, e.coords.latitude]})
})
}

但这首先在某个默认位置初始化地图,然后转到用户的位置。我也尝试过在地图初始化之前将对navigator.geolocation的调用移动到,但由于这会调用navigator.geolocation,需要更长的时间,结果仍然是地图加载时显示默认位置,然后转到用户所在的位置。尝试从navigator获取lat和lng,然后将它们传递给地图构造函数应该可以,但我很难在不引发问题的情况下让映射等待这些变量。更重要的是,这似乎是一个具有广泛吸引力的功能,所以我觉得我把它搞得过于复杂了。你如何在用户的位置开始地图?

在知道位置之前不要创建地图。

function initMap(lngLat) {
window.map = new mapboxgl.Map({ 
center: lngLat,
// ... 
});
// more initialization
});
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(e => {
initMap([e.coords.longitude, e.coords.latitude])
})
} else {
initMap([ /* default location */ ]);
}

很明显,在这之前,您还必须禁用任何其他依赖于正在加载的地图的功能。

最新更新