У меня есть приложение для отслеживания расстояния, которое работает, размещая маркеры на карте в виде слоев.Начальные маркеры размещаются с использованием getCurrentPosition, что нормально.Однако после того, как это начальное местоположение найдено, местоположение пользователя отслеживается с помощью «WatchPosition», внутри я хочу удалить все слои / маркеры на карте, когда функция «WatchPosition» получает новые координаты, и заменить их новыми слоями / маркерами.
Приведенный ниже код немного сложен, поэтому я добавил комментарии, которые должны объяснить все, что уместно.
//This function watches the users location for any changes in coordinates
navigator.geolocation.watchPosition(function(position) {
// Coordinates are stored here
watchLat = position.coords.latitude;
watchLng = position.coords.longitude;
// Uses a function to monitor how far the user has travelled
var changesInDeviceLocation = watchChanges(startLat, startLng, watchLat, watchLng);
distanceTracker += changesInDeviceLocation;
//If the user has travelled between 0.1 and 0.2 km
if (distanceTracker >= 0.1 && distanceTracker < 0.3) {
counter++;
currentArray = [];
for (var i = 0; i < eventInfo.length; i++) {
var R = 6371;
var dLat = deg2rad(eventInfo[i].properties.Latitude - startLat);
var dLon = deg2rad(eventInfo[i].properties.Longitude - startLng);
var a =
Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.cos(deg2rad(startLat)) * Math.cos(deg2rad(eventInfo[i].properties.Latitude)) *
Math.sin(dLon / 2) * Math.sin(dLon / 2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
var d = R * c; // Distance in km
if (d <= 0.5) {
currentArray.push(
eventInfo[i]
);
}
}
for (var i = 0; i < currentArray.length; i++) {
map.addSource("watchSource", {
"type": "geojson",
"data": {
"type": "FeatureCollection",
"features": currentArray
}
});
currentArray.forEach(function(feature) {
var symbol = feature.properties['icon'];
var layerID = 'poi-' + symbol;
//If the layerID does not already exist, add the layer to the map
if (!map.getLayer(layerID)) {
map.addLayer({
"id": layerID,
"type": "symbol",
"source": "watchSource",
"layout": {
"icon-image": symbol + "-15",
"icon-allow-overlap": true
},
"filter": ["==", "icon", symbol]
});
Извинения за форматирование кода.