从历法到GIS:探索天地规律的技术演进与应用——经纬绘山河(刍议)

文章目录[隐藏]

缘起

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

思路

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. 执行并保存更改

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

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

第二部分: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
小恐龙
花!
上一篇