Как символизировать объекты значениями NULL в градуированных символах?

15

У меня есть набор классов объектов многоугольника и атрибут из другой таблицы, к которому я присоединяюсь (один к одному) в QGIS, чтобы символизировать атрибуты в виде картограммы. Однако не все поля многоугольников имеют совпадающее поле в таблице числовых атрибутов, поэтому при создании градуированных символов существуют некоторые нулевые значения.

Из моего исследования, наиболее распространенный совет в этой ситуации - включить копию набора данных многоугольника (или некоторого другого фона), который определяет символы по умолчанию. Это работает, потому что нулевые значения не классифицируются в градуированной символике, поэтому их можно увидеть «под ними». Я приложил изображение именно этого. Темно-серые объекты не существуют в таблице соединений ( mb_percentile_isochrones_all), но существуют в таблице граничных полигонов ( mb2013_wgtn). Поэтому мне нужны два экземпляра mb2013_wgtnтаблицы, чтобы показать функции «без данных».

введите описание изображения здесь

Тем не менее, это не кажется мне элегантным. Гораздо более интуитивно понятно определить символ нулевого значения. Возможно, это может быть совершенно прозрачно, чтобы соответствовать существующему в настоящее время, или, возможно, это будет какой-то приглушенный серый - все, что захочет пользователь. Дело в том, что в настоящее время необходимо два разных слоя в содержимом, чтобы обрабатывать символы нулевых значений. Это означает, что для одновременного изменения символики всех ваших объектов (скажем, если вы хотите увеличить ширину всех границ), это необходимо выполнить дважды: один раз в свойствах объекта с градуированной символикой и один раз для «фонового» слоя, который обрабатывает нулевой символ.

Можно ли определить символ нулевого значения без использования «копии» того же слоя, который использовался для градуированной символики в QGIS (2.6.1)?

alphabetasoup
источник
Что плохого в том, что один и тот же слой дважды имеет разную символику? Возможно, используйте фильтрацию атрибутов, чтобы полигоны не появлялись в обоих слоях, если вы путаетесь в идентификации или геообработке. Являются ли несопоставленные объекты «нулевыми» в их значении соединения или у них есть значение, которое не отображается в таблице?
Майкл Стимсон
1
1. Проблема: если я хочу контролировать общие свойства объектов со значением и со значением NULL (например, цвет границы), это должно быть выполнено дважды. Это позволяет намного легче забыть изменить один из них или сделать небольшую ошибку (например, неправильный оттенок серого для контура). 2. Нет проблем с путаницей при геообработке, только символы: я хочу обозначить nullэлемент в том же слое. 3. Непревзойденные функции находятся nullв их значении соединения (как видно из таблицы атрибутов QGIS после объединения).
alphabetasoup
Это также усложняет при построении легенды включение образца «без данных», так как этот символ будет получен из другого слоя.
alphabetasoup
2
Ты прав. В диалоговом окне с градуированными символами некуда выбрать «показывать NULL-объекты, подобные этим», строки со значениями NULL просто не отображаются.
Майкл Стимсон

Ответы:

17

Как уже упоминалось @ MichaelMiles-Stimson, похоже, нет способа символизировать NULL- функции. Однако есть альтернатива, при которой вы создаете фильтр, чтобы заставить QGIS обрабатывать значения NULL как целое число, например 0. Я включил пример, где я создал 3 простых полигона, каждый из которых имеет определенное значение:

3 полигона

Таблица атрибутов

Вот градуированная символика, которую я использовал со следующей командой:

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

Окончил символику

Надеюсь это поможет!

Джозеф
источник
Это очень полезно, и я, вероятно, осуществлю это на практике. Проблема, которую я ожидаю, состоит в том, что 0 является значимым значением в моем наборе данных. Я мог бы вероятно использовать -1 или что-то. Но в любом случае это сделало бы автоматическую идентификацию разрывов классов немного громоздкой. Возможно, мне следует отправить запрос на добавление функции, поскольку теперь ясно, что обходные пути не идеальны.
alphabetasoup
Да, включение NULLзначений может быть весьма полезным. Это не очень хороший обходной путь, но вы всегда можете отправить запрос на функцию и надеяться, что он станет доступен в следующей версии :)
Joseph
6

Я знаю, что ответили, но просто чтобы дать другой вариант:

Вы можете просто оставить поле без фильтра или значения (я знаю, что оно работает для CATEGORIZED или RULE BASED):

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

введите описание изображения здесь

Я использую QGIS 2.10, и он работает.

Маркос Сайто
источник
Всегда приятно узнать больше методов решения или обхода проблемы! +1
Иосиф
1
Воодушевление увидеть это улучшение с версии 2.6, верно? Можете ли вы подтвердить, что это работает, когда нулевые значения приходят из объединенной таблицы?
алфавитное представление
1
Пара замечаний по этому поводу. Пустые символы или символы NULL в символике на основе правил будут применяться ко ВСЕМ функциям. Правила применяются сверху вниз, поэтому они могут быть наложены на другое правило, но также будет указано значение NULL. Важно, если это сильная символика. Вы также можете «генерировать» свои правила, сначала создав их в символике «Категоризованный» или «Градуированный», а затем переключившись на правила, основанные на
правилах
@Vesanto, я не знаю, получил ли я это, или это проблема. В моем случае я добавляю значения Z в SHP из контурных линий, которые изначально не имели значений Z (Z = NULL). Я установил объекты со значениями NULL на красный, а объекты с любым значением - на черный. При редактировании, как только я устанавливаю значение Z, функция (контурная линия) меняется с красного на черный, поэтому я знаю, что мне еще предстоит установить значение Z.
Маркос Сайто
@ Маркос, это не будет проблемой в вашем случае. Но допустим, что линия была красной для начала, и вы хотели сделать ее невидимой, когда она больше не будет нулевой. Это не сработает.
ХейккиВесанто,
4

Как и в случае с другими пользователями, лучший вариант - использовать символы на основе правил. Чтобы не создавать правила вручную:

  1. Измените тип символа на Градуированный .
  2. Определите символ столбца, цвета, интервалы и т. Д. В соответствии с нормой Градуированные символы с нулевыми значениями не отображаются
  3. Измените тип символа с Graduated на Rule-based . Символы, определенные на предыдущем шаге, будут перенесены. Нажмите кнопку добавления символа и выберите ELSE . Измените стиль соответствующим образом. Этот класс символов ELSE будет перехватывать любые значения, которые еще не были символизированы, включая нулевые значения. Добавление ELSE универсального символа
  4. Нажмите ОК. Нулевые значения теперь будут символизированы. Градуированные символы, включая нулевые значения

(Проверено в QGIS 3.6.0)

Джесси Рейли
источник
просто и полезно. Благодарю. Я бы посоветовал, чтобы в QGIS была опция исключения значений для градуированной классификации. Я столкнулся с некоторой путаницей при попытке классифицировать значения нодаты, помеченные как -1, -999 ... и т. Д. (Используя QGIS 3.14 LTR). К счастью, QGIS автоматически игнорирует нулевые значения, по крайней мере, при выполнении градуированных символов.
Иван Сантьяго