首页 GIS基础理论 SHP转GeoJSON在线转换与ogr2ogr方法

SHP转GeoJSON在线转换与ogr2ogr方法

作者: GIS研习社 更新时间:2026-05-31 10:36:18 分类:GIS基础理论

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与SHP转GeoJSON在线转换流程图
把 SHP 转为 GeoJSON 前,应先检查文件组、坐标系和编码,再选择在线工具、QGIS 或 ogr2ogr 命令行。

核心原理: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 的对应关系。

但在线转换不适合所有项目。涉密数据、客户数据、带个人信息的地块或地址数据,不应上传到不明网站。文件较大、坐标系复杂、中文编码不确定、字段需要清洗时,也不建议只依赖在线工具。

  1. 先把完整 Shapefile 文件组放在同一目录,包括 .shp.shx.dbf.prj.cpg
  2. 把这一组文件压缩成一个 .zip,不要只压缩 .shp
  3. 在在线转换工具中上传压缩包,选择输出格式为 GeoJSON。
  4. 如果工具提供坐标系选项,确认源 CRS 和目标 CRS,不要随意选择常见 EPSG。
  5. 下载结果后,用 QGIS、VS Code 或浏览器地图页面检查坐标和属性。

如果只是学习格式转换,在线工具够用;如果是生产数据处理,建议至少用 QGIS 或命令行复现一遍,保留明确的参数和处理记录。

QGIS方法:用另存为输出GeoJSON

QGIS 适合不熟悉命令行的用户。它能直接加载 Shapefile,查看属性表、坐标系和几何范围,然后通过“另存为”输出 GeoJSON。这个流程比在线工具更可控,也更适合带中文字段和坐标系检查的场景。

  1. 打开 QGIS,新建项目,把完整 Shapefile 中的 .shp 拖入地图窗口。
  2. 右键图层,打开属性表,检查中文字段、字段值和要素数量是否正常。
  3. 右键图层,查看图层属性中的 CRS,确认源坐标系是否正确识别。
  4. 右键图层,选择“导出”或“另存为”。
  5. 格式选择 GeoJSON,文件名填写 parcels.geojson 一类的输出路径。
  6. 如果用于 WebGIS 展示,目标 CRS 可按项目要求选择常用经纬度坐标系;如果用于内部分析,应遵循项目坐标系规范。
  7. 保存后重新加载输出 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 命令批量处理。这样既有可视化验证,也有自动化效率。

实用检查清单:转换后必须看这几项

  1. 确认输出文件能被 QGIS、Leaflet 或 OpenLayers 正常加载。
  2. 检查要素数量是否和源 SHP 一致,避免转换中丢要素。
  3. 检查图层范围是否落在正确城市、省份或项目区。
  4. 叠加原始 SHP 或底图,确认没有整体偏移。
  5. 打开属性表,检查中文、编号、日期和关键业务字段。
  6. 查看 GeoJSON 文件大小,判断是否需要简化、裁剪或切片。
  7. 抽查点、线、面几何,确认边界和孔洞没有明显异常。
  8. 记录转换工具、命令参数、源 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 或数据接口流程。

相关文章