Czy istnieje sposób na wybranie atrybutu z warstwy wielokąta i wstawienie wartości do wirtualnego pola warstwy punktowej za pomocą „wewnątrz” w kalkulatorze pola?
CASE
WHEN within($geometry, geometry_polygon) THEN attribute_polygon
END
qgis
field-calculator
layers
within
Morze Księżycowe
źródło
źródło
Odpowiedzi:
Połączenia przestrzenne są dostępne w kalkulatorze polowym po zainstalowaniu wtyczki refFunctions.
źródło
Po wyjęciu z pudełka kalkulator pola nie obsługuje połączeń przestrzennych między warstwami elementów. Ale jeśli spojrzysz na post NathanW w edytorze funkcji dla wyrażeń qgis , będziesz w stanie zrozumieć, że możemy napisać skrypt na temat naszej interakcji z danymi.
Poniższy skrypt pozwoli Ci wyrazić to, czego szukasz. Działa poprzez iterację przez wszystkie operacje na warstwie wielokąta, a jeśli istnieje połączenie przestrzenne, odwołaj się do danych tabelarycznych z określonej kolumny:
Przykład warstwy wielokąta
Poniżej znajduje się przykład warstwy wieloboku, którą możesz mieć. Stworzyłem również odpowiednią warstwę punktową, którą zobaczysz na ostatecznym obrazie.
Wykorzystanie wyrażenia
Uwaga: jeśli chcesz użyć osobnej kolumny, musisz zmienić drugi argument, aby pasował do nazwy kolumny w zestawie danych wielokąta. Przykład: możesz użyć kolumny „Numer_numeru”, ale musisz dopasować typ kolumny w ustawieniach kalkulatora pola.
Wynik
Możesz zobaczyć, że domyślna wartość kolumny została zastosowana tam, gdzie nie ma łączenia przestrzennego, a pozostałe dopasowały prawidłowe dane. Uwaga: skrypt, który podałem, dołączy tylko przy pierwszym meczu. Musisz stworzyć inną logikę biznesową, jeśli twoje wielokąty się nakładają.
źródło
Można to zrobić w kalkulatorze polowym z funkcją
aggregate()
. W warstwie punktowej utwórz nowe pole z wyrażeniem kalkulatora pola, takim jak to:Gdzie
layer
nazwa warstwy wieloboku jest zapisywana jak ciąg znaków,aggreagate
czy funkcja agregująca (może być używana także suma itp.), Czyexpression
pole z wartości zostanie wzięte,concatenator
łączy ciąg znaków (musi być ustawiony, nawet w tym przypadku) ifilter
opiera się na funkcjach filtrowania po wyrażeniu (w tym przypadku przecina geometrię warstwy z geometrią warstwy macierzystej).Aby uzyskać więcej informacji, sprawdź dokumentację agregującą QGIS .
Do automatycznych aktualizacji można użyć pól wirtualnych lub można ustawić wyrażenie jako wartość domyślną w ustawieniach formularza atrybutów we właściwościach warstwy ( dokumentacja ustawień formularza atrybutu ).
źródło
geometry(@parent)
) są obsługiwane tylko od QGIS 3 i późniejszych. Na wypadek, gdyby ktoś czytający to nadal korzystał z wersji 2.18 ...