矢量数据格式有哪些?数据结构和质检方法

GIS基础理论
Dr.GIS
wowwwai GIS研习社 · 工具流程与项目排障

刚接触 GIS 项目时,很多同学会先问:矢量数据到底用什么格式保存,SHP、GeoJSON、GeoPackage、PostGIS 又该怎么选?更麻烦的是,同一份道路、地块或管线图层,打开后可能出现字段乱码、面要素自相交、坐标系不对、线段断开、面积统计异常。本文从实际数据交付场景出发,讲清楚矢量数据格式有哪些、常见几何结构,以及数据质检的可复用方法。

先说结论:格式选择不能只看“软件能不能打开”,还要看数据规模、字段类型、坐标系、拓扑关系、多人协作和后续发布方式。日常制图和分析可以从 GeoPackage 或 File Geodatabase 开始,WebGIS 交换常用 GeoJSON,传统测绘交付仍常见 Shapefile,大规模共享和服务化则优先考虑 PostGIS。

矢量数据格式有哪些:先按用途选择容器

这个问题不是单纯背名词。一个格式本质上是在回答三件事:几何怎么存,属性怎么存,空间参考和索引怎么配合。不同项目对这三件事的要求不同,所以格式选择也不同。

  • Shapefile。兼容性强,很多测绘和规划项目仍在使用;缺点是由多个文件组成,字段名长度有限,不适合复杂字段和现代协作。
  • GeoPackage。单文件 SQLite 容器,可存多个图层、索引和属性,适合 QGIS 项目交换和中小规模成果归档。
  • File Geodatabase。ArcGIS Pro 生态常用,适合较完整的工程数据组织、子类型、域值和较大数据量管理。
  • GeoJSON。文本格式,适合 WebGIS、接口交换和调试;大数据量时体积较大,浏览器加载压力明显。
  • KML/KMZ。适合 Google Earth 浏览、简单标注和成果展示,不适合严肃的数据生产和拓扑管理。
  • PostGIS。把空间数据放进 PostgreSQL,适合多用户编辑、空间查询、服务发布和长期数据资产管理。
矢量数据格式有哪些与质检流程图
选择矢量数据格式时,要同时考虑点线面结构、属性字段、坐标系、拓扑关系和后续发布方式。

问题背景:为什么同一份数据换格式后会出错

真实项目里,问题通常不是“打不开”,而是打开以后不可信。比如规划红线从 CAD 转成 SHP 后字段被截断,村界面图层合并后出现空洞,管线数据导入数据库后坐标偏到国外,GeoJSON 发给前端后页面卡顿。这些问题都和格式、结构和质检流程有关。

最常见的根因有四类。第一,格式能力不一致,例如 Shapefile 对字段名、编码和单字段类型支持有限。第二,坐标系元数据丢失或被误指定,导致数据显示位置正确但量算错误。第三,几何合法性没有检查,面自相交、线重复、点重叠会影响叠加分析。第四,WebGIS 或数据库场景没有建立空间索引,查询和渲染性能会明显下降。

不要把格式转换当作“另存为”。一次合格的转换至少要验证坐标系、字段、要素数量、几何类型、范围和关键拓扑关系。

核心原理:矢量数据结构由几何、属性和空间参考组成

矢量数据结构的核心是用坐标串描述真实世界对象。点表示井盖、站点、采样点;线表示道路、河流、管线;面表示地块、行政区、湖泊。几何本身只说明形状和位置,属性表才说明对象的名称、编号、等级、用途、权属或时间等业务信息。

一个完整图层通常包含四部分:

  • 几何。点、折线、多边形、多点、多线、多面,以及是否包含 Z 值或 M 值。
  • 属性。字段名、字段类型、编码、空值规则、唯一编号和业务分类。
  • 空间参考。地理坐标系、投影坐标系、坐标单位、EPSG 编码或自定义投影参数。
  • 索引与约束。空间索引、属性索引、主键、唯一约束、拓扑规则或域值范围。

理解这套结构后,很多错误就容易定位。面积计算不对,通常先查投影坐标系;道路分析断网,先查线端点是否连接;行政区统计漏算,先查面是否重叠、缝隙或自相交;字段统计异常,先看字段类型是不是文本而不是数值。

步骤一:按项目场景选择矢量数据格式

如果你只是学习 GIS 或做单机分析,建议优先使用 GeoPackage。它是单文件,复制方便,能存多个图层,也比一组 Shapefile 文件更不容易丢失组成部分。QGIS 中可以直接新建 GeoPackage 图层,ArcGIS Pro 也能读取常见矢量格式。

如果项目在 ArcGIS Pro 体系内生产,并且需要域值、子类型、较复杂的数据组织,File Geodatabase 更合适。如果要给 Leaflet、OpenLayers 或后端接口做轻量交换,GeoJSON 更直观,但上线前要控制要素数量、字段冗余和坐标精度。

如果团队需要多人编辑、权限控制、空间查询和地图服务发布,建议把核心数据放入 PostGIS。这样可以用数据库约束控制字段质量,用空间索引提高查询效率,也方便通过 GeoServer、MapServer 或自研接口发布服务。

格式 适合场景 主要限制
Shapefile 传统交付、跨软件交换、简单点线面图层 多文件组成,字段名和类型受限,编码容易出问题
GeoPackage QGIS 项目、课程练习、中小数据归档 多人并发编辑能力有限,超大数据需评估性能
File Geodatabase ArcGIS Pro 工程化生产、完整成果库 更依赖 Esri 生态,跨平台自动化需提前测试
GeoJSON WebGIS 前端、接口调试、轻量数据交换 文本体积大,不适合直接承载大规模图层
PostGIS 数据资产管理、多用户协作、空间查询和服务发布 需要数据库维护、权限设计和备份策略

步骤二:用 QGIS 或 ArcGIS Pro 检查结构是否正确

拿到一份数据后,不要马上叠加分析。先在 QGIS 或 ArcGIS Pro 中检查图层属性、空间参考和几何类型。这个步骤可以快速发现“看起来能显示,但实际不能分析”的隐患。

  1. 查看图层坐标系。确认 EPSG 编码、单位和项目坐标系是否一致。经纬度坐标不能直接用于严肃面积和长度统计。
  2. 查看几何类型。道路应是线,地块应是面,采样点应是点;混合几何会影响很多处理工具。
  3. 查看字段结构。编号字段是否唯一,分类字段是否有空值,面积和长度字段是否是数值类型。
  4. 查看范围。图层范围是否落在项目区域内,是否存在异常远点导致范围被拉大。
  5. 查看要素数量。转换前后要素数量是否一致,是否出现空几何或重复要素。

QGIS 中可用“图层属性”“字段统计”“检查有效性”“拓扑检查器”等工具。ArcGIS Pro 中可用“修复几何”“检查几何”“添加空间索引”“汇总统计数据”等工具。工具名称不同,但检查逻辑是一致的。

步骤三:矢量数据质检的可复用流程

矢量数据质检建议分成六步做,而不是只跑一个“修复几何”。因为几何合法只是底线,项目交付还要关注坐标、属性、拓扑和业务规则。

  1. 坐标系质检。检查图层声明坐标系、实际坐标范围和项目要求是否一致。不要把“定义投影”和“投影转换”混为一谈。
  2. 几何合法性质检。检查空几何、自相交、多边形环方向异常、重复节点、零长度线和零面积面。
  3. 拓扑质检。面图层检查重叠和缝隙,线图层检查悬挂点和伪节点,点图层检查重复点和是否落入目标区域。
  4. 属性质检。检查必填字段、唯一编号、分类值范围、字段类型、中文编码和异常空值。
  5. 数量与范围质检。比较转换前后要素数量、总长度、总面积、外包范围和关键统计值。
  6. 抽样复核。在地图上人工查看典型区域,特别是边界、交叉口、拼接线和数据来源切换位置。

如果数据进入 PostGIS,可以把部分规则写成 SQL,形成可重复检查。例如查找无效几何、重复编号和缺少空间索引的问题。

-- 检查无效几何
SELECT id, ST_IsValidReason(geom)
FROM parcel
WHERE NOT ST_IsValid(geom);

-- 检查重复业务编号
SELECT parcel_code, COUNT(*)
FROM parcel
GROUP BY parcel_code
HAVING COUNT(*) > 1;

-- 检查是否已有空间索引
SELECT indexname, indexdef
FROM pg_indexes
WHERE tablename = 'parcel';

对于 Python 自动化,可以用 GeoPandas 批量检查字段、坐标系、空几何和范围。下面示例适合做交付前的轻量体检,不替代完整拓扑质检。

import geopandas as gpd

gdf = gpd.read_file("parcel.gpkg", layer="parcel")

print("CRS:", gdf.crs)
print("Feature count:", len(gdf))
print("Geometry types:", gdf.geometry.geom_type.value_counts())
print("Empty geometry:", gdf.geometry.is_empty.sum())
print("Null geometry:", gdf.geometry.isna().sum())
print("Bounds:", gdf.total_bounds)

required_fields = ["parcel_code", "land_use"]
for field in required_fields:
    print(field, "null count:", gdf[field].isna().sum())

常见坑点:格式转换后不要只看图能不能显示

  • 把坐标系定义错当作转换。如果数据本身是 CGCS2000 投影坐标,却被强行定义成 WGS84,经纬度显示可能完全错位。
  • 忽略 Shapefile 字段限制。长字段名被截断后,脚本、样式和统计模板可能找不到原字段。
  • GeoJSON 直接上生产大图层。前端一次加载几万到几十万要素时,解析和渲染都会成为瓶颈,应考虑切片、矢量瓦片或服务端过滤。
  • 面图层没有做拓扑检查。叠加分析时,重叠和缝隙会让统计结果出现重复或漏算。
  • 数据库导入后忘记建空间索引。PostGIS 中没有 GiST 索引时,空间查询性能可能非常差。
  • 只修复不记录。质检报告应记录发现的问题、修复方法和剩余风险,方便后续追溯。

矢量数据与栅格数据的区别:什么时候不要互相替代

矢量数据与栅格数据的区别主要体现在表达方式。前者用点、线、面表达离散对象,适合道路、地块、行政区、管线、POI 等边界明确的对象;后者用像元矩阵表达连续表面,适合遥感影像、高程、温度、降雨和土地覆盖概率。

项目中不要简单地说哪一种更高级。地块确权、管线巡检、道路网络分析更依赖点线面结构;坡度分析、影像分类、适宜性评价更依赖栅格。两类数据经常结合使用,例如用行政区面统计栅格人口,用道路缓冲区裁剪遥感影像,或者把分类栅格矢量化后做地类汇总。

对比项 矢量 栅格
表达对象 点、线、面等边界明确的实体 连续表面或规则像元矩阵
典型数据 道路、宗地、行政区、管线、站点 影像、DEM、温度、降雨、土地覆盖
适合分析 叠加、缓冲、网络、拓扑、空间查询 栅格计算、地形分析、分类、连续面建模
主要风险 拓扑错误、字段错误、坐标系错误 分辨率不匹配、重采样误差、像元对齐问题

工具和方法对比:QGIS、ArcGIS Pro、GeoPandas、PostGIS怎么分工

单个工具很难覆盖全部数据生命周期。桌面软件适合可视化检查和人工编辑,脚本适合批量重复检查,数据库适合长期管理和服务化。

  • QGIS。适合学习、格式转换、坐标处理、拓扑检查和快速制图。GeoPackage 工作流尤其顺手。
  • ArcGIS Pro。适合企业级工程数据、地理数据库、制图表达和较完整的地理处理流程。
  • GeoPandas。适合批量读取、字段检查、格式转换和自动化报告,但复杂拓扑规则需要配合其他工具。
  • PostGIS。适合空间索引、SQL 质检、多用户协作、服务发布和生产数据资产管理。

一个稳妥的流程是:先在 QGIS 或 ArcGIS Pro 中人工确认样本和坐标,再用 GeoPandas 批量扫描字段和基础几何问题,最后把正式数据导入 PostGIS,建立索引、约束和质检 SQL。这样既能看得见问题,也能让检查过程可重复。

实践检查清单

交付或入库前,可以按下面清单快速复核:

  • 项目要求的格式是否明确,是否需要同时交付源数据、发布数据和备份数据。
  • 坐标系是否正确声明,是否完成必要的投影转换。
  • 几何类型是否单一,是否存在空几何、无效几何和异常范围。
  • 点线面拓扑规则是否符合业务要求,例如面不重叠、线端点连接、点落入指定面。
  • 字段名、字段类型、编码、必填项和唯一编号是否符合数据字典。
  • 转换前后要素数量、面积、长度和关键字段统计是否一致或差异可解释。
  • WebGIS 使用的数据是否做了简化、分页、切片或服务端过滤。
  • PostGIS 表是否建立主键、空间索引和必要的属性索引。
  • 质检结果是否形成记录,修复动作是否可追溯。

FAQ:格式、结构、质检和栅格对比

矢量数据格式有哪些,新手应该先学哪几个?

常见答案包括 Shapefile、GeoPackage、GeoJSON、File Geodatabase、KML/KMZ 和 PostGIS。新手建议先掌握 Shapefile 的兼容性和限制,再把 GeoPackage 作为日常练习格式,最后学习 GeoJSON 和 PostGIS,分别对应 WebGIS 交换和数据库管理。

矢量数据结构是不是只包含点线面?

不是。矢量数据结构除了点、线、面几何,还包括属性字段、空间参考、索引和约束。做分析时,这些内容同样重要。只有几何没有字段,无法表达业务含义;只有字段没有正确坐标系,空间分析结果也不可靠。

矢量数据质检必须用专业软件吗?

矢量数据质检可以组合完成。QGIS 和 ArcGIS Pro 适合交互式检查、修复几何和查看拓扑问题;GeoPandas 适合批量扫描字段和基础几何;PostGIS 适合把重复规则写成 SQL。关键不是工具越多越好,而是每次都按同一套规则检查。

矢量数据与栅格数据的区别会影响格式选择吗?

会。矢量数据与栅格数据的区别决定了它们适合的存储和分析方法。道路、边界和管线应优先保存为点线面;遥感影像、DEM 和连续环境变量应保存为栅格。不要为了统一格式而强行转换,否则会引入精度损失或拓扑问题。

为什么 Shapefile 打开正常,但字段和中文经常出问题?

Shapefile 兼容性好,但它是较老的格式,字段名长度、字段类型和编码处理都有历史限制。跨软件传递时,中文编码、长字段名和日期字段最容易出问题。若没有强制交付要求,日常编辑和归档更建议使用 GeoPackage 或数据库。

总结

理解矢量数据,不要停留在“点线面”和“能打开”两个层面。真正可用的数据必须同时满足格式合适、结构清楚、坐标正确、属性可靠和拓扑可检查。格式负责承载,结构负责表达,质检负责让结果可信。

实际工作中可以记住一个顺序:先根据应用场景选择格式,再检查几何和字段结构,随后按坐标、几何、拓扑、属性、数量和范围做质检,最后根据发布方式决定是否进入 PostGIS、GeoJSON 或矢量瓦片流程。这样处理,数据在制图、分析和 WebGIS 发布中都更稳定。