Zamiast łączenia tabel… i wiele do jednego

Jak skonfigurować pole na formularzu i dynamicznie odczytywać dane z innych tabel nawet w relacji wiele do jednego obiektu.

W większości przypadków nie ma konieczności łączenia zewnętrznych tabel. Podstawową potrzebą jest wyłącznie otrzymanie informacji o atrybutach zawartych w innych tabelach, a które mogą być skojarzone z obiektem na warstwie przez wspólny identyfikator. W takim przypadku łatwo skonfigurować pole na formularzu i dynamicznie odczytywać dane z innych tabel. Proszę zwrócić uwagę, że napisałem w liczbie mnogiej - ‘tabel’. Ponieważ możemy tu wyświetlać relacje wielu wierszy do jednego obiektu na mapie, a w różnych polach, nawet różnych tabel.

A wszystko dzięki odpowiedniemu wyrażeniu...

Przykład
W moim przykładzie mamy warstwę poligonową z trzema obiektami. Obiekty mają unikalne pole id. Mam też tabelę (poniżej screen), która zawiera pole id poligonu oraz jego atrybut, np. kolor. Przyporządkowanych jest więcej niż jeden kolor do danego poligonu.

dane z tabeli QGIS

W formularzu warstwy poligonowej, tworzę pole tekstowe…

QGIS jak utworzyć pole w formularzu

… i ustalam jego wartość na podstawie wyrażenia:

aggregate(
    'data',
    'concatenate',
    "kolor",
    "id" = attribute(@parent, 'id'),
    ', ' 
)

Rezultat
W rezultacie po kliknięciu na obiekt, w formularzu otrzymuję listę kolorów, powiązanych przez wspólne id z obiektem.

Jeśli zastosujemy tu funkcje związane z tablicami (array), to możemy dowolnie kształtować i filtrować podłączone treści. Trzeba też pamiętać, że zapytania jest dynamiczne. Przy wielkich zbiorach może chwilę trwać.
Udostępnij w serwisach
Avatar photo
Tomasz Giętkowski
Artykuły: 31