GIS工具箱
在线查看

Shapefile 文件结构解析与在线查看

Shapefile 的 .shp/.dbf/.shx 文件关系,浏览器端解析原理,导出 GeoJSON。

ShapefileSHPDBFGeoJSON

Shapefile 文件结构解析与在线查看

Shapefile 是由 ESRI(Environmental Systems Research Institute)开发的一种矢量地理数据格式,广泛应用于 GIS 领域。许多开发者初次接触时容易产生一个误解:认为 Shapefile 就是单个 .shp 文件。实际上,一个完整的 Shapefile 是由多个文件组成的文件集合,这些文件共享相同的主文件名,但扩展名不同。

核心文件组成

一个标准的 Shapefile 至少包含以下三个核心文件,缺一不可:

  • .shp —— 存储几何数据
  • .dbf —— 存储属性数据
  • .shx —— 存储空间索引

此外,常见的可选文件还包括 .prj(投影信息)、.cpg(编码声明)等。

.shp 文件:几何数据

.shp 文件以二进制格式存储几何要素的坐标数据,是 Shapefile 的核心。它支持三种基本几何类型:

  • 点(Point):单个坐标对,如兴趣点位置
  • 线(LineString/PolyLine):有序坐标序列,如道路、河流
  • 面(Polygon):闭合环坐标,如行政区划、地块边界

文件内部通过文件头(File Header)记录几何类型、边界范围等元信息,随后以记录(Record)为单位逐一存储每个要素的几何数据。

.dbf 文件:属性数据

.dbf 文件采用 dBASE 表格式存储属性数据,其结构类似一张数据库表。每行对应一个几何要素,每列代表一个属性字段。例如,一个省级行政区划 Shapefile 的 .dbf 可能包含 名称人口面积 等字段。

需要注意的是,dBASE 格式存在字段名长度限制(通常为 10 个字符),且日期字段以 `YYYYMMDD` 字符串形式存储。

.shx 文件:空间索引

.shx 文件是几何记录的偏移索引,本质上是一个定长记录的索引表。它记录了每个要素在 .shp 文件中的起始偏移量和内容长度,使得程序可以快速定位到特定要素,而无需从头遍历整个 .shp 文件。

浏览器端解析

得益于 JavaScript 生态的发展,现在可以直接在浏览器中解析 Shapefile。常用的方案是使用 shpjs 库,它支持以下两种输入方式:

  1. 分别上传 .shp.dbf 文件进行解析
  2. 直接解析 .zip 打包文件(推荐,避免文件遗漏)
import shp from 'shpjs';

// 解析 zip 打包的 Shapefile
const geojson = await shp(zipBuffer);
console.log(geojson); // GeoJSON FeatureCollection

转换为 GeoJSON

shpjs 解析后会自动将结果转换为 GeoJSON 的 FeatureCollection 结构。每个几何要素变为一个 Feature.dbf 中的属性自动映射到 Feature.properties,方便后续在 Leaflet、Mapbox 等地图库中直接渲染。

注意事项

在实际使用中,有几个常见问题需要特别关注:

  • 文件编码:中文属性常出现乱码。旧版 Shapefile 多使用 GBK 编码,而 GeoJSON 标准要求 UTF-8。解析时需注意编码转换,.cpg 文件可声明所用编码。
  • 多部件几何:一个面要素可能由多个独立环组成(如岛屿群),解析后对应 GeoJSON 的 MultiPolygon 类型。
  • 空几何处理:某些要素可能存在空几何,需在转换时做容错处理,避免渲染异常。
  • 文件完整性:缺少 .shx.dbf 会导致解析失败,建议以 .zip 形式打包传输所有相关文件。

在线查看工具

如果你想快速查看 Shapefile 的内容而无需安装桌面 GIS 软件,可以使用在线工具直接解析并在地图上可视化。访问 Shapefile 在线查看工具,上传 .zip 文件即可自动解析并展示几何图形与属性表。

本文涉及的工具

打开工具 →

相关文章