从历法到GIS:探索天地规律的技术演进与应用——经纬绘山河(刍议)
本文最后更新于 393 天前,其中的信息可能已经有所发展或是发生改变。
文章目录

缘起

其实上一篇的信息量已经够大了,但是还不完全够,后续又折腾出来一大堆坑,所以决定再来一篇文章讲一讲。会以短篇合集的形式一点一点更新。

思路

1、如果说十来个点,就一条线,甚至两三条。完全可以直接操作,就不需要繁琐的表格,直接两张表完成。第一张表是所有点的坐标,第二张是所有线段的具体信息。
2、如果说点位几百个,线条十多条,甚至图层有五百多个。这个时候就需要小心行事。因为在点位复杂的情况下,一个错误可能会引发连锁反应。而且在这个时候AI犯傻的情况会很多。也就是从文本到转折点的时候会有错漏的情况。这些我的建议是人工二次校验。先去把所有不同坐标的点导出来,丢到qgis里面看一眼。然后线段的转折点就对照自己的文本去看了。这个工作必须要做,等到真正把csv变成图层了,比如说点转线了,然后才意识到自己出问题,是不好的。理论上可以弄个系统,甚至用Excel的公式都能实现,但还是那句话,点位坐标搞错了后面就是错的,转折点遗漏也是。
3、qgis有时候挺反人类的,就是你去改属性表的时候有保存,然后你ctrls+s也有保存,这两个保存是不一样的,或者说互相独立,所以请记得全部点一下保存。
4、qgis有时候挪动标注问你主键,但是你选了后还是不能挪动,是bug,需要用代码把字段加上,当然你手动加上也行。("auxiliary_storage_labeling_positionx", QVariant.Double),("auxiliary_storage_labeling_positiony", QVariant.Double)这两个玩意控制了挪动标注的位置。而且是绝对位置。
5、实际上我操作中用的最多的是直接开属性表修改,有时候导入来导入去不如单独改,改完了让他自己渲染一下就行了,前期可以导入,后期建议微操。
6、遇事不决去问AI吧,有个gemini能解决大多数问题。
7、图层别太多,我应该是有七百多个吧,但是实际上渲染没这么多,太多建议别开实时渲染,就右下角的那个勾,我用13900K+4090(关了小核)和我的8745HS+780M都对比了一下发现该崩溃还是崩溃,我怀疑他自己本身也承受不了。所以建议没事多保存,然后最好不要留存临时图层,弄完就永久化。
8、qgis的字体缓存是开启关闭才能刷新,所以有新的字体建议安装到系统里面再说,然后安装字体选择给所有用户安装不然的话也出问题。


QGIS 批量处理工作流:从分割文本图层到标准化的 GeoPackage 图层

一、 最终目标

本工作流旨在将 QGIS 中多个临时的、不可编辑的“分割文本图层”或类似图层,通过自动化的 Python 脚本,批量转换为可编辑、字段完整、已设置好标注规则的标准化 GeoPackage 矢量图层。

二、 核心优势

  • 自动化与效率:一键处理几十上百个图层,告别手动重复操作。
  • 数据完整性:采用现代的 GeoPackage (.gpkg) 格式,完美保留所有字段信息,解决了 Shapefile 格式字段名长度不能超过10个字符的致命缺陷。
  • 标准化:确保所有产出的图层都拥有一致的、完整的属性字段结构。
  • 可复现性:流程清晰,代码可靠,任何人都可以按照本文档重现操作。

三、 工作流程与代码

整个流程分为三个核心步骤。请按顺序执行。


步骤一:批量将源图层转换为 GeoPackage (.gpkg) 文件

目的:这是所有工作的基础。此步骤将您项目中临时的、可能无法直接编辑的图层,转换为独立的、永久的、可完全编辑的 .gpkg 矢量文件。

操作指南:

  1. 在运行代码前,请确保所有需要处理的源图层都已加载到 QGIS 项目中。
  2. 打开 QGIS Python 控制台 (插件 -> Python 控制台)。
  3. 将下面的代码完整复制并粘贴到控制台中。
  4. 重要:请仔细检查代码中 layer_names_to_process 列表,确保里面的图层名称与您图层面板中的名称完全一致。
  5. 按回车键运行脚本。脚本会弹出一个窗口,让您选择一个文件夹用于存放所有新生成的 .gpkg 文件。

Python 代码 (步骤一):

import os
from qgis.core import (
    QgsVectorFileWriter,
    QgsVectorLayer,
    QgsProject,
    Qgis 
)
from qgis.PyQt.QtWidgets import QFileDialog

# 1. 在此定义所有需要转换的图层的准确名称
layer_names_to_process = [
自己写
]

# 2. 弹出一个对话框让用户选择一个文件夹
output_dir = QFileDialog.getExistingDirectory(None, "请选择一个文件夹来保存所有转换后的图层")

if output_dir:
    processed_count = 0
    not_found_layers = []

    for layer_name in layer_names_to_process:
        found_layers = QgsProject.instance().mapLayersByName(layer_name)

        if not found_layers:
            iface.messageBar().pushMessage("未找到", f"没有找到名为 '{layer_name}' 的图层,已跳过。", Qgis.Warning, 4)
            not_found_layers.append(layer_name)
            continue

        layer = found_layers[0]

        new_layer_name = f"{layer.name()}"
        output_path = os.path.join(output_dir, f"{new_layer_name}.gpkg")

        options = QgsVectorFileWriter.SaveVectorOptions()
        options.driverName = "GPKG" # 指定驱动为 GeoPackage
        options.fileEncoding = "UTF-8"

        error_code = QgsVectorFileWriter.writeAsVectorFormatV3(layer,
                                                               output_path,
                                                               QgsProject.instance().transformContext(),
                                                               options)

        if error_code != QgsVectorFileWriter.NoError:
            iface.messageBar().pushMessage("错误", f"保存图层 '{new_layer_name}' 失败。", Qgis.Critical, 5)
            continue

        new_layer = QgsVectorLayer(output_path, new_layer_name, "ogr")
        if new_layer.isValid():
            QgsProject.instance().addMapLayer(new_layer)
            processed_count += 1
        else:
            iface.messageBar().pushMessage("错误", f"加载新图层 '{new_layer_name}' 失败!", Qgis.Critical, 5)

    iface.messageBar().pushMessage("成功", f"步骤一完成!共 {processed_count} 个图层被成功转换为 GeoPackage 文件。", Qgis.Success, 7)
    if not_found_layers:
        iface.messageBar().pushMessage("注意", f"有 {len(not_found_layers)} 个图层未被找到: {', '.join(not_found_layers)}", Qgis.Warning, 10)

else:
    iface.messageBar().pushMessage("操作取消", "您没有选择输出文件夹,操作已取消。", Qgis.Info, 5)

预期结果:

  • 在您选择的文件夹中,会生成一批与源图层同名的 .gpkg 文件。
  • 这些新的 .gpkg 图层会自动加载到您的 QGIS 项目中。

步骤二:批量检查并补全图层字段

目的:确保所有在步骤一中新生成的图层都含有统一、完整的属性字段,为后续的数据处理和标注打下基础。

操作指南:

  1. 在 QGIS 图层面板中,创建一个新的图层组,并将其命名为 new。
  2. 将所有在步骤一中新生成的 .gpkg 图层拖拽到这个名为 new 的图层组中。
  3. 将下面的代码完整复制并粘贴到 QGIS Python 控制台中。
  4. 按回车键运行脚本。脚本会自动检查 new 组里的所有图层,并为它们添加缺失的字段。

Python 代码 (步骤二):

from qgis.core import QgsProject, QgsField, Qgis
from qgis.PyQt.QtCore import QVariant

# 1. 定义期望的完整字段结构
required_fields = [
    ("fid", QVariant.LongLong),
    ("placemark_name", QVariant.String),
    ("longitude", QVariant.Double),
    ("latitude", QVariant.Double),
    ("show_label", QVariant.Int),
    ("stable_id", QVariant.Double),
    ("auxiliary_storage_labeling_positionx", QVariant.Double),
    ("auxiliary_storage_labeling_positiony", QVariant.Double)
]

# 2. 找到名为 "new" 的图层组
target_group_name = "new"
root = QgsProject.instance().layerTreeRoot()
target_group = root.findGroup(target_group_name)

if not target_group:
    iface.messageBar().pushMessage("错误", f"找不到名为 '{target_group_name}' 的图层组。请先创建并放入图层。", Qgis.Critical, 5)
else:
    iface.messageBar().pushMessage("开始处理", f"正在为 '{target_group_name}' 组中的图层检查并添加字段...", Qgis.Info, 3)

    layers_in_group = [child.layer() for child in target_group.children()]
    total_layers_modified = 0

    for layer in layers_in_group:
        # 直接尝试开启编辑模式
        if layer.startEditing():
            provider = layer.dataProvider()
            existing_field_names = [field.name() for field in provider.fields()]

            fields_to_add = []
            for field_name, field_type in required_fields:
                if field_name not in existing_field_names:
                    fields_to_add.append(QgsField(field_name, field_type))

            if fields_to_add:
                provider.addAttributes(fields_to_add)
                added_field_names = [f.name() for f in fields_to_add]
                iface.messageBar().pushMessage("更新图层", f"为 '{layer.name()}' 添加了字段: {', '.join(added_field_names)}", Qgis.Success, 5)
                total_layers_modified += 1

            # 提交更改并退出编辑模式
            layer.commitChanges()
        else:
            iface.messageBar().pushMessage("错误", f"无法为图层 '{layer.name()}' 开启编辑模式,已跳过。", Qgis.Critical, 4)

    iface.messageBar().pushMessage("处理完成", f"步骤二完成!共更新了 {total_layers_modified} 个图层的字段结构。", Qgis.Success, 7)

预期结果:

  • new 组中的所有图层现在都拥有了在代码中定义的8个标准字段。
  • QGIS 顶部的消息栏会显示每个图层的处理情况。

步骤三:批量设置数据定义的标注

目的:为所有处理好的图层应用统一的标注规则,即:仅当 show_label 字段的值为 1 时,才显示标注。

操作指南:

  1. 确保您的图层仍然位于名为 new 的图层组中。
  2. 将下面的代码完整复制并粘贴到 QGIS Python 控制台中。
  3. 按回车键运行脚本。

Python 代码 (步骤三):

from qgis.core import (
    QgsProject,
    QgsPalLayerSettings,
    QgsVectorLayerSimpleLabeling,
    QgsProperty,
    Qgis
)

# 1. 找到名为 "new" 的图层组
target_group_name = "new"
root = QgsProject.instance().layerTreeRoot()
target_group = root.findGroup(target_group_name)

if not target_group:
    iface.messageBar().pushMessage("错误", f"找不到名为 '{target_group_name}' 的图层组。", Qgis.Critical, 5)
else:
    iface.messageBar().pushMessage("开始处理", f"正在为 '{target_group_name}' 组中的图层设置标注...", Qgis.Info, 3)

    layers_in_group = [child.layer() for child in target_group.children()]

    for layer in layers_in_group:
        # 创建标注设置
        label_settings = QgsPalLayerSettings()
        label_settings.drawLabels = True
        label_settings.fieldName = "placemark_name" # 使用 placemark_name 字段作为标注内容

        # 核心:设置数据定义的 "显示" 属性
        # 表达式为 "show_label" = 1
        label_settings.dataDefined.setProperty(
            QgsPalLayerSettings.Show, 
            QgsProperty.fromExpression('"show_label" = 1', True)
        )

        # 将设置应用到图层
        labeling = QgsVectorLayerSimpleLabeling(label_settings)
        layer.setLabeling(labeling)
        layer.setLabelsEnabled(True) # 启用图层的标注

    # 刷新地图画布以显示更新后的标注
    iface.mapCanvas().refreshAllLayers()
    iface.messageBar().pushMessage("成功", f"步骤三完成!已为 {len(layers_in_group)} 个图层设置了标注规则。", Qgis.Success, 5)

预期结果:

  • 地图上所有 new 组内的图层,只有在其属性表中 show_label 字段值为 1 的要素才会显示标注。

四、 常见问题与关键概念 (FAQ)

Q: 为什么选择 GeoPackage (.gpkg) 而不是 Shapefile (.shp)?
A: Shapefile 是一个非常古老的格式,其字段名长度被限制在10个字符以内。像 auxiliary_storage_labeling_positionx 这样的长字段名会被截断,导致数据丢失。GeoPackage 是一个现代开放标准,没有这个限制,功能更强大,是 QGIS 官方推荐的格式。

Q: 为什么之前的代码会提示图层“不可编辑”?
A: QGIS 对加载的图层默认采用“只读”模式。要修改图层(如添加字段),必须先通过代码或手动点击铅笔图标来“开启编辑模式”。我们最终的代码通过 layer.startEditing() 命令强制开启编辑模式,从而解决了这个问题。

Q: 如果我的图层组不叫 "new" 怎么办?
A: 只需将步骤二和步骤三代码中的 target_group_name = "new" 这一行,改成您实际使用的图层组名称即可。

工作手册

QGIS DEM 地形起伏感制作指南

文档目的:本手册旨在为QGIS用户提供清晰的操作指引,通过利用数字高程模型(DEM)数据,在二维地图和三维视图中创造出逼真且具有起伏感的地形效果。


1. 核心概念

  • DEM (Digital Elevation Model):数字高程模型,是描述地表高程信息的栅格数据,也是制作地形起伏效果的基础。
  • 山体阴影 (Hillshade):通过模拟太阳光照产生的地形阴影效果,是增强二维地形起伏感的关键技术。
  • 垂直夸大 (Vertical Exaggeration / Z Factor):通过按比例增加高程值,使地形的起伏在视觉上更加突出和明显。

2. 方法一:标准山体阴影与DEM彩色叠加(适用于二维地图制作)

这是最经典且高效的方法,用于制作信息丰富且具立体感的二维地形图。

操作步骤:

  1. 加载数据:

    • 通过菜单栏 图层 > 添加图层 > 添加栅格图层,将您的DEM数据加载到QGIS项目中。
  2. 创建山体阴影图层:

    • 打开 处理工具箱 (菜单栏 处理 > 工具箱)。
    • 在工具箱中搜索并双击 山体阴影 (Hillshade) 工具。
    • 在弹出的窗口中:
      • 高程图层:选择已加载的DEM图层。
      • Z因子:设置一个大于1的数值(如:2或3)来增强地形起伏感。数值越大,起伏越夸张。
      • 其他参数(如光照方位角、高度角)可保持默认或根据需要调整。
      • 点击 运行,生成一个新的山体阴影图层。
  3. 为DEM图层着色:

    • 在图层面板中,右键点击原始的DEM图层,选择 属性。
    • 进入 符号系统 选项卡。
    • 将 渲染类型 从 单波段灰度 更改为 单波段伪彩色。
    • 在 颜色渐变 选项中,选择一个适合表现地形的色带(如 Topography)。
    • 点击 分类 按钮(如果需要),然后点击 应用。
  4. 叠加图层并设置混合模式:

    • 在图层面板中,确保着色后的DEM图层位于山体阴影图层的上方。
    • 再次打开DEM图层的 属性 > 符号系统。
    • 找到 图层渲染 选项,将其中的 混合模式 设置为 正片叠底 (Multiply)。
    • 可根据需要微调DEM图层的 不透明度,以达到最佳视觉平衡。
    • 点击 确定 完成设置。

3. 方法二:多方向山体阴影(适用于细节更丰富的二维地图)

此方法通过模拟多个方向的光源来渲染地形,可以展现更多地形细节,避免单一光源造成的细节丢失。

操作步骤:

  1. 加载数据:

    • 加载您的DEM数据。
  2. 直接设置DEM符号系统:

    • 右键点击DEM图层,选择 属性。
    • 在 符号系统 选项卡中,将 渲染类型 直接设置为 山体阴影。
    • 勾选 多方向 复选框以启用该功能。
    • 调整 Z因子 以夸大地形起伏。
    • 此方法将直接在原始DEM图层上渲染出效果更佳的山体阴影。

4. 方法三:3D地图视图(适用于交互式三维可视化)

将DEM数据在三维环境中进行展示,提供最直观的地形起伏感受,支持任意角度的缩放、平移和旋转。

操作步骤:

  1. 打开3D地图视图:

    • 通过菜单栏 视图 > 新建3D地图视图 打开一个新的3D视图窗口。
  2. 配置3D地形:

    • 在3D地图视图窗口中,点击 配置 按钮(扳手图标)。
    • 在弹出的配置面板中,选择 地形 选项卡。
    • 类型:设置为 DEM (栅格图层)。
    • 高程:选择您加载的DEM图层。
    • 垂直比例:设置一个大于1的数值(如:1.5或2)来夸大Z方向的地形起伏,使其更加显著。
    • 点击 确定,即可在3D视图中看到立体地形。
  3. 在3D地形上叠加图层:

    • 若想在三维地形上叠加卫星影像或其他地图,只需在QGIS主窗口的图层面板中,将该图层拖拽到DEM图层上方即可。该图层会自动附着在3D地形表面。

提示:在3D视图中,按住Shift键和鼠标左键可以方便地进行缩放和旋转操作。 您还可以利用3D视图的动画功能创建地形的飞行漫游视频。


工作手册:在 QGIS 中根据属性表坐标更新点要素的地理位置

1. 问题场景

当我们在 QGIS 的图层属性表中直接修改了记录经纬度(或X, Y坐标)的字段值后,地图画布上对应的点要素并不会自动移动到新的位置。

核心原因:在 QGIS 中,要素的 属性数据(存储在属性表中的描述性信息,如名称、经纬度字段)和其 几何图形数据(决定要素在地图上实际位置的空间信息)是分开存储和管理的。直接修改属性表,只改变了描述信息,并未更新其空间位置。

本手册旨在提供标准操作流程,以解决此问题。


2. 标准解决方案:使用“字段计算器”更新几何图形

此方法适用于更新单个或批量点要素的位置,是最高效、最准确的推荐方法。

操作步骤:

  1. 进入编辑模式:

    • 在“图层”面板中,选中您需要操作的点图层。
    • 点击工具栏上的“切换编辑模式”按钮(铅笔图标),或右键图层选择“切换编辑模式”。
  2. 打开属性表并选中目标要素:

    • 右键图层,选择“打开属性表”。
    • (关键步骤) 在属性表中,通过点击行号来选中您想要移动的一个或多个点要素(例如“四姑娘山”)。
    • 提示:如果希望更新图层中的所有点,则无需进行选择。
  3. 启动字段计算器:

    • 在属性表顶部的工具栏中,点击“打开字段计算器”按钮(算盘图标)。
  4. 配置字段计算器:

    • 在弹出的窗口中,进行以下设置:
      • 勾选顶部的 [√] 更新现有字段。
      • 从旁边的下拉菜单中,选择 $geometry。这代表我们的操作目标是要素的“几何图形”本身。
      • 在下方的“表达式”编辑框中,输入以下函数:
        make_point("lon", "lat")
      • 注意:请将表达式中的 "lon" 和 "lat" 替换为您属性表中实际存储 经度 (X坐标) 和 纬度 (Y坐标) 的字段名称。
  5. 执行并保存更改:

    • 点击“确定”按钮。字段计算器将根据您选中的行以及对应的 lon 和 lat 字段值,重新生成点的位置。
    • 此时,您会看到地图上的点已经移动到了新位置。
    • 最后,再次点击“切换编辑模式”(铅笔图标)来结束编辑,并在弹出的提示框中点击 “保存”。

3. 备选方案:使用“顶点工具”精确移动单个点

此方法适用于需要手动、精确调整极少数(通常是单个)点的位置。

操作步骤:

  1. 进入编辑模式:同上,确保您的图层处于编辑状态。

  2. 激活顶点工具:

    • 在“数字化工具栏”中,找到并点击“顶点工具(当前图层)”按钮。
    • 如果找不到该工具栏,可以在菜单栏的 视图 -> 工具栏 中勾选“数字化工具栏”。
  3. 编辑坐标:

    • 使用“顶点工具”在地图上 右键点击 您想要移动的点要素。
    • QGIS 界面侧边会弹出“顶点编辑器”面板。
    • 在此面板中,您可以直接输入精确的 X (经度) 和 Y (纬度) 坐标值,按回车键后,点的位置会实时更新。
  4. 保存更改:完成调整后,退出编辑模式并保存您的修改。



如何在 QGIS 中模拟红绿色盲以进行地图可访问性测试

文档目的

本篇文档旨在详细说明如何在 QGIS 软件中启用内置的色盲模拟功能。通过此功能,地图设计者可以预览其作品在红绿色盲用户眼中的显示效果,从而创建对所有人都清晰易读的地图。

背景知识:红绿色盲模拟

红绿色盲是最常见的色觉障碍类型,主要分为 红色盲 (Protanopia) 和 绿色盲 (Deuteranopia)。

  • 红色盲 (Protanopia):对红色光的感知能力缺失或较弱。在 QGIS 中,这对应 模拟红色盲 (无红色) 选项。
  • 绿色盲 (Deuteranopia):对绿色光的感知能力缺失或较弱。在 QGIS 中,这对应 模拟绿色盲 (无绿色) 选项。

QGIS 同时提供了这两种模拟模式,让您可以全面地测试地图对红绿色盲用户的友好程度。

准备工作

  • 安装并打开 QGIS 软件 (该功能在 QGIS 3.x 及以上版本中提供)。
  • 打开一个现有的 QGIS 项目,或者创建一个新项目并添加至少一个应用了多种颜色的图层(例如,一个分类设色的矢量图层或一个栅格图层)。

操作步骤

请按照以下步骤,即可在您的 QGIS 项目中复现色盲模拟:

  1. 打开预览菜单:
    在 QGIS 顶部的菜单栏中,找到并点击 视图 (View) 菜单。

  2. 选择预览模式:
    在 视图 (View) 的下拉菜单中,将鼠标悬停在 预览模式 (Preview Mode) 选项上,会展开一个子菜单。

  3. 激活红绿色盲模拟:
    从子菜单中选择您想要模拟的红绿色盲类型:

    • 若要模拟 红色盲,请点击 模拟红色盲 (无红色) (Simulate Color Blindness (Protanope))。
    • 若要模拟 绿色盲,请点击 模拟绿色盲 (无绿色) (Simulate Color Blindness (Deuteranope))。

    (此图与您提供的截图一致)

结果验证

  • 当您选择了任意一种模拟模式后,主地图画布中的所有颜色将 立即实时更新,以显示模拟后的视觉效果。
  • 您可以在此模式下继续编辑地图的颜色、符号等样式,并实时观察改动在色盲模拟视图下的呈现效果,非常便于调整设计方案。

如何关闭模拟

若要恢复到正常的颜色显示,只需再次进入 视图 (View) → 预览模式 (Preview Mode) 菜单,然后选择顶部的 正常 (Normal) 选项即可。


QGIS 工作手册:创建复古历史感地图效果

文档编号: QGIS-STYLE-003
版本: 1.0
主题: 利用打印布局和混合模式实现地图的复古艺术化处理

1. 目标

本手册旨在指导 QGIS 用户通过标准化的工作流程,为地理数据地图添加复古、怀旧或羊皮纸质感的艺术效果。最终输出的地图将具备统一的历史感色系和纹理,适用于出版、展示或特殊项目需求。

2. 核心原则:内容与装饰分离

在 QGIS 中,必须严格区分两种类型的图层:

  • 地理数据图层: 具有真实坐标参照系统 (CRS) 的数据,如矢量边界、道路、栅格高程等。它们的位置由地理坐标决定,是地图的核心内容。
  • 装饰性元素: 不具备地理信息的视觉元素,如背景纹理、边框、Logo、指北针等。

错误操作: 将装饰性的纹理图片作为栅格图层直接添加到 QGIS 主画布中。这会导致图片因缺少坐标信息而发生巨大偏移,无法与地理数据正确对位。

正确方法: 在 QGIS 的 “打印布局 (Print Layout)” 环境中,将地理数据(作为地图条目)与装饰性图片(作为图片条目)进行分层叠加和渲染。

3. 准备工作

  1. QGIS 项目文件: 准备好您的主地图项目,其中包含已设置好基础符号系统的地理数据图层。
  2. 高分辨率纹理图片: 从网络资源库下载一张或多张高分辨率的复古纹理图片(例如:旧纸张、羊皮纸、画布等),保存至本地。

4. 详细操作步骤

步骤一:进入并设置打印布局

  1. 在 QGIS 顶部菜单栏,点击 项目 > 新建打印布局...。
  2. 为布局命名(例如:“古地图布局”)并点击“确定”。

步骤二:添加核心地图

  1. 在打印布局窗口的左侧工具栏,点击 添加地图 按钮。
  2. 在布局画布上拖拽出一个矩形区域,您的 QGIS 主画布内容将在此区域内显示。
  3. 使用右侧的 项目属性 面板和左侧的 移动条目内容 工具,调整地图的显示范围(比例尺)和位置。

步骤三:添加背景纹理图片

  1. 在左侧工具栏,点击 添加图片 按钮。
  2. 在画布上拖拽出一个矩形,使其完全覆盖您的地图区域,或者整个页面。
  3. 在右侧的 项目属性 面板中,找到 栅格图像源,点击 ... 按钮,选择您已准备好的纹理图片。
    • 此时,图片会暂时遮挡住下方的地图。

步骤四:调整图层顺序

  1. 在右侧面板区域,切换到 条目 选项卡(通常在 项目属性 旁边)。
  2. 在条目列表中,将“图片”图层拖拽至“地图”图层的下方。
    • 操作完成后,地图将重新显示在纹理图片之上。

步骤五:设置混合模式(关键步骤)

  1. 在画布或 条目 面板中,重新选中“地图”图层。

  2. 切换回右侧的 项目属性 面板,向下滑动找到并展开 渲染 部分。

  3. 勾选 渲染 选项。

  4. 找到 混合模式 下拉菜单,将其默认的 正常 模式更改为 正片叠底 (Multiply)。

    效果说明: 正片叠底 模式会将上层(地图)的颜色与下层(纹理)的颜色相乘,使地图的色彩融入纸张纹理中,深色更深,浅色区域则透出纸张的底色,从而完美实现“印在旧纸上”的效果。

  5. 观察画布中的效果,您可以尝试其他混合模式(如 叠加 (Overlay)、柔光 (Soft Light))以获得不同的艺术风格。

5. 进阶技巧与补充说明

  • 复古色带创建:

    • 在 QGIS 主窗口中,为您的数据图层(尤其是高程、人口密度等)的符号系统选择或创建低饱和度、偏黄/褐色的色带(如 Sepia 色系),以增强整体历史感。
  • 符号系统优化:

    • 面状要素: 可使用 形状渐变填充 (Shapeburst Fill),设置由边缘向中心颜色变浅的效果,模拟墨水浸染感。
    • 线状要素: 避免使用过于鲜艳的颜色,选择深褐色、炭灰色等。
    • 标注字体: 选择带有衬线 (Serif) 的复古字体(如 Garamond, Palatino)或手写风格字体。
  • 最终导出:

    • 完成所有布局调整后,通过布局菜单中的 布局 > 导出为图片... 或 导出为 PDF...,即可获得带有复古效果的最终地图成品。


工作手册:QGIS图层名称批量处理

目标:
本手册旨在提供清晰的指导,说明如何在QGIS中高效地移除所有图层名称中特定的前缀(例如 _navigation_points)。这对于保持项目图层列表的整洁和标准化非常有帮助。

适用场景:
当您的QGIS项目中包含大量带有相同、非必要前缀的图层时,手动逐一修改既耗时又容易出错。本手册将介绍几种方法,以适应不同的需求和技能水平。


方法一:使用PyQGIS脚本(推荐,适用于批量处理)

此方法最为高效,尤其适用于处理大量图层。通过在QGIS内置的Python控制台中运行一段简单的脚本,可以瞬间完成所有图层的重命名工作。

操作步骤:

  1. 打开Python控制台:

    • 在QGIS的顶部菜单栏中,找到并点击 “插件” (Plugins) -> “Python控制台” (Python Console)。
  2. 准备并运行脚本:

    • 将以下代码复制并粘贴到Python控制台中。
    # 定义要移除的图层名前缀
    prefix_to_remove = "_navigation_points"
    
    # 遍历当前项目中的所有图层
    for layer in QgsProject.instance().mapLayers().values():
        layer_name = layer.name()
        # 检查图层名称是否包含指定前缀
        if prefix_to_remove in layer_name:
            # 创建新的图层名称,移除前缀
            new_name = layer_name.replace(prefix_to_remove, "")
            # 设置图层的新名称
            layer.setName(new_name)
    
    print("图层名称批量处理完成!")
  3. 执行脚本:

    • 在控制台中按下 回车键 或点击 “运行脚本” 按钮。
    • 脚本将自动查找并重命名所有符合条件的图层。

优点:

  • 自动化: 一次性处理所有图层,无需人工干预。
  • 速度快: 即使有数百个图层,也能在几秒钟内完成。
  • 可重复性: 脚本可以保存,以便在其他项目中重复使用。

方法二:手动重命名图层(适用于少量图层)

如果项目中只有几个图层需要修改,手动重命名是最直接的方法。

操作步骤:

  1. 定位图层:

    • 在QGIS界面的左侧找到 “图层” (Layers) 面板。
  2. 重命名图层:

    • 在需要修改的图层上 右键单击。
    • 从弹出的菜单中选择 “重命名图层” (Rename Layer)。
    • 在可编辑的名称框中,手动删除 _navigation_points 前缀。
    • 按下 回车键 确认修改。
  3. 重复操作:

    • 对其余需要修改的图层重复以上步骤。

优点:

  • 直观简单: 无需任何编码知识,操作直接明了。
  • 无需插件: QGIS原生功能,无需安装额外组件。

方法三:使用“Layer Name Replacer”插件(适用于需要更复杂规则的用户)

对于需要根据特定规则(如使用正则表达式)进行更复杂批量重命名的用户,可以安装并使用专门的插件。

操作步骤:

  1. 安装插件:

    • 在QGIS菜单栏中,选择 “插件” (Plugins) -> “管理并安装插件” (Manage and Install Plugins)。
    • 在插件管理器中,搜索 Layer Name Replacer。
    • 选中该插件并点击 “安装插件” (Install Plugin)。
  2. 使用插件:

    • 安装成功后,通常可以在 “插件” (Plugins) 菜单中找到新安装的插件。
    • 打开插件界面,通常会有“查找”和“替换为”的输入框。
    • 在“查找”框中输入 _navigation_points。
    • 将“替换为”框留空。
    • 执行替换操作。

优点:

  • 图形化界面: 提供用户友好的界面来进行批量查找和替换。
  • 功能更强: 通常支持正则表达式等高级匹配规则。

总结与建议

  • 日常批量处理: 强烈推荐学习并使用 方法一 (PyQGIS脚本),它是处理此类任务最专业、最高效的方式。
  • 临时少量修改: 当只需修改一两个图层时,方法二 (手动重命名) 最为便捷。
  • 复杂重命名需求: 如果您经常需要进行复杂的、基于规则的图层重命名,方法三 (插件) 会是一个很好的补充工具。

工作手册:在 QGIS 打印布局中创建只包含特定图层的图例

目标: 在地图排版时,创建一个简洁、清晰的图例,该图例仅显示一个或少数几个关键图层,而不是自动显示地图中的所有图层。

适用场景: 当地图项目中的图层数量非常多,但出图时只需要重点突出显示某个或某几个要素的图例时,例如仅显示规划用地类型的图例,而忽略所有底图图层。

核心原则: 先在主窗口中设定好期望的图例样式,然后在打印布局中将其“锁定”,使其不再随地图内容的变化而自动更新。


方法一:筛选并锁定法(推荐,最高效)

此方法通过预先筛选图层来快速生成目标图例,是处理复杂地图项目的最佳实践。

操作步骤:

  1. 准备工作:在 QGIS 主窗口筛选图层

    • 返回 QGIS 的主地图界面(非“打印布局”界面)。
    • 在左侧的“图层”面板中,仅勾选您希望最终出现在图例中的那个(或那几个)图层。
    • 将所有其他不需要在图例中显示的图层全部取消勾选,使它们暂时在地图上不可见。

      (示意图占位符)

  2. 配置图例:在打印布局中同步内容

    • 切换到您的“打印布局”窗口。
    • 如果尚未添加图例,请通过菜单栏 添加项目 -> 添加图例 来创建一个图例。
    • 选中该图例,在右侧的“项目属性”面板中,找到“主要属性”部分,并确保勾选了 “只显示链接地图内的项目” 选项。
    • 此时,图例将自动刷新,仅显示您在步骤 1 中勾选的图层。
  3. 关键步骤:锁定图例内容

    • 在确认图例内容正确无误后,找到并取消勾选“自动更新”复选框。
    • 一旦取消勾选,图例内容将被“冻结”,不再随主窗口图层或地图范围的变化而改变。这是实现最终效果的核心操作。

      (示意图占位符)

  4. 收尾工作:恢复地图显示

    • 再次返回 QGIS 主窗口的“图层”面板。
    • 将之前取消勾选的底图、标注等其他图层重新勾选,让它们在地图上正常显示。
    • 此时,打印布局中的地图画布会显示所有必要的图层,而图例则保持不变,完美地达成了我们的目标。

优势总结:

  • 高效: 避免了在图例属性中手动删除大量项目,尤其在图层超过几十个时优势巨大。
  • 直观: 所见即所得,通过控制图层可见性来直接控制图例内容。
  • 不易出错: 操作流程清晰,不易遗漏或误删。

方法二:手动编辑法(次选方案)

此方法适用于图层数量不多,或者图例已经添加并取消了“自动更新”的场景。

操作步骤:

  1. 添加图例并禁用自动更新

    • 在打印布局中,添加一个标准图例。默认情况下,它会包含所有图层。
    • 选中图例,在“项目属性”面板中,立即取消勾选“自动更新”。
  2. 批量选择并移除项目

    • 在“图例项目”下方的列表中,您可以看到所有图层。
    • 按住 Ctrl 键,用鼠标逐个点选所有您不想显示的图层。
    • 如果不想显示的图层是连续排列的,可以先单击第一个,然后按住 Shift 键再单击最后一个,以选中一个范围内的所有图层。
    • 点击列表下方的 “移除所选项目” 按钮(红色减号图标 ➖),即可将它们一次性从图例中删除。
  3. 完成编辑

    • 重复此过程,直到图例中只剩下您需要的图层。

专业技巧与后续调整

在通过上述任一方法锁定图例后(即取消“自动更新”后),您还可以进行更多精细化调整:

  • 重命名项目: 双击图例中的任意图层名称,可以直接修改其在图例中的显示文本,而不会影响图层本身的名称。
  • 调整顺序: 选中某个项目,使用旁边的上下箭头按钮 🔼 🔽 来自由调整其在图例中的显示顺序。
  • 修改样式: 在“符号”和“字体和文本格式”部分,可以进一步自定义图例的符号大小、字体、颜色和间距等。

QGIS操作手册:管理图层要素计数显示

1. 概述

在QGIS的图层面板中,默认情况下,每个矢量图层名称后面会带有一个括号和数字(如 [123]),这代表该图层当前已加载的要素数量。虽然此功能在数据概览时很有用,但在图层较多或项目追求简洁美观时,我们可能需要关闭它。

本手册旨在指导用户如何关闭现有图层的要素计数,以及如何设置QGIS以使新添加的图层默认不显示该计数。

2. 操作指南

2.1. 关闭单个或多个现有图层的要素计数

此方法适用于项目中已经加载并显示了要素计数的图层。

操作步骤:

  1. 定位图层:在QGIS主界面左侧的“图层”面板中,找到需要操作的图层。

  2. 选择图层:

    • 单个图层:直接在该图层上点击鼠标右键。
    • 多个图层:按住键盘上的 Ctrl 键 (Windows/Linux) 或 Cmd 键 (macOS),然后用鼠标左键逐个点击所有目标图层,将它们全部选中。
  3. 关闭计数:在任何一个被选中的图层上点击鼠标右键,从弹出的上下文菜单中选择 “隐藏要素计数” (Hide Feature Count)。

![图片:一个右键菜单的示意图,突出显示“隐藏要素计数”选项]

效果:所有选定图层名称后面的要素计数将立即消失,使图层列表看起来更整洁。

2.2. 全局设置:禁止为新图层自动显示要素计数

此项为一次性设置。设置后,未来所有添加到QGIS项目中的新图层将默认不显示要素计数,无需再手动关闭。这不会影响项目中已有的图层。

操作步骤:

  1. 打开选项菜单:从QGIS顶部菜单栏中选择 “设置” (Settings),然后点击 “选项...” (Options...)。

  2. 导航至数据源:在弹出的“选项”对话框中,从左侧的菜单列表中选择 “数据源” (Data Sources) 选项卡。

  3. 修改设置:在此面板中,找到名为 “要素源处理” (Feature sources handling) 的区域。

  4. 取消勾选:找到 “为新添加的图层显示要素计数” (Show feature count for newly added layers) 选项,并确保其前面的复选框是未勾选状态。

![图片:QGIS选项对话框的数据源面板截图,并用红色方框圈出“为新添加的图层显示要素计数”的复选框]

  1. 保存设置:点击对话框右下角的“确定”按钮保存更改。

3. 注意事项

  • 设置的适用范围:全局设置仅对新添加的图层有效。对于已经存在于项目中的图层,必须使用2.1节中的手动方法进行关闭。
  • 重新显示计数:如果需要再次查看某个图层的要素数量,只需在该图层上右键单击,然后选择 “显示要素计数” (Show Feature Count) 即可。
  • 版本差异:本指南适用于QGIS 3.x系列版本。菜单项的名称和位置在不同版本中可能略有差异,但功能逻辑基本一致。


QGIS工作空间迁移与同步标准作业手册

引言

为确保QGIS项目在不同设备间的无缝流转与协同工作,以及保持个人工作环境的一致性,特制定本标准作业手册。本手册旨在为团队成员提供清晰、标准的QGIS项目与配置迁移流程。


第一部分:QGIS项目迁移手册 (A电脑 → B电脑)

目标:将一个包含散乱数据文件的QGIS项目(.qgz)从A电脑完整迁移至B电脑,并确保所有图层均可正常加载。

核心原则:建立“项目文件夹”概念,采用相对路径进行数据管理,实现项目的自包含与高可移植性。

推荐方法:标准项目结构与相对路径法

此方法为最稳定、最可靠的官方推荐实践,无需依赖任何第三方插件。

第一步:在源电脑(A)创建标准项目结构

  1. 创建主文件夹:为您的项目创建一个总文件夹,例如 “XX项目-地形分析”。
  2. 创建数据子文件夹:在主文件夹内,创建一个名为 data (或“数据”) 的子文件夹。
  3. 汇总数据:将当前QGIS项目中使用的所有数据文件(如 .shp 相关文件、.tif、.gpkg、.xlsx 等)全部复制并粘贴到新建的 data 子文件夹中。

第二步:在源电脑(A)修复并设置项目

  1. 打开QGIS项目:打开您的 .qgz 项目文件。此时图层会因数据源移动而显示为不可用(图层名前有 ⚠️ 图标)。
  2. 修复数据源:逐一双击不可用的图层,在弹出的窗口中重新指定其数据源,将其链接到 data 文件夹内对应的文件。
  3. 设置相对路径:
    • 在QGIS菜单栏,选择 项目 -> 属性...。
    • 在 常规 选项卡中,找到 保存路径 选项。
    • 将其值从“绝对”修改为 相对。
  4. 保存项目文件:
    • 点击 文件 -> 另存为...。
    • 将项目文件(.qgz)保存到第一步创建的主文件夹根目录下,即与 data 文件夹并列。

第三步:迁移与验证

  1. 迁移:将整个项目主文件夹(例如 “XX项目-地形分析”)通过U盘、网络或云盘完整地复制到目标电脑(B)的任意位置。
  2. 验证:在B电脑上,直接双击主文件夹内的 .qgz 文件。QGIS应能自动根据相对位置找到所有数据,项目将完美加载。

备选方法:自动化打包插件

若项目文件极度散乱,可使用插件进行自动打包。

  • 适用插件:Project Packager 或 QPackageQGZ。
  • 操作简述:在插件市场安装并启用插件后,按照插件界面的指引,选择一个空文件夹作为输出目录,插件会自动完成数据汇总和项目文件重定向的工作。
  • 注意:插件可能存在版本兼容性问题,不如手动设置相对路径法稳定。

第二部分:QGIS软件配置同步手册 (A电脑 → B电脑)

目标:将A电脑上QGIS软件的全部个性化设置(插件、界面布局、工具栏、快捷键、符号库等)同步到B电脑,实现一致的工作体验。

核心概念:QGIS的所有配置都储存在一个名为 “用户配置文件” (User Profile) 的文件夹中。我们只需迁移此文件夹即可。

第一步:在源电脑(A)导出配置文件

  1. 定位配置文件:
    • 在A电脑打开QGIS。
    • 点击菜单栏 设置 -> 用户配置文件 -> 打开当前用户配置文件夹。
    • 系统将自动打开一个文件夹,通常名为 default。
  2. 复制配置文件:返回上一级目录(profiles 目录),将整个 default 文件夹(或您自定义名称的配置文件文件夹)完整复制到U盘或网络位置。

第二步:在目标电脑(B)导入配置文件

  1. 准备目标环境:
    • 确保B电脑已安装与A电脑版本相近的QGIS。
    • 在B电脑上至少运行一次QGIS,以生成初始的配置文件目录。
  2. 定位目标位置:用同样的方法(设置 -> 用户配置文件 -> 打开当前用户配置文件夹)在B电脑上找到 profiles 目录。
  3. 备份并替换:
    • (建议) 将B电脑上原有的 default 文件夹重命名为 default_backup 以作备份。
    • 将从A电脑复制过来的 default 文件夹粘贴到B电脑的 profiles 目录下。

第三步:验证配置

  1. 重启QGIS:关闭B电脑上所有QGIS窗口。
  2. 启动QGIS:重新打开QGIS。此时,您会发现软件的插件、界面布局、工具栏等所有设置均已和A电脑同步。

附注:重要注意事项

  • 版本兼容性:在同步配置文件时,请尽量确保两台电脑的QGIS主版本号一致(例如,都是3.34.x版本),以避免因版本差异过大导致配置出错。
  • 项目与配置的区别:请务必区分项目文件(.qgz + 数据)和软件配置文件。前者关乎“你做的地图内容”,后者关乎“你用的软件环境”。
  • 定期备份:建议定期备份您的用户配置文件,以防意外导致设置丢失。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇