【问题标题】:leaflet geoJSON filtering传单 geoJSON 过滤
【发布时间】:2017-09-20 15:59:28
【问题描述】:

我正在使用 L.GeoJSON.AJAX 加载我的 json。我有以下设置标记的样式:

    var weakClusterMarkerOptions = {
      radius: 5,
      fillColor: "#FFFF00",
      color: "#000",
      weight: 2,
      opacity: 1,
      fillOpacity: 0.8
    },
    strongClusterMarkerOptions = {
      radius: 7,
      fillColor: "#CC0000",
      color: "#CC0000",
      opacity: 1,
      fillOpacity: 0.8
    };

  function customizeClusterIcon(feature, latlng) {
    if (feature.properties.strongCl === 'strong') {
      return L.circleMarker(latlng, strongClusterMarkerOptions);
    } else {
      return L.circleMarker(latlng, weakClusterMarkerOptions);
    }
  }

然后我使用以下内容进行过滤:

function toggleStrength(strength, showLayer) {
    jsonLayer.refilter(function (feature, layer) {
      if (strength == 'all') {
        return true;
      } else {
        if (showLayer) {
          return feature.properties.strongCl === strength;
        }
      }
    });
  }

这里的问题是,当我过滤 circleMarker 的边框消失但标记仍然可见,特别是填充颜色。

【问题讨论】:

  • 你找到解决方案了吗?
  • @Barbarossa 请参阅下面的答案

标签: ajax filter leaflet geojson


【解决方案1】:

所以我最终为每个条件(弱和强)创建了 LayerGroups,然后根据过滤器清除并添加相应的组。

toggleStrength = function (layer, showLayer, theMap) {


            switch (layer) {
                case 'weak':
                    if (showLayer) {
                        theMap.addLayer(weakGroup);
                    } else {
                        theMap.removeLayer(weakGroup);
                    }
                    break;
                case 'strong':
                    if (showLayer) {
                        theMap.addLayer(strongGroup);
                    } else {
                        theMap.removeLayer(strongGroup);
                    }
                    break;
                default:
                    clearAll(theMap);
                    if (showLayer) {
                        theMap.addLayer(weakGroup);
                        theMap.addLayer(strongGroup);
                    }
                    break;
            }
        };

【讨论】:

    【解决方案2】:

    您的fillColor 和color 具有相同的值#CC0000。大概边界就在那里。它只是与填充颜色相同。

    【讨论】:

    • 我不关心应该存在的标记,我的问题是我试图过滤掉的标记仍然存在(边框,即颜色消失但填充颜色仍然可见。
    • 你能显示refilter 代码吗? Leaflet 的filter 功能仅适用于新添加的图层。我很确定你的工作是一样的。如果是这样,您需要使用eachFeature 并有条件地删除项目。
    猜你喜欢
    • 2013-04-15
    • 1970-01-01
    • 2015-08-11
    • 2014-12-31
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多