GIS数据GIS DATA

GeoJSON 与 Shapefile 怎么选:结构、编码与场景对照

技术专栏 · 数据格式 · 2026-09-17

两种格式的分工

矢量地理数据长期由两套格式分治:GeoJSON 占据 Web 与数据管道,Shapefile(SHP)占据桌面 GIS。前者是纯文本的 JSON,后者是二进制文件组的集合。多数「格式烦恼」的根源,都是拿其中一种去做另一种更擅长的事。

结构:单文件与「五件套」

GeoJSON 是单一文本文件,本质是一个 FeatureCollection:每个 Feature 带几何(geometry)与属性(properties),属性即普通 JSON 对象,字段名与类型都不受限,可直接用文本编辑器阅读。把一个面复制到其他文件、用脚本批量改写字段,都属于文本层面的操作。

Shapefile 由一组文件协同工作,常被称作「五件套」:.shp 存几何、.shx 存索引、.dbf 存属性表(dBase 格式)、.prj 存坐标系定义、.cpg 声明属性编码。缺任何一个都可能出问题——缺 .prj 会丢失坐标系定义,缺 .cpg 则中文属性可能乱码。它的优势在于桌面 GIS 生态的原生支持:ArcGIS、QGIS 打开即用,属性表可编辑、可关联。

字段与编码:中文字段处理的差异

Shapefile 的 .dbf 属性表字段名限制为 10 个字符,中文属性依赖 .cpg 正确声明编码(UTF-8 或 GBK);拷贝文件时漏掉 .cpg,是中文乱码最常见的成因。GeoJSON 采用 UTF-8 文本,中文键值无损,字段名长度也不受限,配合区划代码字段(如 name / gb)可以直接当作业务表使用。

两套格式的字段惯例并不相同。获取他人数据时,先用 QGIS 或文本编辑器打开属性结构确认一遍,再决定接入方式。

体积与性能

同样的面要素,文本化的 GeoJSON 通常比二进制 Shapefile 更大,浏览器解析大 JSON 也有明显开销。乡镇级、村级这类大数据量场景,通行做法是传输层压缩(gz / zip)、服务端按需切片、客户端按视口加载。Shapefile 在桌面软件中因具备索引与二进制结构,打开大数据反而更从容。

按场景选型

互转方法

装有 GDAL 时,ogr2ogr 一行即可完成互转。例如把 GeoJSON 转为 Shapefile:ogr2ogr -f "ESRI Shapefile" out.shp in.geojson -lco ENCODING=UTF-8。未安装 GDAL 也可用 QGIS 图形界面导出,或直接在本站的地图工作台中加载数据后选择 SHP 格式导出(转换在浏览器端完成)。

延伸阅读:转换之前应先把坐标系确认清楚,见《中国大陆地图坐标系入门》;获取数据后要做填色图,见《行政区划填色图制作指南》。

常见问题

Shapefile 会被淘汰吗?
短期内不会,桌面 GIS 的存量生态太大。但新项目里 GeoJSON(以及 GeoPackage、FlatGeobuf 等现代格式)的份额在快速上升,尤其是 Web 与数据管道场景。
为什么我的 SHP 打开中文全是问号?
十有八九是 .cpg 丢失或声明错误。用文本编辑器新建一个同名 .cpg 文件写入「UTF-8」即可修复多数情况;源头修复则是导出时指定 UTF-8 编码。
GeoJSON 能存点线面之外的类型吗?
可以存栅格的引用但不适合存栅格本身;它是矢量格式,影像请用 GeoTIFF / COG。
本站的数据两种格式都提供吗?
边界包以 GeoJSON 交付(乡镇包内含官方版与聚合版两个 GeoJSON),任何数据都可以在工作台免费预览后按 SHP 格式导出。
中国行政区划的 shp / GeoJSON 数据从哪里下载?
四条常见路径:官方渠道(区县自然资源部门依申请公开,或天地图、全国地理信息资源目录服务系统发布的公众版矢量数据)权威性最高,但申请链路较长、覆盖粒度有限;地方数据开放平台可直接下载已公示的辖区数据,覆盖零散;地图厂商开放接口能下钻到乡镇甚至村级,但返回 GCJ-02 坐标,需转换后使用;第三方整理数据集省去申请时间,代价是来源、时效与授权状态需要自行核验。本站属于最后一类:按四级整理为 WGS84,可在地图工作台预览后按 GeoJSON 或 SHP 取用,整包见省市区县、乡镇与村界各数据页。