2.4. Lesson: 符号学

层的符号系统是它在地图上的视觉外观。与用空间方面表示数据的其他方法相比,地理信息系统的基本优势在于,通过地理信息系统,您可以动态地直观地表示正在使用的数据。

因此,地图的视觉外观(取决于各个层的符号系统)非常重要。您制作的地图的最终用户需要能够轻松地看到地图所代表的内容。同样重要的是,您需要能够在处理数据时对其进行探索,而良好的符号体系对您有很大帮助。

换句话说,拥有适当的符号体系并不是奢侈品,也不只是一种美好的享受。事实上,正确使用地理信息系统并生成人们能够使用的地图和信息是非常重要的。

The goal for this lesson: 能够为任何矢量层创建您想要的任何符号系统。

2.4.1. 基本信息 Follow Along: Changing Colors

要更改图层的符号系统,请打开其 Layer Properties 。让我们从更改 landuse 一层。

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

  2. 选择菜单项 Properties... 在出现的菜单中。

    备注

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

    小技巧

    这个 符号学 按钮的顶部。 Layers 面板将打开 Layer Styling 面板。您可以使用此面板更改层的某些属性:默认情况下,更改将立即应用!

  3. Layer Properties 窗口中,选择 符号学 Symbology 选项卡:

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

  5. 选择灰色,然后单击 OK

  6. 单击 OK 又一次在 Layer Properties 窗口,您将看到应用于该层的颜色更改。

2.4.2. 基本信息 Try Yourself

更改对象的颜色 water 层到浅蓝色。尝试使用 Layer Styling 面板而不是 Layer Properties 菜单。

2.4.3. 基本信息 Follow Along: Changing Symbol Structure

到目前为止,这是一个很好的东西,但一个层的符号系统不仅仅是它的颜色。接下来,我们希望消除不同土地使用区之间的线,以使地图在视觉上不那么杂乱。

  1. 打开 Layer Properties 窗口,用于 landuse 一层。

    在.之下 符号学 Symbology 选项卡中,您将看到与以前一样的对话框。然而,这一次,您所做的不仅仅是快速更改颜色。

  2. 在符号层树中,展开 Fill 下拉列表,然后选择 Simple fill 选择。

  3. 按下 Stroke style 下拉列表。目前,它应该显示一条短线和文字 Solid Line

  4. 将此更改为 No Pen

    ../../../_images/simple_fill_selected.png
  5. 单击 OK

现在 landuse 层在区域之间不会有任何线条。

2.4.4. 基本信息 Try Yourself

  • 更改 water 层的符号系统,以便它有一个更深的蓝色轮廓。

  • 更改 rivers 将层的符号系统转换为对水道的合理表示。

请记住:您可以使用 符号学 Open the Layer Styling panel 按钮,并立即查看所有更改。该面板还允许您在符号化一个层时撤消单个更改。

2.4.5. 适度 Follow Along: Scale-Based Visibility

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

在我们的情况下,我们可能会决定以小比例隐藏建筑物。例如,这张地图。

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

..。并不是很有用。在这种规模下,这些建筑很难区分开来。

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

  1. 打开 Layer Properties 对话框中的 buildings 一层。

  2. 激活 渲染 Rendering 标签。

  3. 通过单击标记为的复选框启用基于比例的渲染 Scale dependent visibility

  4. 更改 Minimum 价值目标 1:10000

    ../../../_images/scale_dependent_visibility.png
  5. 单击 OK

通过放大和缩小地图来测试此功能的效果,请注意 buildings 层将消失并重新出现。

备注

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

缩放 ZoomOut

2.4.6. 适度 Follow Along: Adding Symbol Layers

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

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

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

    ../../../_images/simple_fill_selected.png
  2. 选择 Fill 级别,然后在树中单击 符号系统添加 Add symbol layer 纽扣。对话框将更改为如下所示,并添加了一个新的符号层:

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

    例如,它可能在颜色上看起来有点不同,但无论如何你都要改变这一点。

现在有了第二个符号层。作为一种纯色,它当然会完全隐藏以前的那种符号。另外,它还有一个 Solid Line 边框风格,我们不想要的。显然,这个符号必须改变。

备注

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

带着新的 Simple Fill 选定的符号层:

  1. 将边框样式设置为 No Pen ,和以前一样。

  2. 将填充样式更改为其他样式 SolidNo brush 。例如:

    ../../../_images/new_fill_settings.png
  3. 单击 OK

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

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

太好玩了!但它的颜色可能太多了,不能用在真正的地图上。

2.4.7. 适度 Try Yourself

如有必要,记得要放大,为 buildings 层使用上面的方法。

2.4.8. 适度 Follow Along: Ordering Symbol Levels

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

  1. 给出 roads 分层额外的符号层(使用上面演示的添加符号层的方法)。

  2. 给底线一个 Stroke width1.5 还有黑色。

  3. 为新的最上面的层赋予厚度 0.8 还有白色的。

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

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

嗯,道路现在有了一个 street 就像符号学一样,但你可以看到每条线在每个十字路口都相互重叠。这根本不是我们想要的!

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

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

  1. 选择最上面的 Line 符号层树中的层。

  2. 单击 Advanced ► Symbol levels... 在窗口的右下角。

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

    这将打开一个如下所示的对话框:

    ../../../_images/symbol_levels_dialog.png
  3. 检查 复选框 Enable symbol levels 。然后,您可以通过输入相应的级别编号来设置每个符号的层顺序。0是最底层。

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

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

    这将显示粗黑线边框上方的白线:

  4. 单击 OK 两次返回地图。

    现在,地图将如下所示:

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

完成后,请记住保存符号本身,以便以后再次更改符号时不会丢失所做的工作。您可以通过单击 Save Style... 按钮的底部。 Layer Properties 对话框中。我们将使用 QGIS QML Style File 格式化。

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

2.4.9. 适度 Try Yourself

更改的外观 roads 再次分层。

使道路窄而黄,中间有一条细长的浅灰色轮廓和一条细小的黑线。请记住,您可能需要通过 Advanced ► Symbol levels... 对话框中。

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

2.4.10. 硬的 Try Yourself

符号级别也适用于分类的层(即,具有多个符号的层)。因为我们还没有讨论分类,所以您将使用一些基本的预先分类的数据。

  1. 创建一个新项目并仅添加 roads 数据集。

  2. 应用样式文件 advanced_levels_demo.qml 提供于 exercise_data/styles 到了这一层。这可以通过 Style ► Load Style... 控件底部的组合框 Layer Properties 对话框中。

  3. 放大到 Swellendam 区域。

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

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

2.4.11. 适度 Follow Along: Symbol layer types

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

每种类型的矢量(点、线和面)都有自己的符号层类型集。首先,我们将查看可用于积分的类型。

点符号图层类型

  1. 取消选中除以下各项之外的所有层 places

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

    ../../../_images/places_layer_properties.png
  3. 通过选择,可以访问各种符号层类型 Simple marker 在符号层树中,然后单击 Symbol layer type 下拉列表:

    ../../../_images/marker_type_dropdown.png
  4. 研究可供您使用的各种选项,并选择您认为具有适当样式的符号。

  5. 如果有疑问,用一发子弹 Simple marker 带有白色边框和淡绿色填充,并带有 Size3.00 以及一个 Stroke width0.5

线符号图层类型

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

  1. 更改 Symbol layer type 对于 roads 图层的最上面的符号图层到 Marker line

    ../../../_images/change_to_marker_line.png
  2. 选择 Simple marker 符号层树中的层。更改元件属性以匹配此对话框:

    ../../../_images/simple_marker_line_properties.png
  3. 选择 Marker line 层,并将间隔更改为 1.00

    ../../../_images/marker_line_interval.png
  4. 确保符号级别正确(通过 Advanced ► Symbol levels 我们之前使用的对话框),然后应用样式。

一旦应用了该样式,就可以在地图上查看其结果。正如你所看到的,这些符号随着道路改变方向,但并不总是随着道路的弯曲而改变。这对某些目的很有用,但对另一些目的就没有用了。如果您愿意,可以将有问题的符号层更改回以前的方式。

面符号图层类型

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

  1. 更改 Symbol layer type 对于 water 层,就像以前为其他层所做的那样。

  2. 调查清单上的不同选项可以做些什么。

  3. 选择你认为合适的其中一种。

  4. 如果有疑问,请使用 Point pattern fill 具有以下选项:

    ../../../_images/pattern_fill_size.png
    ../../../_images/pattern_fill_distances.png
  5. 添加具有法线的新符号图层 Simple fill

  6. 把它改成浅蓝色加深蓝色边框。

  7. 将其移动到点阵列符号层下 Move down 按钮:

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

结果,您拥有了水层的纹理符号,并增加了一个好处,即您可以更改组成纹理的各个点的大小、形状和距离。

2.4.13. 硬的 Follow Along: Geometry generator symbology

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

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

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

让我们试一试吧!

  1. 选择 water 一层。

  2. 点击 Simple fill 并更改 Symbol layer typeGeometry generator

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

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

    centroid($geometry)
    
    ../../../_images/geometry_generator_query.png
  5. 当您点击 OK 您将看到, water 层被渲染为点层!我们刚刚在层符号系统本身内运行了一个空间操作,这不是很令人惊讶吗?

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

使用几何生成器符号系统,您可以真正超越 normal 符号学。

硬的 Try Yourself

几何图形生成器只是另一个符号级别。尝试添加另一个 Simple fill 在它的下面 Geometry generator 一。

同时更改几何图形生成器符号系统的简单标记的外观。

最终结果应该如下所示:

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

2.4.14. 硬的 Follow Along: Creating a Custom SVG Fill

备注

要完成此练习,您需要安装免费的矢量编辑软件 Inkscape 已安装。

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

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

    如果您使用过其他矢量图像编辑程序,如Corel,您会发现这一点很熟悉。

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

  2. 点击菜单项 File ► Document Properties 。这将给你带来 Document Properties 对话框中。

  3. 更改 Unitspx

  4. 更改 WidthHeight100

  5. 完成后关闭该对话框。

  6. 点击菜单项 View ► Zoom ► Page 要查看您正在使用的页面,请执行以下操作。

  7. 选择 Circle 工具:

    ../../../_images/inkscape_circle_tool.png
  8. 在绘图页上单击并拖动可绘制椭圆。若要使椭圆变成圆,请按住 Ctrl 按钮,当你画它的时候。

  9. 右键单击您刚刚创建的圆,然后打开其 Fill and Stroke 选择。您可以修改其渲染,例如:

    1. 更改 Fill 颜色变成了某种程度上的淡灰蓝色,

    2. 在中为边框指定较深的颜色 Stroke paint 选项卡,

    3. 并减小边框厚度。 Stroke style 标签。

    ../../../_images/inkscape_stroke_fill.png
  10. 绘制一条线使用 Pencil 工具:

    1. 单击一次以开始线。保持 Ctrl 使其捕捉到15度的增量。

    2. 水平移动指针,并通过简单的单击放置一个点。

    3. 单击并捕捉到线的顶点,然后跟踪一条垂直线,该垂直线以简单的单击结束。

    4. 现在连接两个末端顶点。

    5. 更改三角形符号的颜色和宽度以匹配圆的笔触,并根据需要移动它,这样您就可以得到如下所示的符号:

    ../../../_images/inkscape_final_symbol.png
  11. 如果获得的符号令您满意,则将其另存为 landuse_symbol 在课程所在的目录下,在 exercise_data/symbols ,作为SVG文件。

在QGIS中:

  1. 打开 Layer Properties 对于 landuse 一层。

  2. 符号学 Symbology 选项卡中,通过更改 Symbol Layer TypeSVG Fill `如下所示。

  3. 单击 ... 按钮,然后 Select File... 若要选择SVG图像,请执行以下操作。

    它被添加到符号树中,现在你可以自定义它的不同特征(颜色、角度、效果、单位...)。

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

验证对话框后,中的功能 landuse 层现在应该被一组符号覆盖,显示出如下图所示的纹理。如果纹理不可见,则可能需要放大地图画布或在图层属性中将其设置得更大 Texture width

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

2.4.15. In Conclusion

更改不同层的符号系统已将一组矢量文件转换为清晰的地图。你不仅可以看到正在发生的事情,它甚至还很好看!

2.4.16. Further Reading

Examples of Beautiful Maps

2.4.17. What's Next?

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

备注

你记得最近保存了你的地图吗?