百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文
QGIS制图美学必修课:如何让精心设计的样式"永不消失"

QGIS制图美学必修课:如何让精心设计的样式"永不消失"

  • 网站名称:QGIS制图美学必修课:如何让精心设计的样式"永不消失"
  • 网站分类:技术文章
  • 收录时间:2025-06-12 10:33
  • 网站地址:

进入网站

“QGIS制图美学必修课:如何让精心设计的样式"永不消失"” 网站介绍

QGIS制图美学必修课:如何让精心设计的样式"永不消失"

前言

前文中,“告别 MapInfo!零插件玩转 QGIS 扇形覆盖分析”教大家如何零插件,完成扇区图制作,开始利用分析,我们通过符号化,给图层生成了很好看,很鲜明的色彩,这里你会感慨,GIS 真是一门艺术啊,玩的好的,赏心悦目,欣赏下美图

你们认为呢,好看不。

这个时候,我们发现,我们这个图层还没有”永久化“保存呢,因此,我们习惯把图层保存成 SHP 格式,平时也用的多。

保存完毕后,重新打开,发现我们刚才符号化的样式都没了,又得重新设置,好麻烦那。

那我们常用的几个格式,有什么区别呢,会不会都会丢失样式呢。

查阅文档,总结如下,后面,我们就细来讲解 TAB 格式保存样式的两个办法


地理信息格式对比 SHP、TAB、KML、KMZ

以下为 SHP、TAB、KML、KMZ 四种地理信息格式的对比分析,涵盖核心区别与样式保存能力。

1. SHP(Shapefile)

  • 特性
    • 结构:由多个文件构成(.shp 用于存储几何信息,.dbf 用于存储属性信息,.shx 用于存储索引信息),需配套使用。
    • 用途:是 Esri 开发的矢量数据标准格式,在 GIS 领域(如 ArcGIS、QGIS)广泛应用。
    • 坐标系:支持多种坐标系,需借助.prj 文件进行定义。
    • 样式保存不支持直接保存样式,样式依赖 GIS 软件设置或关联符号库(如.lyr 文件)。

2. TAB(MapInfo 格式)

  • 特性
    • 结构:为 MapInfo 专有格式,包含.tab(元数据)、.dat(属性)、.map(图形)等文件。
    • 用途:主要用于 MapInfo 软件,支持点、线、面及复杂符号。
    • 坐标系:支持自定义坐标系,但需通过软件进行配置。
    • 样式保存支持样式保存(如颜色、线型、填充),样式信息直接嵌入文件之中。

3. KML/KMZ(Keyhole Markup Language)

  • 特性
    • 结构
      • KML:基于 XML 的文本格式,可包含几何、属性及样式(如图标、颜色、标签)。
      • KMZ:压缩的 KML 包,可嵌入图片、模型等资源。
    • 用途:是 Google Earth 标准格式,适合网络共享与可视化展示。
    • 坐标系:固定采用 WGS84 地理坐标系。
    • 样式保存支持直接保存样式(如点图标、线宽、多边形颜色),样式通过 XML 标签进行定义。

核心区别总结

格式

类型

结构

坐标系支持

样式保存能力

典型场景

SHP

矢量

多文件

灵活

依赖外部配置

GIS 数据分析

TAB

矢量

多文件

自定义

直接支持

MapInfo 专业制图

KML

矢量/栅格

单 XML 文件

WGS84

直接支持

网络地图展示

KMZ

矢量/栅格

压缩包

WGS84

直接支持

复杂项目(含资源)

总结:

应用上有几个建议

  • GIS 数据交换与分析:优先选用 SHP(跨平台兼容性强)。
  • 地图可视化与共享:选择 KML/KMZ(支持丰富样式,兼容 Google Earth)。
  • MapInfo 用户:使用 TAB 格式以保留完整样式和符号。

但实践上面,KML 的格式转换保存样式,QGIS 仍然有些问题,因此,从先天条件上 TAB 格式,是有优势,下面篇幅,我们就讲如何另存导出 TAB 格式,并完整保存了符号化要素的样式。


Mapinfo TAB 格式,如何保存

1)方法 1:图形化导出(新手友好)

  1. 右键图层 → 选择"导出" → "保存要素为"
  1. 关键设置:
  • 格式:MapInfo TAB
  • 编码:CP936(中文兼容)
  • 勾选保留图层元数据:这个是关键参数,选择 “要素符号”或者“符号图层符号化”(核心选项!)
  1. 避坑提示:属性字段建议使用英文命名,避免 MapInfo 乱码

在这里我,补充个建议,在制作图层里,可属性用非中文,因为 Mapinfo 在转换时,对属性中文支持还是不够好,就是编码是 CP936,还是会乱码,这一点,大家用这个方法的,可以注意下。

2)方法 2:通过编写 Python 脚本,一次性导出(本方法比较专业,要有一定动手能力,可以解决属性乱码问题,这里部分代码,改自申少军工具,大家也可以去用用申少军的工具)

① 菜单【插件】->【Python 控制台】,然后,在图层里选择一下,你要导出的图层。

② 在 Python 控制台上,新建一个脚本文档,命名为 e2tab.py【脚本可以在文后有获取方法】,把脚本复制进去,

    # 示例代码片段(展示核心功能)
    def export_to_tab(self, layer, output_path=None):
        """
        导出图层为TAB文件
        :param layer: 要导出的QGIS图层
        :param output_path: 可选输出路径
        :return: 成功返回输出路径,失败返回None
        """
        try:
            self.validate_layer(layer)

            if not output_path:
                output_path = self.get_output_path(f"{layer.name()}.tab")
                if not output_path:  # 用户取消
                    return None

            # 预处理字段名
            field_names=self.sanitize_field_names(layer)

            # 配置导出选项
            options = QgsVectorFileWriter.SaveVectorOptions()
            options.driverName = "MapInfo File"
            options.fileEncoding = self.encoding

(完整脚本获取方式见文末)

选点圆 3 运行一下脚本,然后在圆 4 控制台位置,调用下 run_export0() ,接下来,按指引操作。

成功导出。



获取方法:

  1. 未关注的朋友,请先关注下(很关键,不然无法自动回复)
  1. 关注公众号【不挨踢笔记】消息窗口,发送关键词 e2tab ,自动发下载链接。
  2. 如果没找到地方的,可以在讨论区留个“有需要”,我有看到了,会私发给各位。也欢迎大家给点个赞、在看