SHP转GeoJSON在线转换与ogr2ogr方法
SHP转GeoJSON在线转换与ogr2ogr方法
在 WebGIS 项目里,很多数据最初来自规划、国土、测绘或 ArcGIS 工作流,交付格式往往是 Shapefile。但前端地图、接口调试和轻量数据共享更常用 GeoJSON。SHP转GeoJSON看起来只是格式转换,实际会同时牵涉文件组完整性、坐标系、中文编码、字段长度和文件体积。
本文按真实项目流程讲清楚:什么时候适合用在线工具,什么时候应该用 QGIS 或命令行,如何用 ogr2ogr SHP转GeoJSON,以及转换后怎样检查坐标、属性和几何是否正确。
SHP转GeoJSON前先确认问题背景
Shapefile 不是单个文件,而是一组同名文件。至少需要 .shp、.shx、.dbf,通常还会有 .prj 和 .cpg。其中 .shp 存几何,.dbf 存属性,.prj 存坐标参考系统,.cpg 影响中文编码。如果只上传一个 .shp 文件,在线工具或脚本很可能无法得到完整结果。
GeoJSON 则是文本格式,适合浏览器读取、接口返回、Leaflet 或 OpenLayers 加载,也方便在 Git、接口文档和调试工具中查看。但它也有明显限制:文件较大时浏览器加载会卡顿,面数据坐标点太密会影响渲染,字段过多会让网络传输变慢。因此,做SHP转GeoJSON前要先判断数据用途,而不是机械地把所有 Shapefile 都转成 GeoJSON。
核心原理:SHP和GeoJSON差异在哪里
理解两种格式的差异,才能判断转换参数是否正确。Shapefile 是传统 GIS 文件格式,几何、属性、索引、投影和编码分散在多个文件中;GeoJSON 是基于 JSON 的矢量数据格式,通常把几何和属性放在一个文本文件里。
| 对比项 | Shapefile | GeoJSON |
|---|---|---|
| 文件组织 | 多文件组成,需要同名文件组保持完整 | 通常一个 .geojson 或 .json 文件 |
| 常见用途 | 桌面 GIS、数据生产、传统地理处理流程 | WebGIS 展示、接口返回、轻量共享和调试 |
| 坐标系处理 | 依赖 .prj 或软件指定 CRS |
WebGIS 场景通常建议输出经纬度坐标 |
| 属性编码 | 受 DBF 和 .cpg 影响,中文可能乱码 |
文本一般使用 UTF-8,更适合前端和接口 |
| 性能风险 | 桌面软件读取相对稳定 | 大文件在浏览器中加载、解析和渲染可能变慢 |
很多转换问题并不来自 GeoJSON 本身,而是源 SHP 的信息不完整。例如缺少 .prj 时,工具不知道原始坐标是什么意思;缺少 .cpg 时,中文字段可能在转换后变成乱码;几何本身有自相交或空几何时,输出文件虽然生成了,但 WebGIS 加载后可能显示异常。
在线转换:适合快速预览但不要盲目上传
SHP转GeoJSON在线工具适合小数据、公开数据、临时预览和教学演示。它的优点是不用安装软件,浏览器上传压缩包后就能得到 GeoJSON。对初学者来说,在线转换可以帮助快速理解 Shapefile 和 GeoJSON 的对应关系。
但在线转换不适合所有项目。涉密数据、客户数据、带个人信息的地块或地址数据,不应上传到不明网站。文件较大、坐标系复杂、中文编码不确定、字段需要清洗时,也不建议只依赖在线工具。
- 先把完整 Shapefile 文件组放在同一目录,包括
.shp、.shx、.dbf、.prj和.cpg。 - 把这一组文件压缩成一个
.zip,不要只压缩.shp。 - 在在线转换工具中上传压缩包,选择输出格式为 GeoJSON。
- 如果工具提供坐标系选项,确认源 CRS 和目标 CRS,不要随意选择常见 EPSG。
- 下载结果后,用 QGIS、VS Code 或浏览器地图页面检查坐标和属性。
如果只是学习格式转换,在线工具够用;如果是生产数据处理,建议至少用 QGIS 或命令行复现一遍,保留明确的参数和处理记录。
QGIS方法:用另存为输出GeoJSON
QGIS 适合不熟悉命令行的用户。它能直接加载 Shapefile,查看属性表、坐标系和几何范围,然后通过“另存为”输出 GeoJSON。这个流程比在线工具更可控,也更适合带中文字段和坐标系检查的场景。
- 打开 QGIS,新建项目,把完整 Shapefile 中的
.shp拖入地图窗口。 - 右键图层,打开属性表,检查中文字段、字段值和要素数量是否正常。
- 右键图层,查看图层属性中的 CRS,确认源坐标系是否正确识别。
- 右键图层,选择“导出”或“另存为”。
- 格式选择
GeoJSON,文件名填写parcels.geojson一类的输出路径。 - 如果用于 WebGIS 展示,目标 CRS 可按项目要求选择常用经纬度坐标系;如果用于内部分析,应遵循项目坐标系规范。
- 保存后重新加载输出 GeoJSON,叠加底图或原始图层检查位置是否一致。
QGIS 的优势是可视化检查方便。特别是新手做格式转换时,先看一眼范围、属性和坐标,比直接拿命令跑批处理更稳妥。
ogr2ogr SHP转GeoJSON:命令行标准做法
ogr2ogr SHP转GeoJSON适合批处理、自动化、服务器环境和可复现的数据生产流程。它属于 GDAL/OGR 工具链,能读取 Shapefile,也能输出 GeoJSON,并可同时处理坐标转换、字段选择、编码和几何修复等任务。
最简单的转换命令如下。假设源文件是 parcels.shp,输出文件是 parcels.geojson。
ogr2ogr -f GeoJSON parcels.geojson parcels.shp
如果源 SHP 坐标系正确,并且你要把结果用于 WebGIS,通常会指定目标坐标系。例如把数据转换为经纬度坐标:
ogr2ogr -f GeoJSON -t_srs EPSG:4326 parcels.geojson parcels.shp
如果源数据缺少 .prj,但你已经从数据说明中确认它的真实源坐标系,可以显式指定源 CRS。下面示例表示源数据按 EPSG:4547 解释,再转换为 EPSG:4326:
ogr2ogr -f GeoJSON -s_srs EPSG:4547 -t_srs EPSG:4326 parcels.geojson parcels.shp
这里要特别区分 -s_srs 和 -t_srs。-s_srs 是告诉工具源坐标怎么理解,-t_srs 是输出目标坐标系。只有源 CRS 真实可靠时,ogr2ogr 才能计算出正确的目标坐标。不要为了让命令通过而随便填写一个 EPSG 编号。
处理中文编码和字段:避免GeoJSON属性乱码
Shapefile 的属性存储在 DBF 中,中文编码常见问题比较多。转换成 GeoJSON 后,如果字段名或属性值变成乱码,通常要回头检查 .cpg 文件、源数据编码和工具读取参数。
如果已知源 DBF 是 GBK 编码,可以在使用 GDAL/OGR 时设置 Shapefile 编码选项。不同系统环境下参数写法可能略有差异,常用思路是显式指定源编码,再输出 UTF-8 的 GeoJSON。
ogr2ogr -f GeoJSON -oo ENCODING=GBK parcels.geojson parcels.shp
如果转换结果仍然乱码,建议用 QGIS 打开源 SHP,手动选择正确编码后另存为 GeoJSON,或先把 Shapefile 规范化为 GeoPackage,再输出 GeoJSON。对批量任务,可以先抽取几条中文样本检查,不要等全部入库或上线后才发现属性不可读。
- 字段名尽量使用英文、数字和下划线,避免前端访问属性时出现兼容问题。
- 长文本字段要检查是否在 DBF 阶段已经被截断,转换成 GeoJSON 不能恢复已丢失内容。
- 日期、编号和行政区划代码建议保持字符串,避免前端或表格软件自动改格式。
- 转换后打开 GeoJSON,搜索几条中文样本,确认没有乱码和空值异常。
常见坑点:坐标系、文件体积和几何问题
生产环境中的格式转换,最容易出问题的不是命令本身,而是源数据质量和输出用途没有想清楚。
- 只拿到一个 .shp 文件。没有
.shx、.dbf和.prj时,几何、属性和坐标系都可能不完整。 - 源坐标系不明。不要直接转为 EPSG:4326。先确认源 CRS,再做坐标转换。
- WebGIS加载很慢。GeoJSON 是文本格式,大面数据和高密度折线应先简化、切片或改用矢量瓦片。
- 中文字段乱码。检查
.cpg和 DBF 编码,必要时在 QGIS 中指定编码后重新导出。 - 几何错误。自相交、多部件异常、空几何可能导致前端渲染不完整,转换前可在 QGIS 中运行几何检查或修复。
- 属性过多。WebGIS 只需要展示字段时,应筛掉冗余字段,减少 GeoJSON 体积。
如果输出给前端使用,建议把转换结果分成两个检查维度:一是 GIS 正确性,包括坐标、范围、几何和属性;二是 Web 性能,包括文件大小、字段数量、坐标精度和渲染速度。
工具和方法对比:在线、QGIS还是ogr2ogr
不同方法没有绝对优劣,关键看数据敏感性、批量规模和是否需要保留处理记录。
| 方法 | 适合场景 | 优点 | 注意点 |
|---|---|---|---|
| 在线转换 | 公开小数据、教学演示、临时预览 | 不用安装软件,上手快 | 不适合敏感数据、大文件和复杂坐标系 |
| QGIS另存为 | 手动转换、检查坐标和属性、处理中文字段 | 可视化检查方便,适合初学者 | 批量任务效率较低,参数记录不如脚本清晰 |
| ogr2ogr命令行 | 批处理、自动化、服务器转换、可复现流程 | 参数明确,适合脚本化和流水线 | 需要理解 CRS、编码和命令参数 |
实际项目中可以组合使用:先用 QGIS 检查一份样例,确认坐标系、编码和字段,再把同样规则写成 ogr2ogr 命令批量处理。这样既有可视化验证,也有自动化效率。
实用检查清单:转换后必须看这几项
- 确认输出文件能被 QGIS、Leaflet 或 OpenLayers 正常加载。
- 检查要素数量是否和源 SHP 一致,避免转换中丢要素。
- 检查图层范围是否落在正确城市、省份或项目区。
- 叠加原始 SHP 或底图,确认没有整体偏移。
- 打开属性表,检查中文、编号、日期和关键业务字段。
- 查看 GeoJSON 文件大小,判断是否需要简化、裁剪或切片。
- 抽查点、线、面几何,确认边界和孔洞没有明显异常。
- 记录转换工具、命令参数、源 CRS、目标 CRS 和处理日期,方便复现。
FAQ:转换常见问题
SHP转GeoJSON在线工具可以直接用于项目数据吗?
不建议把敏感项目数据直接上传到不明在线工具。这类在线方式更适合公开小数据、课程练习和临时预览。正式项目建议使用 QGIS 或 ogr2ogr,并保留转换参数和质检结果。
ogr2ogr SHP转GeoJSON为什么转换后位置跑偏?
最常见原因是源 SHP 的坐标系缺失或写错。使用这种命令行方式时,先确认源 CRS;必要时用 -s_srs 指定真实源坐标系,再用 -t_srs 指定目标坐标系。如果源 CRS 本身不确定,不要靠反复试 EPSG 解决。
转换后中文乱码怎么办?
先检查源 Shapefile 是否有 .cpg 文件,再判断 DBF 的真实编码。可以在 QGIS 中指定编码后另存为 GeoJSON,也可以在 ogr2ogr 中尝试设置 Shapefile 读取编码。转换后一定要抽查中文字段和属性值。
为什么GeoJSON文件变得很大?
GeoJSON 是文本格式,坐标和属性都以可读文本保存,通常会比压缩后的 SHP 文件大。面数据边界点很多、字段过多、坐标精度过高时,文件会明显膨胀。WebGIS 使用时可考虑裁剪范围、简化几何、减少字段或改用矢量瓦片。
GeoJSON一定要转成EPSG:4326吗?
面向浏览器地图和通用 GeoJSON 交换时,通常建议输出经纬度坐标,便于前端库和接口使用。但如果是内部 GIS 分析或工程坐标计算,应按项目规范保留或转换到指定 CRS。关键是明确用途,并在转换记录中写清源 CRS 和目标 CRS。
总结
SHP转GeoJSON不是简单改后缀,而是一次完整的数据格式转换。在线工具适合小数据预览,QGIS 适合可视化检查和手动导出,ogr2ogr 命令行适合批处理和可复现生产流程。无论选择哪种方法,都要先确认 Shapefile 文件组完整,再检查坐标系、编码、字段、几何和文件体积。只有转换后的位置、属性和性能都通过检查,GeoJSON 才能稳定进入 WebGIS 或数据接口流程。
-
ArcGIS Pro字段计算器:数值涵义和顺序编号 2026-06-11 11:39:27
-
ArcPy栅格计算:arcpy.sa和栅格计算器排查 2026-06-11 10:48:22
-
ArcPy字段计算:AddField、字段映射和更新游标 2026-06-11 09:49:34
-
ArcPy投影转换:定义投影、重投影和空间参考 2026-06-10 20:51:20
-
ArcPy批量裁剪:批处理栅格处理和输出检查 2026-06-10 18:47:40
-
ArcPy批量出图:arcpy.mp导出PDF和批量制图 2026-06-10 08:40:05
-
无人机航线规划软件:规划方法和规划步骤 2026-06-09 15:16:34
-
无人机测绘流程:软件有哪些、数据处理和精度 2026-06-09 13:32:14
-
Cesium影像加载失败:本地影像和TIF加载排查 2026-06-09 09:02:22
-
Cesium地形加载失败:本地地形和地形数据排查 2026-06-08 18:59:46
-
Cesium倾斜摄影:加载倾斜摄影、贴地和高度偏移 2026-06-08 17:58:00
-
GDAL影像拼接:合并TIF、获取影像范围和图像融合 2026-06-07 19:24:48
-
DEM生成等高线:怎么用DEM生成等高线地形图 2026-06-07 14:47:02
-
DEM下载:30米免费下载、高精度和SRTM数据源 2026-06-06 19:50:30
-
ArcGIS计算NDVI:植被覆盖度和平均值计算 2026-06-06 18:34:45
-
ArcGIS波段合成步骤:没反应和颜色不一致处理 2026-06-05 20:33:28
-
ArcGIS影像镶嵌步骤:去黑边和颜色不一致处理 2026-06-05 16:45:46
-
遥感影像处理流程:一般流程和软件有哪些 2026-06-05 12:18:06
-
ArcGIS克里金插值法步骤:输出范围和精度评价 2026-06-04 21:51:58
-
ArcGIS坡向分析:坡向如何分级和怎么做 2026-06-04 13:10:57