2.4. 课: 符号化

图层的符号是其在地图上的视觉外观。与其他用空间方面表示数据的方法相比,使用GIS,您可以对正在使用的数据进行动态可视化表示。

因此,地图的视觉外观 (取决于各个图层的符号) 非常重要,您制作的地图的最终用户需要能够轻松查看地图所代表的内容。同样重要的是,您需要在使用数据的同时对其进行探索,而优质的符号非常有用。

换句话说,使用合适的符号并不是一种奢侈,也不是一种享受。事实上,正确使用 GIS 并制作其他人能够使用的地图和信息对您来说至关重要。

本课目标: 能够为任何矢量图层创建任何符号。

2.4.1. basic 跟我做: 改变颜色

要更改图层的符号,请打开其 图层属性 。让我们从更改 landuse 图层的颜色开始。

  1. 在图层列表中的 landuse 图层上右键单击。

  2. 在出现的菜单中选择菜单项 属性...

    备注

    默认情况下,也可以通过双击图层列表中的图层来访问图层的属性。

    小技巧

    图层 面板顶部的 symbology 按钮将打开 图层样式 面板。可以使用此面板更改图层的某些属性:默认情况下,将立即应用更改!

  3. 图层属性 窗口,选择 symbology 符号化 选项卡:

    ../../../_images/layer_properties_style.png
  4. 单击 颜色 标注旁边的颜色选择按钮,将出现标准颜色对话框。

  5. 选择灰色,然后单击 确定

  6. 图层属性 窗口再次单击 确定 ,您将看到颜色更改已应用于图层。

2.4.2. basic 试一试

water 图层的颜色更改为浅蓝色,请尝试使用 图层样式 面板而不是 图层属性 菜单。

2.4.3. basic 跟我做: 更改符号构造

到目前为止,已经非常好,但图层的符号化不仅仅是颜色。接下来,我们希望消除不同土地利用区域之间的界线,以便减少地图在视觉上的杂乱。

  1. 打开 landuse 图层的 图层属性 窗口。

    symbology 符号化 选项卡下,将看到与之前相同类型的对话框。然而,这一次,您所做的不仅仅是快速更改颜色。

  2. 在符号图层类型中,展开 填充 下拉列表并选择 简单填充 选项。

  3. 单击 描边样式 下拉列表。目前,应该显示一条短线和 实线 字样。

  4. 将此更改为 无描边

    ../../../_images/simple_fill_selected.png
  5. 单击 确定

现在, landuse 图层在各区块之间没有任何线条。

2.4.4. basic 试一试

  • 再次更改 water 图层的符号,使其具有深蓝色的轮廓。

  • rivers 图层的符号更改为更合理的水道表示方法。

记住:您可以使用 symbology 打开图层样式面板 按钮,立即查看所有更改。该面板还允许您在对图层进行符号化时撤消单个更改。

2.4.5. moderate 跟我做: 基于比例的可见性

有时,您会发现某个图层不适合给定的比例。例如,所有大陆数据集的细节可能都很低,在街道层面上也不是很准确。当这种情况发生时,您希望能够隐藏不恰当比例的数据集。

在此示例,我们可能会决定在小比例内隐藏建筑物,例如这张地图...

../../../_images/buildings_small_scale.png

... 不是很有用。在这种比例下,建筑物很难区分。

要启用基于比例的渲染,请执行以下操作:

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

  2. 激活 rendering 渲染 选项卡。

  3. 通过单击标注为 依赖可见比例 的复选框,启用基于比例的渲染:

  4. 最小比例 更改为 1:10000

    ../../../_images/scale_dependent_visibility.png
  5. 单击 确定

通过放大和缩小地图测试其效果,注意 buildings 图层何时消失和重新出现。

备注

可以使用鼠标滚轮放大增量。或者,使用缩放工具缩放到窗口:

zoomIn zoomOut

2.4.6. moderate 跟我做: 添加符号图层

现在您已经知道如何更改图层的简单符号,下一步是创建更复杂的符号。QGIS允许您使用符号图层来执行此操作。

  1. 返回 landuse 图层的符号属性面板 (通过在符号图层树中单击 简单填充)。

    在本例中,当前符号没有轮廓 (即,它使用 无描边 边框样式)。

    ../../../_images/simple_fill_selected.png
  2. 在树中选择 填充 级别,然后单击 symbologyAdd 添加符号图层 按钮。对话框将更改为如下所示,并添加了一个新的符号图层:

    ../../../_images/new_symbol_layer.png

    例如,它的颜色可能会有些不同,但无论如何您都会进行修改。

现在有了第二个符号图层。作为单色,它会完全隐藏前一种符号。另外,它有我们不想要的 实线 边框样式。显然,这个符号必须更改。

备注

请不要混淆地图图层和符号图层,这一点非常重要。地图图层是已加载到地图中的矢量 (或栅格),符号图层是用于表示地图图层的符号的一部分。本课程通常将地图图层称为图层,但为了避免混淆,符号图层始终称为符号图层。

选择新增加的 简单填充 符号图层:

  1. 如前所述,将边框样式设置为 无描边

  2. 将填充样式更改为 均匀填充无填充 。例如:

    ../../../_images/new_fill_settings.png
  3. 单击 确定

现在您可以查看结果,并根据需要进行调整。您甚至可以添加多个额外的符号图层,并通过这种方式为您的图层创建一种纹理。

../../../_images/multiple_symbol_layers.png

好有趣啊!但它可能因为颜色太多而无法在真实地图中使用...

2.4.7. moderate 试一试

记住必要时放大,使用上述方法为 buildings 图层创建一个简单但不分散注意力的纹理。

2.4.8. moderate 跟我做: 排序符号层级

渲染符号图层时,它们也会按顺序渲染,类似于渲染不同地图图层的方式。这意味着在某些情况下,一个符号中包含多个符号图层可能会导致意外的结果。

  1. roads 图层添加一个额外的符号图层 (使用上面演示的添加符号图层的方法)。

  2. 给基线一个 1.5描边宽度 和黑色。

  3. 给新添加的最上面的符号图层 0.8 的厚度和白色。

您会注意到发生这种情况:

../../../_images/bad_roads_symbology.png

好吧,roads 现在有了类似 街道 的符号,但您会看到在每个十字路口的线是相互重叠的,这根本不是我们想要的结果!

为了防止这种情况发生,可以对符号层级进行排序,从而控制不同符号图层的渲染顺序。

要更改符号图层的顺序,请执行以下操作:

  1. 在符号图层树中选择最顶层的 线 图层。

  2. 单击窗口右下角 高级 ► 符号层级...

    ../../../_images/symbol_levels_main_dialog.png

    这将打开如下对话框:

    ../../../_images/symbol_levels_dialog.png
  3. 选中 checkbox 启用符号层级 。然后,可以通过输入相应的层级编号来设置每个符号的图层顺序。0是底图层。

    此例中,我们只想激活该选项,如下所示:

    ../../../_images/correct_symbol_layers.png

    这将渲染粗黑线框上面的白线:

  4. 单击两次 确定 ,返回地图。

    现在,地图将如下所示:

    ../../../_images/better_roads_symbology.png

完成后,请记住保存符号,以免将来再次更改符号时丢失您的工作。通过单击 图层属性 对话框底部的 保存样式... 按钮,可以保存当前符号样式。我们将使用 QGIS QML 格式样式文件 格式。

solution/styles/better_roads.qml 文件夹保存您的样式。通过单击 加载样式... 按钮,可以随时加载以前保存的样式。在更改样式之前,请记住,要替换的任何未保存的样式都将丢失。

2.4.9. moderate 试一试

再次更改 roads 图层的外观。

请设置使道路变窄变黄,轮廓呈浅灰色,中间是细黑色的线。请记住,您可能需要通过 高级 ► 符号层级... 对话框更改图层渲染的顺序。

../../../_images/target_road_symbology.png

2.4.10. hard 试一试

符号层级也适用于分类图层 (即具有多个符号的图层)。由于我们还未涉及分类,您将使用一些基本的预分类数据。

  1. 创建新工程并仅添加 roads 数据集。

  2. exercise_data/styles 文件夹中提供的应用样式文件 advanced_levels_demo.qml 应用于图层。这可以通过 图层属性 对话框底部的 样式 ► 加载样式... 组合框来完成。

  3. 放大到 Swellendam 区域。

  4. 使用符号图层,确保图层的轮廓按照下图相互融合:

    ../../../_images/correct_advanced_levels.png

2.4.11. moderate 跟我做: 符号图层类型

除了设置填充颜色和使用预定义图案外,还可以完全使用不同的符号图层类型。到目前为止,我们唯一使用的类型是 简单填充 类型。更高级的符号图层类型允许您进一步自定义符号。

每种类型的矢量 (点、线和多边形) 都有自己的一组符号图层类型。首先,我们将查看可用于点的类型。

点符号图层类型

  1. 取消勾选除 places 之外的所有图层。

  2. 更改 places 图层的符号属性:

    ../../../_images/places_layer_properties.png
  3. 您可以通过在符号图层树中选择 简单标记 图层,然后单击 符号图层类型 下拉列表,访问各种符号图层类型:

    ../../../_images/marker_type_dropdown.png
  4. 研究可以使用的各种选项,并选择一个您认为合适的样式符号。

  5. 如果不确定,请使用带有白色边框和浅绿色填充的圆形 简单标记大小3.00描边宽度0.5

线符号图层类型

要查看可用于线数据的各种选项,请执行以下操作:

  1. roads 图层最顶层符号图层的 符号图层类型 更改为 标记线

    ../../../_images/change_to_marker_line.png
  2. 在符号图层树中选择 简单标记 图层,更改符号属性以匹配此对话框中的设置:

    ../../../_images/simple_marker_line_properties.png
  3. 选择 标记线 图层并将间隔分布更改为 1.00

    ../../../_images/marker_line_interval.png
  4. 在应用样式之前,请确保符号层级正确 (通过我们之前使用的 高级 ► 符号层级 对话框)。

应用样式后,请在地图上查看其结果。正如您所见,这些符号会随着道路改变方向,但并不总是随着道路拐弯。这对某些目的有用,但对其他目的却没有用处。如果您愿意,可以将相关的符号图层更改回原来的样子。

多边形符号图层类型

要查看可用于多边形数据的各种选项,请执行以下操作:

  1. 更改 water 图层的 符号图层类型 ,就像之前对其他图层的更改。

  2. 研究列表中不同的选项各有什么作用。

  3. 选择您认为合适的其中一个类型。

  4. 如果不确定,请使用 点图案填充 和以下选项:

    ../../../_images/pattern_fill_size.png
    ../../../_images/pattern_fill_distances.png
  5. 添加类型为 简单填充 的新符号图层。

  6. 将其设为同样的浅蓝色,并带有深蓝色的边框。

  7. 使用 下移 按钮将其移动到点图案符号图层下方:

    ../../../_images/simple_fill_move_down.png

因此,您有一个用于 water 图层的纹理符号,另外还有一个好处,那就是您可以改变构成纹理的各个点的大小、形状和距离。

2.4.13. hard 跟我做: 几何图形生成器符号

可以将几何图形生成器符号用于所有图层类型 (点、线和多边形)。生成的符号直接取决于图层类型。

简而言之,几何图形生成器符号允许您在符号自身内运行一些空间操作。例如,可以在多边形图层运行真正的质心空间操作,而无需创建点图层。

此外,您还可以使用所有样式选项来更改生成符号的外观。

让我们试一试吧!

  1. 选择 water 图层。

  2. 单击 简单填充 ,并将 符号图层类型 更改为 几何图形生成器

    ../../../_images/geometry_generator.png
  3. 在开始编写空间查询之前,我们必须在输出中选择几何图形类型。在本例中,我们将为每个要素创建质心,因此将几何图形类型更改为 点 / 点集

  4. 现在,让我们在查询面板编写查询:

    centroid($geometry)
    
    ../../../_images/geometry_generator_query.png
  5. 单击 确定 后,您将看到 water 图层被渲染为点图层!我们刚刚在图层符号自身内运行了一个空间操作,这不是很神奇吗?

    ../../../_images/geometry_generator_result.png

使用几何图形生成器符号,您可以真正超越 普通 符号的边界。

hard 试一试

几何图形生成器只是另一种符号层级。请尝试在 几何图形生成器 下面添加另一个 简单填充

还可以更改几何图形生成器符号的简单标记的外观。

最终结果应如下所示:

../../../_images/geometry_generator_preview.png

2.4.14. hard 跟我做: 创建自定义SVG填充

备注

要进行此练习,您需要安装免费的矢量编辑软件 Inkscape

  1. 启动 Inkscape 程序,您将看到以下界面:

    ../../../_images/inkscape_default.png

    如果您使用过其他矢量图像编辑程序,比如Corel,会发现这是很熟悉的界面及操作。

    首先,我们将画布更改为适合小纹理的尺寸。

  2. 单击菜单项 文件 ► 文档属性 ,将弹出 文档属性 对话框。

  3. 单位 更改为 px

  4. 更改 宽度高度 值为 100

  5. 完成后关闭对话框。

  6. 单击菜单项 视图 ► 缩放 ► 页面 以查看正在使用的页面。

  7. 选择 圆形 工具:

    ../../../_images/inkscape_circle_tool.png
  8. 在页面上单击并拖动以绘制椭圆。要使椭圆变成圆形,请在绘制时按住 Ctrl 键。

  9. 右键单击刚创建的圆,打开其 填充和描边 选项。您可以修改其渲染参数,例如:

    1. 填充 颜色更改为某种浅灰蓝色,

    2. 描边绘制 选项卡为边框指定较深的颜色,

    3. 并减小 描边样式 选项卡中的边框宽度。

    ../../../_images/inkscape_stroke_fill.png
  10. 使用 铅笔 工具绘制线:

    1. 单击一次开始绘制线。按住 Ctrl 键使其捕捉到 15 度的增量。

    2. 水平移动指针,只需单击即可放置一个点。

    3. 单击并捕捉到线的顶点,然后追踪垂直线,只需单击即可结束绘制。

    4. 现在连接两个端点。

    5. 更改三角形符号的颜色和宽度,使其与圆形的描边相匹配,并根据需要将其移动到恰当位置,以便最终得到如下符号:

    ../../../_images/inkscape_final_symbol.png
  11. 如果绘制的符号令您满意,可以将其另存为课程所在目录,名称是 landuse_symbol 的文件,即 exercise_data/symbols 下的SVG文件。

在QGIS:

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

  2. symbology 符号化 选项卡,通过将 符号图层类型 更改为 SVG填充 来更改符号结构,如下所示。

  3. 单击 ... 按钮,然后在 选择文件... 对话框选择SVG图像。

    创建的SVG图像被添加到符号树中,您现在可以自定义它的不同特征 (颜色、角度、效果、单位等)。

    ../../../_images/svg_symbol_settings.png

验证对话框后, landuse 图层中的要素现在应该由一组符号布满,显示类似于下图中的纹理。如果纹理不可见,可能需要在地图画布进行缩放,或在图层属性设置更大的 纹理宽度

../../../_images/svg_symbol_result.png

2.4.15. 综上所述

更改不同图层的符号将矢量文件集转换为易读的地图。您不仅能看到发生了什么,而且看起来还不错!

2.4.16. 延伸阅读

精美地图示例

2.4.17. 下节引言

更改整个图层的符号很有用,但阅读这些地图的人还是无法获得每个图层所包含的信息。比如这些街道叫什么?某些地方属于哪个行政区域?农场的相对表面积是多少?所有这些信息仍然隐藏着。下一课将讲解如何在地图表示这些数据。

备注

您最近记得保存地图吗?