news 2026/2/7 12:21:02

GIS 数据转换:使用 GDAL 将 Shp 转换为 GeoJSON 数据

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GIS 数据转换:使用 GDAL 将 Shp 转换为 GeoJSON 数据

前言

GeoJSON 作为一种通用的地理数据格式,可以很方便地用于共享交换。在 GIS 开发中,经常需要进行数据的转换处理,其中常见的便是将 Shp 转换为 GeoJSON 数据进行展示。

有关GeoJSON数据的详细介绍,请参考往期文章:GeoJSON 数据简介

在之前的文章中讲了如何使用GDAL或者ogr2ogr工具将txt以及csv文本数据转换为Shp格式,本篇教程在之前一系列文章的基础上讲解如何使用GDALShp转换为GeoJSON数据。

  • GDAL 简介
  • GDAL 下载安装
  • GDAL 开发起步

如果你还没有看过,建议从以上内容开始。

1. 开发环境

本文使用如下开发环境,以供参考。

时间:2025年

系统:Windows 11

Python:3.11.7

GDAL:3.11.1

2. 数据准备

如下是本文选取的世界边界范围的Shp数据结构:

3. 导入依赖

Shp作为一种矢量数据格式,可以使用矢量库OGR进行处理,以实现Shp数据转换为GeoJSON格式。还需要引入osr模块用于坐标定义以及json模块用于几何数据转换。

from osgeo import ogr,osr
import os
import json

4. 数据读取与转换

定义一个方法Shp2GeoJSON(shpPath,jsonPath)用于将Shp数据转换为GeoJSON数据。

"""
说明:将 GeoJSON 文件转换为 Shapfile 文件
参数:
-shpPath:Shp 文件路径
-jsonPath:GeoJSON 文件路径
"
""
def Shp2GeoJSON(shpPath,jsonPath):

在进行GeoJSON数据格式转换之前,需要检查Shp数据路径是否存在。

# 检查文件是否存在
ifos.path.exists(shpPath):
print("shp 文件存在。")
else:
print("shp 文件不存在,请检查数据路径!")
return

打开Shp数据源。

# 读取Shp文件
shpDataSource = ogr.Open(shpPath)
shpLayer = shpDataSource.GetLayer()

首先构造一个GeoJSON空数据结构,用于填充Shp属性数据。

# 构造GeoJSON对象
geoJSON = {
"type":"FeatureCollection",
"features":[]
}

读取并遍历Shp图层,将几何对象以及属性对象复制到GeoJSON对象中。使用ExportToJson方法将几何数据转换为JSON格式,然后使用json.loads方法进行加载,属性读取完成之后,将要素添加到要素集合中。

# 遍历所有要素
forfeatureinshpLayer:
# 几何对象
geom = feature.GetGeometryRef()
# 构造GeoJSON Feature对象
featureJSON = {
"type":"Feature",
"geometry":json.loads(geom.ExportToJson()),
"property":{}
}

# 获取属性
fieldCount = feature.GetFieldCount()
foriinrange(fieldCount):
fieldName = feature.GetFieldDefnRef(i).GetName()
fieldValue = feature.GetField(i)
featureJSON["property"][fieldName] = fieldValue

# 添加要素
geoJSON["features"].append(featureJSON)

Shp数据读取完成之后,将其保存到GeoJSON文件中,并关闭数据源。

# 写入文件
with open(jsonPath,"w",encoding="UTF-8") as f:
json.dump(geoJSON,f,ensure_ascii=False, indent=2)

# 关闭数据源
shpDataSource = None
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/31 2:11:48

UDP-α-L-鼠李糖二钠盐:糖基化研究的关键核苷酸糖底物 30174-43-7

UDP-α-L-鼠李糖二钠盐(Uridine 5’-(beta-rhamnopyranosyl diphosphate) disodium salt)是糖生物学与合成生物学领域中一类至关重要的活性糖供体分子。作为Sugar Nucleotides家族的核心成员之一,其在多种生物合成途径中扮演着不可替代的角色…

作者头像 李华
网站建设 2026/2/5 6:57:41

Java毕设选题推荐:基于SpringBoot的学校图书管理系统设计与实现基于springboot的图书管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/2/6 3:02:43

病理AI大模型登顶《Nature》,癌症诊断迎来新纪元

病理AI大模型登顶《Nature》,癌症诊断迎来新纪元 医派智能 2025年2月7日 14:57 浙江 病理诊断作为临床诊断的重要依据,不管从学术的角度还是应用的角度,利用大模型提高诊断精度,加速诊断过程,提高临床决策的准确性,减…

作者头像 李华
网站建设 2026/2/5 16:56:22

CUDA驱动不匹配?Miniconda-Python3.10镜像自动检测修复机制

CUDA驱动不匹配?Miniconda-Python3.10镜像自动检测修复机制 在深度学习项目开发中,最令人头疼的场景之一莫过于:代码写完、模型设计妥当,一运行却提示 CUDA not available。反复检查 PyTorch 是否装错版本、nvidia-smi 能否执行、…

作者头像 李华
网站建设 2026/2/5 11:47:26

计算机Java毕设实战-基于Spring Boot的四季鲜蔬果园电商平台设计与实现基于SpringBoot的“鲜蔬坊”蔬菜销售平台【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/2/7 7:52:46

大数据环境下数据一致性的复制保障机制

大数据环境下数据一致性的复制保障机制:从“超卖危机”到“全局同步”的底层逻辑 一、引入:一场“超卖”引发的思考——为什么数据复制需要“一致性”? 1. 一个真实的场景:电商平台的“超卖惨案” 2023年某电商大促期间&#xff0…

作者头像 李华