Есть ли способ вручную удалить слои из Mapbox? - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть приложение для отслеживания расстояния, которое работает, размещая маркеры на карте в виде слоев.Начальные маркеры размещаются с использованием 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]
            });

Извинения за форматирование кода.

...