May 20, 2024

Как отобразить отсутствие данных?

С новыми версиями QGIS уходят старые баги, но зачастую добавляются новые баги и фичи.

Дано:

если у вас есть слой с полигонами с показателем, который вы хотите отобразить, но у вас в этом показателе также есть значения NULL, то есть полигоны, по которым данных этого показателя нет.

Пример:

Я хочу, чтобы такие значения отображались отдельно в легенде и на карте визуализировались отдельно.

Раньше это работало так - вы делаете классификацию по значениям, задаете новый класс для значения 0 и отображаете его, он показывается на карте.

Сейчас значения NULL вообще не попадают в классификации.
Как сделать так, чтобы все красиво отображалось? покажу несколько вариантов решения

1) Быстро и в целом логично

Используйте способ визуализации по уникальным значениям. Произойдет распределение по уникальным классам, и отдельно будет выделена группа с прочими значениями - в нее и попадет NULL.

В этом случае полигоны с отсутствующей долей растительности будут помечаться красным и отображаться на карте.

2) Технически понятно, логически не очень

Суть: взять и заменить все NULL на 0 или на другие значения, которые точно не смогут встретиться у атрибута.

Например, если у вас атрибут представляет собой долю растительности, то он принимает значения от 0 до 100%, и если вы вместо NULL напишите -999, то такие полигоны точно будут отмечены отдельно, так как в интервал 0-100 не попадают.

Как сделать:

1) Зайти в атрибутивную таблицу
2) Включить режим редактирования

3) Отсортировать столбец с атрибутами так, чтобы видеть все случаи NULL.

4) Написать вместо них другое значение. Это может быть 0, может быть -9999 например.

Если случаев с таким значением много, то лучше выбрать все эти значения с помощью выборки по условию:

А после через калькулятор полей проставить вместо NULL другое значение:

Далее делать классификацию как обычно:

3) Для более продвинутых, но логически самый верный

в настройках визуализации слоя нажать на эпсилон и зайти в меню, где мы будем прописывать, на основе каких значений производится классификация.

прописываем там такое.

CASE when "percent" is null then 0
when "percent" is not null then "percent"
end

конструкция CASE WHEN ... THEN ... END используется как условный оператор.
Что мы просим тут сделать qgis: если значение доли пустое ("percent" is null) то просим чтобы вместо него считался например -999. Во всех других случаях считаем само значение percent.

"percent" может в вашем случае отличаться и называться по-другому - как вы сами назвали

В чем логичность этого варианта: мы не меняем фактические значения, а просто говорим программе, что хотим, чтобы она считала NULL как определенное число, которое мы далее прописываем как отсутствие данных.

Фактически в этом способе ничего не редактируется