如何在分级符号体系中用NULL值符号化特征?


15

我有一个面要素数据集,还有一个我在QGIS中(一对一)加入(来自另一个表)的属性,以便将这些属性符号化为一个Choropleth贴图。但是,并不是所有的多边形字段在数值属性表中都有匹配的字段,因此在生成带刻度的符号系统时会有一些空值。

根据我的研究,在这种情况下,最常见的建议是包括定义默认符号系统的面数据集(或其他背景)的副本。之所以可行,是因为空值未在分级符号体系中分类,因此可以在它们的下面看到。我已经附上了这张照片。联接表(mb_percentile_isochrones_all)中不存在深灰色要素,但边界多边形表(mb2013_wgtn)中存在深灰色要素。因此,我需要mb2013_wgtn表的两个实例以显示“无数据”功能。

在此处输入图片说明

但是,这对我来说似乎并不优雅。更直观的是定义一个空值符号。也许这可能是完全透明的,以与当前存在的内容保持一致,或者可能是某种柔和的灰色-无论用户想要什么。关键是,目前为了处理空值的符号体系,内容需要两个不同的层。这意味着要同时更改所有要素的符号系统(例如,如果要增加所有边框的宽度),则必须处理两次:一次在带有渐变符号系统的要素属性中,以及一次用于处理空符号的“背景”层。

是否可以在QGIS(2.6.1)中定义“空”值符号而无需使用与分级符号系统相同层的“副本”?


同一层两次具有不同的符号体系有什么问题?也许使用属性过滤,以便在标识或地理处理中感到困惑时,两面都不会出现多边形。不匹配的要素的联接值是“ null”还是表中未出现的值?
Michael Stimson 2015年

1
1.问题:如果我想用一个值和一个空值(例如边框颜色)控制要素的公共属性,则必须执行两次。这样就更容易忘记更改其中之一,或者犯一些轻微的错误(例如,轮廓的灰色阴影不正确)。2.关于地理处理的混乱,没有任何问题,只是符号系统:我想null在同一层中对要素进行符号化。3.无与伦比的特征null在于它们的联接值(如QGIS属性表联接后所示)。
Alphabetasoup15年

这也使构建图例时包含“无数据”样本变得更加困难,因为该符号将来自不同的图层。
alphabetasoup

2
你是对的。在分级符号对话框中无处选择“显示类似NULL的功能”,根本不显示具有NULL值的行。
Michael Stimson 2015年

Answers:


17

正如@ MichaelMiles-Stimson已经提到的那样,似乎没有一种符号化NULL功能的方法。但是,还有一种替代方法,您可以创建一个过滤器来强制QGIS将NULL值视为整数,例如0。

3个多边形

属性表

这是我在以下命令中使用的分级符号:

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

毕业的符号学

希望这可以帮助!


这很有帮助,我可能会付诸实践。我预期的问题是0在我的数据集中是一个有意义的值。我可能会使用-1之类的东西。但是,无论哪种情况,这都将使自动识别班级休息变得有些笨拙。鉴于现在很清楚解决方法不理想,也许我应该为此提交功能请求。
Alphabetasoup15年

是的,包括NULL值可能非常有用。这不是一个很不错的解决方法,但是您可以随时提交功能请求,并希望它在下一版本中可用:)
Joseph

6

我知道已经回答了,但只提供了另一个选择:

您可以只保留没有过滤器或值的字段(我知道它适用于分类或基于规则):

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

在此处输入图片说明

我正在使用QGIS 2.10,它可以工作。


总是很高兴知道更多解决或解决问题的方法!+1
约瑟夫

1
鼓励看到自2.6以来的改进,对吗?当空值来自联接表时,您可以确认它是否有效吗?
Alphabetasoup15年

1
尽管有一些注意事项。基于规则的符号体系中的空白或NULL符号体系将应用于所有要素。这些规则是从上到下应用的,因此它可能会被另一个规则覆盖,但是NULL也将存在。如果它是很强的符号学,则很重要。您还可以通过首先在分类或
分级

@Vesanto,我不知道我是否知道它,还是有问题。在我的情况下,我将Z值添加到轮廓线组成的SHP中,该轮廓线最初没有Z值(Z = NULL)。我已将NULL值的功能设置为红色,将任何值的功能设置为黑色。编辑时,一旦我设置了Z值,特征(轮廓线)就会从红色变为黑色,这样我就知道我还需要设置Z值。
Marcos Saito 2015年

@Marcos在您的情况下这不是问题。但是可以说这行是红色的,一旦它不再为null,就想将其变为不可见。那行不通。
HeikkiVesanto

4

类似于其他用户所说的,最好的选择是使用基于规则的符号。为避免手动创建规则:

  1. 将符号类型更改为“ Graduated”
  2. 按照常规定义符号列,颜色,间隔等 刻度符号,不显示空值
  3. 将符号类型从“ 渐变”更改为“基于规则”。上一步中定义的符号将被保留。单击添加符号按钮,然后选择ELSE。适当更改样式。该ELSE符号类将捕获尚未符号化的所有值,包括空值。 添加ELSE通用符号
  4. 单击确定。空值现在将被符号化。 刻度符号,包括空值

(在QGIS 3.6.0中测试)


简单实用。谢谢。我建议QGIS对于分级分类应该有一个排除值选项。尝试使用标记为-1,-999 ...等的nodata值进行分类时,我遇到了一些混乱(使用QGIS 3.14 LTR)。幸运的是,QGIS至少在进行分级符号系统设计时会自动忽略空值。
伊万·圣地亚哥
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.