3.3. 课: 分类

标注是传递信息的好方法,比如各个地方的名称,但它们不能用于所有内容。例如,假设有人想知道每个 landuse 区域的用途。使用标注,您将得到以下结果:

../../../_images/bad_landuse_labels.png

这使得地图上的标注很难阅读,即使地图上有许多不同的土地利用区域,也会让人不知所措。

本课目标: 学习如何有效地对矢量数据进行分类。

3.3.1. basic 跟我做: 对定类数据进行分类

  1. 打开 landuse 图层的 图层属性 对话框

  2. 转到 符号化 选项卡

  3. 单击显示 单一符号 的下拉列表,并将其更改为 分类:

    ../../../_images/categorised_styles.png
  4. 在新面板,将 更改为 landuse ,将 颜色渐变 更改为 随机颜色

  5. 单击标有 分类 字样的按钮

    ../../../_images/categorised_style_settings.png
  6. 单击 确定

    您将看到类似如下的变化:

    ../../../_images/categorisation_result.png
  7. 单击 图层 面板 landuse 旁边的箭头 (或加号),您将看到相应的类别说明:

    ../../../_images/categories_explained.png

    现在,我们的 landuse 多边形是彩色的,并且被分类,在类别中相同土地利用的区域具有相同的颜色。

  8. 如果需要,可以通过双击 图层 面板或 图层属性 对话框中的相关颜色块来更改每块土地利用区域的符号:

    ../../../_images/change_layer_color.png

请注意,有一个类别为空:

../../../_images/empty_category.png

此空类别用于为未定义 landuse 值或具有 NULL 值的任何对象着色。保留此空类别用处很大,这样具有 NULL 值的区域在地图上仍会显示。您可能希望将颜色更改为更明显地表示空白或 NULL 值。

请记住随时保存地图,以免丢失所有来之不易的更改!

3.3.2. basic 试一试 更多分类

使用上面学习的知识对 buildings 图层进行分类。根据 building 字段设置分类,并使用 Spectral - 光谱 颜色渐变。

备注

请记住要放大城市范围才能看到结果。

3.3.3. moderate 跟我做: 比值分类

分类有四种类型: 定类次序区间比值

定类 分类中,对象被分类的类别是基于名称的,并且他们没有秩序。例如:城镇名称、地区代码等。用于定类数据的符号不应意指任何排序或数量。

  • 对于点,我们可以使用不同形状的符号。

  • 对于多边形,我们可以使用不同类型的图案填充或不同的颜色 (避免混合明暗颜色)。

  • 对于线,我们可以使用不同的虚线图案、不同的颜色 (避免混合明暗颜色) 以及沿线的不同符号。

次序 分类中,类别是按一定顺序排列的。例如,世界城市根据其在世界贸易、旅游、文化等方面的重要性进行排名。用于次序数据的符号应意指排序,而不是数量。

  • 对于点,可以使用由浅色到深色的符号。

  • 对于多边形,可以使用渐变颜色 (从浅到深)。

  • 对于线,可以使用渐变颜色 (从浅到深)。

区间 分类中,数字是以正值、负值和零值为标度的。例如:海平面以上或以下的高度,以摄氏度为单位的温度。用于区间数据的符号应意指排序和数量。

  • 对于点,可以使用大小不同 (从小到大) 的符号。

  • 对于多边形,可以使用渐变颜色 (从浅到深) 或添加不同大小的几何图形。

  • 对于线,可以使用粗细 (从细到粗)。

比值 分类中,数字的范围仅包含正值和零值。例如:绝对零度 (0度开尔文) 以上的温度、与某一点的距离、给定街道每月的平均交通量等。用于比值数据的符号应意指排序和数量。

  • 对于点,可以使用大小不同 (从小到大) 的符号。

  • 对于多边形,可以使用渐变颜色 (从浅到深) 或添加不同大小的几何图形。

  • 对于线,可以使用粗细 (从细到粗)。

在上面的示例中,我们使用定类分类根据 landuse 属性为 landuse 图层中的每条记录着色。现在我们将使用比值分类法按区域对记录进行分类。

我们将对该图层进行重新分类,如果不保存现有分类,它们将丢失。要储存当前分类,请执行以下操作:

  1. 打开图层的属性对话框

  2. 单击 样式 下拉菜单中的 保存样式... 按钮。

  3. 选择 重命名当前样式... ,输入 land usage ,然后按 确定 按钮。

    类别及其符号现在已保存在图层的属性中。

  4. 现在进入 样式 下拉菜单并单击 增加... ,创建一个名为 ratio 的新样式。这将储存新的分类。

  5. 关闭 图层属性 对话框

我们想按大小对 landuse 区域进行分类,但有一个问题:它们没有大小字段,所以我们必须创建一个。

  1. 打开 landuse 图层的属性表。

  2. 单击 toggleEditing 切换编辑模式 按钮进入编辑模式

  3. 使用 newAttribute 新建字段 按钮添加一个新的小数列,名称是 AREA

    ../../../_images/add_area_column.png
  4. 单击 确定

    执行完毕后将添加新字段 (位于表格的最右侧,您可能需要使用水平滚动条才能看到)。然而,目前它未填充内容,只是有很多 NULL 值。

    为了解决此问题,需要计算面积。

    1. 使用 calculateField 按钮打开字段计算器。

      您将看到以下对话框:

      ../../../_images/calculate_field_dialog.png
    2. 勾选 checkbox 更新现有字段

    3. 在字段下拉菜单中选择 AREA

      ../../../_images/field_calculator_top.png
    4. 表达式 选项卡下,展开列表中的 几何图形 函数组,然后查找 $area

    5. 双击$area,使其出现在 表达式 字段中

      ../../../_images/geometry_area_select.png
    6. 单击 确定

    7. 在属性表滚动到的 AREA 字段,您会注意该字段已填充值 (您可能需要单击列标题来刷新数据)。

    备注

    这些区域遵守工程的面积单位设置,因此它们可能是平方米或平方度。

  5. saveEdits 保存编辑,然后使用 toggleEditing 切换编辑模式 退出编辑模式

  6. 关闭属性表

现在有了数据,让我们用它们来渲染 landuse 图层。

  1. 打开 landuse 图层的 图层属性 对话框的 符号化 选项卡

  2. 将分类样式从 分类 更改为 渐进

  3. 将该 更改为 AREA

  4. 颜色渐变 下拉列表中,选择 新建颜色渐变... 选项:

    ../../../_images/area_gradient_select.png
  5. 选择 梯度 (如果尚未选择),然后单击 确定 。您将看到如下对话框:

    ../../../_images/gradient_color_select.png

    您将使用它来表示面积,小区域作为 颜色 1 ,大区域作为 颜色 2

  6. 选择合适的颜色

    在本例中,结果如下所示:

    ../../../_images/gradient_color_example.png
  7. 单击 确定

  8. 您可以通过选择 颜色渐变 下拉列表中的 保存颜色渐变... 来保存颜色渐变。为颜色渐变选择合适的名称,然后单击 保存 。现在,您可以在 全部颜色渐变 列表中轻松选择相同的颜色渐变。

  9. 模式 中,选择 equalCount 等数量(分位数)

  10. 单击 分类 按钮

    现在,您会有如下内容:

    ../../../_images/landuse_gradient_selected.png

    其他一切都保持原样。

  11. 单击 确定:

../../../_images/gradient_result_map.png

3.3.4. moderate 试一试 优化分类

  • 更改 模式 的值,直到获得有意义的分类。

3.3.5. hard 跟我做: 基于规则的分类

组合多个分类条件通常很有用,但不幸的是,正常分类只考虑一个属性。此时就可以考虑使用基于规则的分类。

在本课,我们将以一种更容易识别 Swellendam 市与其他居住区及其他 landuse 类型 (基于其面积) 的方式表示 landuse 图层。

  1. 打开 landuse 图层的 图层属性 对话框

  2. 切换到 符号化 选项卡

  3. 将分类样式切换为 基于规则

    QGIS将自动显示表示该图层当前应用的分类规则。例如,在完成上述练习后,您可能会看到如下内容:

    ../../../_images/rule_based_classification.png
  4. 单击并拖动以选择所有规则

  5. 使用 symbologyRemove 移除所选规则 按钮移除所有现有规则

现在让我们添加自定义规则。

  1. 单击 symbologyAdd 添加规则 按钮

  2. 然后出现 编辑规则 对话框

  3. 输入 Swellendam city 作为 标注

  4. 单击 过滤器 文本区域旁边的 expression 按钮,打开 表达式字符串构建器

  5. 输入条件 "name" = 'Swellendam' 并验证

    ../../../_images/query_builder_example.png
  6. 返回 编辑规则 对话框,为其指配较深的灰蓝色,表示该城镇在该地区的重要性,并移除边界

    ../../../_images/rule_style_result.png
  7. 确定

  8. 重复上述步骤以添加以下规则:

    1. Other residential 标注的条件为 "landuse" = 'residential' AND "name" <> 'Swellendam' 。选择浅蓝灰色 :guilabel:`填充颜色

    2. Big non residential areas 标注的条件为 "landuse" <> 'residential' AND "AREA" >= 605000 。选择中绿色。

      ../../../_images/criterion_refined_midway.png

      这些过滤条件是具有排他性的,因为它们排除了地图上的其他区域 (小于605000 (平方米) 的非住宅区不包括在任何规则中)。

    3. 我们将使用标注为 Small non residential areas 的新规则来捕捉其余要素。选择 radioButtonOn 否则 ,而不是过滤表达式。给这个类别一个合适的淡绿色。

      ../../../_images/criterion_else.png

    您的规则现在应该如下所示:

    ../../../_images/criterion_refined_list.png
  9. 应用此符号

您的地图将如下所示:

../../../_images/rule_based_map_result.png

现在,你有了一张地图,其中 Swellendam 是最突出的住宅区,其他非住宅区则根据其面积进行着色。

3.3.6. In Conclusion

符号化允许我们以易于阅读的方式表示图层的属性。它允许我们和地图审阅人使用我们选择的任何相关属性来了解要素的重要性。根据面临的问题,您将应用不同的分类技术来解决这些问题。

3.3.7. What's Next?

现在我们有了一张漂亮的地图,但如何将其从QGIS中提取出来,并转换成可以打印出来的格式,或者制作成图像或PDF呢?这是下一课的主题!