Функции фильтрации в других слоях QGIS Atlas?

22

Я пытаюсь использовать инструменты QGIS Atlas для создания «точечных карт» учеников, т.е. отобразить школу и учащихся, которые посещают эту школу, для 215 школ.

Уровень школ является слоем покрытия и определяется значением SCHNUM(номера школы). Это работает нормально, то есть правильно ведет страницы.

Как, однако, я могу отображать только объекты из других слоев, в данном случае слой ученической точки, которые соответствуют соответствующему SCHNUMзначению для текущего объекта в слое покрытия?

Я также хотел бы переключить слой покрытия (школы) на «скрытый» и использовать ту же технику, чтобы отображать текущую школу только из дублированного слоя школ.

Здесь есть доступная презентация, которая ссылается на использование настройки правила рендеринга слоя $atlasfeatureid, но я не могу понять, как это работает.

Я также нашел страницу отслеживания ошибок, которая показывает, как это работает, но опять же, я не могу заставить ее работать с моими данными:

DPSSpatial
источник
Извините, что опубликовал это как ответ, хотя это вопрос. Есть ли рекомендуемые видеоуроки для этого? Я пытался следовать, и как-то всегда удавалось потеряться в какой-то момент. Имея ту же проблему.
JRamos

Ответы:

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. Первый в двойных кавычках представляет значение каждого текущего элемента слоя в поле, в котором хранится школьный код. Второе, в одинарных кавычках, представляет собой строку с названием слоя покрытия, в котором хранится школьный код.

Примечание : опять же, я думаю, что переменная @atlas_feature - это «новая» вещь, и в 2.8.x вам нужно будет использовать функцию $ atlas_feature

введите описание изображения здесь

Александр Нето
источник