是否在QGIS Atlas的其他层中过滤功能?


22

我正在尝试使用QGIS Atlas工具来构建学生的“散点图”,即。显示215所学校的学校和该学校的学生。

学校层是覆盖层,并受SCHNUM(学校编号)值的驱动。这工作正常,即正确驱动页面。

但是,如何仅显示来自其他层SCHNUM的要素(在这种情况下为学生点层),这些要素与coverage层中当前要素的对应值匹配?

我还想将覆盖层(学校)切换为“隐藏”,并使用相同的技术仅显示来自重复学校层的当前学校。

这里有一个演示文稿,暗示了使用的图层渲染规则设置$atlasfeatureid,但是我不知道它是如何工作的。

我还找到了这个错误跟踪器页面,该页面显示了此工作方式,但是同样,我也无法将其用于我的数据:


即使有问题,也很抱歉将此作为答案发布。有推荐的视频教程吗?我试着跟着走,总是以某种方式迷失了自己。有同样的问题。
JRamos

Answers:


41

实际上,您需要使用基于规则的符号系统来实现所需的功能。

您需要为要显示的内容创建规则,为所有其他内容创建ELSE规则。

在此处输入图片说明

在ELSE规则中,取消选择符号复选框以使其不可见。

在此处输入图片说明

隐藏覆盖层中的其他功能

仅显示当前图集功能的规则可以如下:

$id  =  @atlas_featureid 

在此处输入图片说明

注意:我相信@atlas_featureid变量是2.12语法。我认为在2.8.x中,您需要使用一个名为$ atlas_featureid的函数。

隐藏当前图集要素之外的要素

配方与之前相同,另一条规则隐藏特征,另一条规则显示。

对于您的特定问题,您似乎拥有一个名为SCHNUM的共享属性。在这种情况下,规则可以是:

"Layers_field" = attribute (@atlas_feature, 'coverage_layer_field_name')

在您的特定情况下:

"SCHNUM"  =  attribute( @atlas_feature , 'SCHNUM')

注意两个SCHNUM之间的区别。第一个双引号表示存储学校代码的字段的每个当前图层要素的值。第二个用单引号引起来的字符串是带有存储学校代码的coverage层名称的字符串。

注意:同样,我认为@atlas_feature变量是“新的”事情,在2.8.x中,您将需要使用$ atlas_feature函数

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.