Jak symbolizować obiekty wartościami NULL w stopniowanej symbolice?

15

Mam zestaw danych cech wielokąta i atrybut z innej tabeli, do której dołączam (jeden do jednego) w QGIS, aby symbolizować atrybuty jako mapę choropleta. Jednak nie wszystkie pola wielokątów mają pasujące pola w tabeli atrybutów liczbowych, dlatego podczas tworzenia stopniowanej symboliki istnieją pewne wartości zerowe.

Z moich badań najczęstszą radą w tej sytuacji jest dołączenie kopii zestawu danych wielokąta (lub innego tła), który definiuje domyślną symbolikę. Działa to, ponieważ wartości zerowe nie są klasyfikowane w stopniowanej symbolice, więc można zobaczyć „pod nimi”. Dołączyłem obraz dokładnie tego. Ciemnoszare elementy nie istnieją w tabeli łączenia ( mb_percentile_isochrones_all), ale istnieją w tabeli wielokątów granicznych ( mb2013_wgtn). Potrzebuję więc dwóch wystąpień mb2013_wgtntabeli, aby pokazać funkcje „brak danych”.

wprowadź opis zdjęcia tutaj

Nie wydaje mi się to jednak eleganckie. Znacznie bardziej intuicyjne byłoby zdefiniowanie symbolu wartości zerowej. Być może byłoby to całkowicie przejrzyste, aby było spójne z tym, co obecnie istnieje, a może byłby to jakiś wyciszony szary - cokolwiek użytkownik chce. Chodzi o to, że obecnie potrzebne są dwie różne warstwy w treści, aby obsłużyć symbolikę wartości zerowych. Oznacza to, że aby zmienić symbolikę wszystkich funkcji jednocześnie (powiedzmy, jeśli chcesz zwiększyć szerokość wszystkich ramek), należy to zrobić dwukrotnie: raz we właściwościach funkcji z symboliką stopniowaną oraz jeden raz dla warstwy „tła”, która obsługuje symbol zerowy.

Czy w QGIS (2.6.1) można zdefiniować symbol wartości „zerowej” bez użycia „kopii” tej samej warstwy użytej dla stopniowanej symboliki?

zupa alfabetyczna
źródło
Co jest złego w dwukrotnym korzystaniu z tej samej warstwy z inną symboliką? Być może użyj filtrowania atrybutów, aby w obu warstwach nie pojawiał się wielokąt, jeśli masz problemy z identyfikacją lub geoprzetwarzaniem. Czy niedopasowane funkcje mają wartość „null” w wartości łączenia, czy też mają wartość, która nie pojawia się w tabeli?
Michael Stimson
1
1. Problem: jeśli chcę kontrolować wspólne właściwości funkcji za pomocą wartości i wartości zerowej (np. Kolor obramowania), należy to wykonać dwukrotnie. Dzięki temu łatwiej zapomnieć o zmianie jednego z nich lub popełnić niewielki błąd (np. Niewłaściwy odcień szarości dla konturu). 2. Żadnych problemów związanych z pomieszaniem w geoprzetwarzaniu, tylko symbolika: chcę symbolizować nullobiekt na tej samej warstwie. 3. Niedopasowane funkcje mają nullwartość łączenia (jak widać w tabeli atrybutów QGIS po złączeniu).
alphabetasoup
Utrudnia to także budowanie legendy w celu włączenia próbki „bez danych”, ponieważ symbol ten pochodziłby z innej warstwy.
alphabetasoup
2
Masz rację. Nie ma miejsca, aby wybrać „pokaż takie funkcje NULL” w oknie dialogowym z podziałką, wiersze z wartościami NULL po prostu nie są wyświetlane.
Michael Stimson

Odpowiedzi:

17

Jak już wspomniano @ MichaelMiles-Stimson, wydaje się, że nie ma sposobu na symbolizowanie funkcji NULL . Istnieje jednak alternatywa, w której można utworzyć filtr, aby zmusić QGIS do traktowania wartości NULL jako liczb całkowitych, takich jak 0. Podałem przykład, w którym utworzyłem 3 proste wielokąty o określonej wartości:

3 wielokąty

Tabela atrybutów

Oto Graduated Symbology, którego użyłem z następującą komendą:

case when "Some_Value" IS NULL then 0 else "Some_Value" end

Stopniowana symbolika

Mam nadzieję że to pomoże!

Joseph
źródło
Jest to bardzo pomocne i prawdopodobnie zastosuję to w praktyce. Problem przewiduję, że 0 jest znaczącą wartością w moim zestawie danych. Prawdopodobnie mógłbym użyć -1 lub czegoś takiego. Ale w obu przypadkach spowodowałoby to, że automatyczna identyfikacja podziałów klas byłaby nieco niewygodna. Być może powinienem przesłać prośbę o tę funkcję, ponieważ teraz jest jasne, że obejścia są mniej niż idealne.
alphabetasoup
Tak, w tym NULLwartości mogą być bardzo przydatne. To nie jest dość obejście, ale zawsze możesz przesłać żądanie funkcji i mam nadzieję, że stanie się ono dostępne w następnej wersji :)
Joseph
6

Wiem, że udzielono odpowiedzi, ale aby dać inną opcję:

Możesz po prostu opuścić pole bez filtra lub wartości (wiem, że to działa w przypadku KATEGORII lub OPARTEJ ZASADY):

http://docs.qgis.org/2.0/uk/docs/training_manual/vector_classification/classification.html

wprowadź opis zdjęcia tutaj

Używam QGIS 2.10 i działa.

Marcos Saito
źródło
Zawsze miło jest poznać więcej metod rozwiązywania problemów lub rozwiązywania problemów! +1
Joseph
1
Zachęcanie do zobaczenia tej poprawy od wersji 2.6, prawda? Czy możesz potwierdzić, że działa, gdy wartości zerowe pochodzą z połączonej tabeli?
alphabetasoup
1
Kilka uwag na ten temat. Symbol pusty lub symbol NULL w symbolice opartej na regułach zostanie zastosowany do WSZYSTKICH elementów. Reguły są stosowane od góry do dołu, więc może być nałożone na inną regułę, ale NULL również tam będzie. Ważne, jeśli jest to silna symbolika. Możesz także „wygenerować” swoje reguły, najpierw tworząc je w symbolice
skategoryzowanej
@ Vesanto, nie wiem czy go dostałem, czy jest to problem. W moim przypadku dodaję wartości Z do SHP wykonanego z linii konturowych, które pierwotnie nie miały wartości Z (Z = NULL). Ustawiłem funkcje z wartościami NULL na czerwone, a te o dowolnej wartości na czarne. Podczas edycji, jak tylko ustawię wartość Z, funkcja (linia konturu) zmienia kolor z czerwonego na czarny, w ten sposób znam te, dla których mam jeszcze ustawić wartość Z.
Marcos Saito,
@Marcos to nie będzie problem w twoim przypadku. Ale powiedzmy, że linia była na początku czerwona i chciałeś uczynić ją niewidoczną, gdy nie będzie już zerowa. To by nie działało.
HeikkiVesanto
4

Podobnie jak powiedzieli inni użytkownicy, najlepszą opcją jest użycie symboli opartych na regułach. Aby uniknąć ręcznego tworzenia reguł:

  1. Zmień typ symbolu na Stopniowy .
  2. Zdefiniuj kolumnę symbolu, kolory, interwały itp. Zgodnie z normą Symbole stopniowane, z wartościami zerowymi nie pokazanymi
  3. Zmień typ symbolu z stopniowanego na oparty na regułach . Symbole zdefiniowane w poprzednim kroku zostaną przeniesione. Kliknij przycisk dodaj symbol i wybierz ELSE . Zmień styl odpowiednio do potrzeb. Ta klasa symboli ELSE przechwytuje wszystkie wartości, które nie zostały jeszcze symbolizowane, w tym wartości null. Dodanie ELSE symbolu catch-all
  4. Kliknij OK. Wartości zerowe będą teraz symbolizowane. Symbole stopniowane, w tym wartości zerowe

(Testowane w QGIS 3.6.0)

Jesse Reilly
źródło
proste i przydatne. Dzięki. Sugerowałbym, że QGIS powinien mieć opcję wykluczania wartości dla klasyfikacji stopniowej. Wpadłem w pewne zamieszanie podczas próby klasyfikacji za pomocą wartości nodata oznaczonych jako -1, -999 ... itd. (Przy użyciu QGIS 3.14 LTR). Na szczęście QGIS automatycznie ignoruje wartości zerowe przynajmniej podczas wykonywania stopniowanej symboliki.
Iván Santiago,