我正在尝试根据它们的属性过滤矢量图层特征。我有 4 个复选框:type_1、type_2、shape_1 和 shape_2 请注意,我使用 Extjs 作为界面。
一开始我可以将类型属性设置样式过滤为“无”或“”……像这样:
switch (f) {
case 'type_1':
if(checked)
filter('show_type_1');
else filter ('hide_type_1);
case 'type_2':
if(checked)
filter('show_type_2');
else filter ('hide_type_2);
}
function filter(value)
{
switch (value){
case 'hide_type_1':
for (i=0;i<=features.length;i++)
if(features[i].attributes.type == 'first')
features[i].style = 'none';
layer.redraw();
case 'show_type_1':
for (i=0;i<=features.length;i++)
if(features[i].attributes.type == 'first')
features[i].style = '';
layer.redraw();
case 'hide_type_2':
for (i=0;i<=features.length;i++)
if(features[i].attributes.type == 'second')
features[i].style = 'none';
layer.redraw();
case 'show_type_2':
for (i=0;i<=features.length;i++)
if(features[i].attributes.type == 'second')
features[i].style = '';
layer.redraw();
}
}
以上所有功能都很好,如果我取消选中 type_1,所有 type_1 功能都会消失。那么如果我取消选中 type_2,所有 type_2 功能都会消失。然后如果我再次检查 type_1,所有 type_1 功能都会出现,而 type_2 功能将保持隐藏状态。
问题是当我尝试对 shape 属性执行相同操作时,添加:
case 'shape_1':
if(checked)
filter('show_shape_1');
else filter ('hide_shape_1);
到第一个功能。
和:
case 'hide_shape_1':
for (i=0;i<=features.length;i++)
if(features[i].attributes.shape == 'first')
features[i].style = 'none';
layer.redraw();
case 'show_shape_1':
for (i=0;i<=features.length;i++)
if(features[i].attributes.shape == 'first')
features[i].style = '';
layer.redraw();
到第二个。
当我取消选中 shape_1 复选框时它可以工作。所有 shape_1 功能都隐藏了。但是如果选中它来显示它们,所有的特性都会显示,即使是 type_1 和 type_2 我没有选中和隐藏它们!
我不明白为什么会这样。因为如果我处理一个属性(在我的情况下为类型),它工作正常,但在尝试将类型过滤与另一个特征属性(形状)结合时失败。
我希望我的解释清楚。