Filtrujesz funkcje w innych warstwach QGIS Atlas?

22

Staram się używać narzędzi QGIS Atlas do budowania „map rozrzutu” uczniów, tj. pokaż szkołę i uczniów, którzy uczęszczają do tej szkoły, dla 215 szkół.

Warstwa szkolna jest warstwą pokrycia i zależy od wartości SCHNUM(numeru szkoły). Działa to dobrze, to znaczy, że prowadzi strony poprawnie.

Jak jednak mogę wyświetlić tylko obiekty z innych warstw, w tym przypadku warstwy punktowej ucznia, które odpowiadają odpowiedniej SCHNUMwartości dla bieżącego elementu w warstwie pokrycia?

Chciałbym również przełączyć warstwę pokrycia (szkoły) na „ukrytą” i użyć tej samej techniki, aby wyświetlić bieżącą szkołę tylko ze zduplikowanej warstwy szkół.

Dostępna jest tutaj prezentacja, która nawiązuje do użycia ustawienia reguły renderowania warstw przy użyciu $atlasfeatureid, ale nie mogę zrozumieć, jak to działa.

Znalazłem też stronę śledzenia błędów, która pokazuje, że działa, ale znowu nie mogę zmusić jej do działania na moich danych:

DPSSpatial
źródło
Przepraszam, że opublikowałem to jako odpowiedź, mimo że jest to pytanie. Czy jest do tego zalecany samouczek wideo? Próbowałem podążać za tym i zawsze jakoś zawsze się gubiłem. Mając ten sam problem.
JRamos

Odpowiedzi:

41

Rzeczywiście, musisz użyć symboliki opartej na regułach, aby osiągnąć to, co chcesz.

Musisz utworzyć regułę dla tego, co chcesz pokazać, i regułę ELSE dla wszystkich innych.

wprowadź opis zdjęcia tutaj

W regule ELSE usuń zaznaczenie pola wyboru symbolu, aby był niewidoczny.

wprowadź opis zdjęcia tutaj

Ukryj inne funkcje z warstwy pokrycia

Reguła pokazująca tylko bieżącą funkcję atlasu może być następująca:

$id  =  @atlas_featureid 

wprowadź opis zdjęcia tutaj

Uwaga : Uważam, że zmienna @atlas_featureid to składnia 2.12. Myślę, że w 2.8.x trzeba użyć funkcji o nazwie $ atlas_featureid.

Ukryj obiekty poza bieżącą funkcją atlasu

Przepis jest taki sam jak poprzednio, jedna zasada służy do ukrywania funkcji, jedna do pokazania.

W przypadku konkretnego pytania wydaje się, że masz wspólny atrybut o nazwie SCHNUM. W takim przypadku reguła może być:

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

w twoim szczególnym przypadku:

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

Zwróć uwagę na różnicę między obydwoma SCHNUM. Pierwszy, w podwójnych cudzysłowach, reprezentuje wartość każdej bieżącej funkcji warstwy pola, w którym przechowywany jest kod szkoły. Drugi, w pojedynczych cudzysłowach, jest ciągiem o nazwie warstwy pokrycia, która przechowuje kod szkoły.

Uwaga : ponownie myślę, że zmienna @atlas_feature jest „nową” rzeczą, aw 2.8.x będziesz musiał użyć funkcji $ atlas_feature

wprowadź opis zdjęcia tutaj

Alexandre Neto
źródło