Многократная фильтрация на лету на слое листовок - PullRequest
0 голосов
/ 08 января 2019

Я бы хотел отфильтровать маркеры на моем (геойсон) слое по двум признакам: год и тип события. Я счастлив за год, о котором позаботятся layerGroup. Тем не менее, я мог бы установить флажок и динамически обновлять маркеры, отфильтровывая их в соответствии с feature.properties.eventType, в дополнение к отображаемому году, что-то вроде

  <input type="checkbox" id="all" name="all" value="all">
      <label for="all">All</label>
      <input type="checkbox" id="funfair" name="funfair" value="newsletter">
      <label for="funfair">Funfair</label>
      <input type="checkbox" id="trade" name="trade" value="trade">
      <label for="trade">Trade</label>
      <input type="checkbox" id="exhibition" name="exhibition" value="exhibition">
      <label for="exhibition">Paid exhibition</label>

и т. Д. ... который вызовет

filter: function(feature, layer) {
               return feature.properties.eventType == value-of-checkbox;
           }

У меня есть пять типов eventType. Так, например, если установлен флажок 1890, карта показывает все события 1890, независимо от того, что это за событие (потому что по умолчанию оно будет отображать все события). Однако если пользователь установит флажки «funfair» и «trade», я хочу, чтобы на карте отображались только события 1890 года типа funfair и trade, а не другие события.

Это мой полный скрипт, который до сих пор отлично работал с фильтрацией по годам.

var oldmap = L.tileLayer('address', {
        maxZoom: 12
}),

    modernmap = L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token={accessToken}', {

    maxZoom: 12,
    id: 'mapbox.streets',
    accessToken: 'mytoken'
});

var map = L.map('map', {
        center: [40.1857864,-4.5536861],
        zoom: 7,
        layers: [oldmap, modernmap]
        });

var baseMaps = {
    "Old map": oldmap,
    "Modern map": modernmap
};
        var jsontest = {"type": "FeatureCollection",
        "features": [
        {
         "type": "Feature",
         "geometry": {
            "type": "Point",
            "coordinates":  [ -16.5471268,28.4136726 ]
         },
         "properties": {
         "Name":"Point1",
         "year":'1892',
         "eventType":"funfair",
         "notes":""
         }
        },
        {
         "type": "Feature",
         "geometry": {
            "type": "Point",
            "coordinates":  [ 2.1753895,41.3767925 ]
         },
         "properties": {
         "Name":"Point2",
         "year":'1890',
         "eventType":"trade demonstration",
         "notes":""
         }
        }
        ]};

        var mapLayerGroupsYear = [];
    function onEachFeature(feature, layer) {

        var year = mapLayerGroupsYear[feature.properties.year];
        if (year === undefined) {
            year = new L.layerGroup();

            //add the layer to the map
            year.addTo(map);

            //store layer
            mapLayerGroupsYear[feature.properties.year] = year;
        }

            //add the feature to the layer
            year.addLayer(layer);

    }
    var myLayer = L.geoJSON(jsontest, {
      onEachFeature: onEachFeature

    L.control.layers(baseMaps, mapLayerGroupsYear).addTo(map);

Я новичок с буклетом, поэтому, пожалуйста, прости тупой вопрос, если это так.

1 Ответ

0 голосов
/ 10 января 2019

Благодаря Стефану, мне удалось заставить это работать. Решение здесь:

https://gis.stackexchange.com/questions/307985/multiple-on-the-fly-filtering-based-on-markers-features-on-leaflet

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...