Многоугольники с выделенными элементами в Leaflet - PullRequest
0 голосов
/ 30 мая 2019

У меня есть слой в Leaflet с полигонами, где также есть перекрывающиеся полигоны. Я хочу иметь возможность видеть, на каком полигоне щелкают, используя функцию выделения. Но у меня есть проблемы, чтобы заставить это работать должным образом.

Если у меня есть набор данных с одним набором объектов полигонов в одной группе слоев, проблем не возникает, но я хочу использовать его с несколькими полигонами с различными объектами и разделить их на группы слоев, которые я не могу решить. Как это можно сделать с помощью приведенного ниже кода? Это пример многих характерных полигонов. Каждый многоугольник представляет область расстояния от точки на карте со значениями, такими как 5 мин, 10 мин и 15 мин, есть «набор многоугольников» для многих различных точек, и они перекрываются друг с другом при достижении определенного значения, такого как 10 и 15. минут например. Мне нужно выделить каждый объект при нажатии, чтобы увидеть, к какому полигону относится точка. Я вставил «VectorGrid _ ???», именно здесь у меня есть проблема для его работы. Спасибо ..

polygon_sample: image


    var dist_5 = new L.layerGroup();
    var dist_10 = new L.layerGroup();
    var dist_15 = new L.layerGroup();

    var highlight_distance;
    var clearHighlight_distance = function() {
      if (highlight_distance) {
        vectorGrid_???.resetFeatureStyle(highlight_distance);
      }
      highlight_distance = null;
    };

    $.getJSON("../xyz/12345/distance.geojson", function(json) {
    var vectorGrid_dist_5 =  L.vectorGrid.slicer(json, {
                      maxZoom: 20,
                      zIndex: 20,
                      rendererFactory: L.svg.tile,
                      vectorTileLayerStyles: {
                      sliced: function(properties, zoom){
                          var cl = properties.cost_level;
                          if (cl === 300.0){
                          return {
                          weight: 2,
                          color: '#6c0370',
                          opacity: 1,
                          fill: true,
                          fillColor: '#ff00ff',
                          stroke: true,
                          fillOpacity: 0.3
                          }
                        } else {
                          return {
                            fillOpacity: 0,
                            stroke: false,
                            fill: false,
                            opacity: 0,
                            weight: 0
                          }
                        }
                      }
                         },
                         interactive: true,
                         getFeatureId: function(f) {
                          return f.properties.sid;
                          },
                       })

    var vectorGrid_dist_10 =  L.vectorGrid.slicer(json, {
                      maxZoom: 20,
                      zIndex: 19,
                      rendererFactory: L.svg.tile,
                      vectorTileLayerStyles: {
                      sliced: function(properties, zoom){
                          var cl = properties.cost_level;
                          if (cl === 600.0){
                          return {
                          weight: 2,
                          color: '#6c0370',
                          opacity: 1,
                          fill: true,
                          fillColor: '#ff00ff',
                          stroke: true,
                          fillOpacity: 0.2
                          }
                        } else {
                          return {
                            fillOpacity: 0,
                            stroke: false,
                            fill: false,
                            opacity: 0,
                            weight: 0
                          }
                        }
                      }
                         },
                         interactive: true,
                         getFeatureId: function(f) {
                          return f.properties.sid;
                          },
                       })

    var vectorGrid_dist_15 =  L.vectorGrid.slicer(json, {
                      maxZoom: 20,
                      zIndex: 18,
                      rendererFactory: L.svg.tile,
                      vectorTileLayerStyles: {
                      sliced: function(properties, zoom){
                          var cl = properties.cost_level;
                          if (cl === 900.0){
                          return {
                          weight: 2,
                          color: '#6c0370',
                          opacity: 1,
                          fill: true,
                          fillColor: '#ff00ff',
                          stroke: true,
                          fillOpacity: 0.1
                          }
                        } else {
                          return {
                            fillOpacity: 0,
                            stroke: false,
                            fill: false,
                            opacity: 0,
                            weight: 0
                          }
                        }
                      }
                         },
                         interactive: true,
                         getFeatureId: function(f) {
                          return f.properties.sid;
                          },
                       })

        function handleClick_dist(e) {
        var properties = e.layer.properties;
        L.popup()
        .setContent(
          "<br><b>Area within</b>: " + properties.cost_level/60 + ' min'
          )
        .setLatLng(e.latlng)
        .openOn(map);

        clearHighlight_distance();
        highlight_distance = e.layer.properties.sid;
        vectorGrid_???.setFeatureStyle(highlight_distance, {   
         weight: 1,
         color: '#ffffff',
         opacity: 1,
         fillColor: '',
         fill: true,
         fillOpacity: 0
         })
        L.DomEvent.stop(e);
        }

        var clearHighlight_distance = function() {
        if (highlight_distance) {
            vectorGrid_???.resetFeatureStyle(highlight_distance);
            }
            highlight_distance = null;

            map.on('click', clearHighlight_distance);
        };

    vectorGrid_dist_5.on('click', handleClick_dist);      
    vectorGrid_dist_10.on('click', handleClick_dist);    
    vectorGrid_dist_15.on('click', handleClick_dist);

    vectorGrid_dist_5.addTo(dist_5)
    vectorGrid_dist_10.addTo(dist_10)
    vectorGrid_dist_15.addTo(dist_15)
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...