Python 批量转换 Shapefile 为 GeoJSON

批量转换 Shapefile (.shp) 为 GeoJSON 文件的脚本详解 🗺️🔄
在地理信息系统(GIS)和遥感领域,Shapefile(
.shp)格式与GeoJSON格式是两种常用的数据格式。Shapefile 作为矢量数据的标准格式之一,广泛应用于各种地理数据处理任务。
GeoJSON 格式则因其轻量级和适用于网络地图及 Web GIS 开发而备受青睐。为了简化批量处理过程,本文将详细介绍一个将指定文件夹下的 Shapefile 文件批量转换为 GeoJSON 文件的代码工具。
完整版地址
- 详细原文见
https://mp.weixin.qq.com/s?__biz=Mzk0MTU1MjU5Mw==&mid=2247485050&idx=1&sn=2c6da818d563bab539cba683796ea50b&chksm=c2d1e0c4f5a669d20e77bd1c809843be48b366a9528c6dd1f52ab621d45b3844718ee42e45e6#rd
应用场景 🌐
该脚本适用于以下场景:
- 数据格式转换: 在进行 Web GIS 开发时,常需将传统的 Shapefile 数据转换为 GeoJSON 格式,以便在网络地图中展示。
- 批量处理: 当需要处理大量 Shapefile 文件时,手动转换效率低下且易出错。该脚本能够自动化完成批量转换,提升工作效率。
- 跨系统数据共享: GeoJSON 作为一种轻量级格式,适合通过网络进行数据共享,尤其适用于 Web 应用和移动设备。
使用方法 🛠️
- 准备文件: 将所有需转换的 Shapefile 文件存放于指定文件夹中。
- 配置路径: 根据实际情况,修改脚本中的 Shapefile 文件夹路径和 GeoJSON 输出文件夹路径。
- 运行脚本: 直接运行 Python 脚本,脚本将自动扫描指定文件夹并将所有
.shp文件转换为 GeoJSON 格式。 - 查看输出: 转换后的 GeoJSON 文件将保存在指定的目标文件夹中,文件名与原
.shp文件一致。
代码详解与优化 💻✨
以下是实现批量转换的 Python 脚本,并附有详细注释以帮助理解其工作原理:
import os
import arcpydef convert_shp_to_geojson(shp_path: str, geojson_path: str) -> None:"""将 Shapefile 转换为 GeoJSON 文件。参数:shp_path (str): 输入的 Shapefile 文件路径。geojson_path (str): 输出的 GeoJSON 文件路径。"""# 允许覆盖输出文件arcpy.env.overwriteOutput = True# 转换 Shapefile 为 GeoJSONarcpy.conversion.FeaturesToJSON(in_features=shp_path,out_json_file=geojson_path,format_json="NOT_FORMATTED", # 原始格式不进行格式化geoJSON="GEOJSON", # 输出为 GeoJSON 格式outputToWGS84="WGS84", # 坐标系转换为 WGS84use_field_alias="USE_FIELD_NAME" # 使用字段名称作为别名)print(f'转换完成:{geojson_path}')def get_files_with_extension(directory: str, extension: str) -> list:"""获取指定文件夹中具有特定扩展名的所有文件名。参数:directory (str): 文件夹路径。extension (str): 文件扩展名(包括点,例如 '.shp')。返回:list: 包含指定扩展名文件名的列表。"""# 规范化目录路径normalized_directory = os.path.normpath(directory)# 获取文件夹中的所有文件all_files = os.listdir(normalized_directory)# 筛选出指定扩展名的文件filtered_files = [file for file in all_files if file.endswith(extension)]return filtered_filesif __name__ == '__main__':# 设置 Shapefile 和 GeoJSON 文件夹路径shapefile_dir = r"E:\_OrderingProject\F_IslandsBoundaryChange\b_ArcData\b_Global_Island_Grid\_DGS_GSV_Grids"geojson_dir = r"E:\_OrderingProject\F_IslandsBoundaryChange\b_ArcData\b_Global_Island_Grid\_DGS_GSV_Geojson"# 获取所有 .shp 文件shapefiles = get_files_with_extension(directory=shapefile_dir, extension='.shp')print(f"找到的 '.shp' 文件:{shapefiles}")# 遍历并转换每个 .shp 文件for shp in shapefiles:# 生成对应的 GeoJSON 文件名geojson_filename = os.path.splitext(shp)[0] + '.geojson'# 构建完整的文件路径shp_path = os.path.join(shapefile_dir, shp)geojson_path = os.path.join(geojson_dir, geojson_filename)# 执行转换convert_shp_to_geojson(shp_path=shp_path, geojson_path=geojson_path)
代码优化点 🔍
- 路径规范化: 使用
os.path.normpath()标准化文件夹路径,确保在不同操作系统下路径格式的一致性。 - 批量处理: 利用
os.listdir()获取指定文件夹下所有 Shapefile 文件,避免手动指定文件列表,提高效率。 - 自动化输出文件名: 通过
os.path.splitext()分离文件名与扩展名,自动生成对应的 GeoJSON 文件名,确保文件名匹配且避免命名冲突。 - WGS84 坐标系转换: GeoJSON 通常采用 WGS84 坐标系,代码自动将 Shapefile 的坐标系转换为 WGS84,确保数据格式的一致性。
注意事项 ⚠️
- 环境依赖: 该脚本依赖 ArcPy 库,使用者需确保已安装 ArcGIS 桌面版或 ArcGIS Pro,并正确配置 Python 环境。
- 文件路径权限: 设置输入和输出文件夹路径时,确保拥有读写权限,以避免文件读写失败。
- 文件命名: 输入文件夹中若存在重名的 Shapefile 文件,可能导致输出文件覆盖。处理时需注意文件命名,确保唯一性。
相关函数讲解 📚
| 函数或术语 | 解释 |
|---|---|
arcpy.conversion.FeaturesToJSON() | 用于将输入的矢量数据(Shapefile)转换为 GeoJSON 格式。geoJSON="GEOJSON" 表示输出为 GeoJSON 格式,outputToWGS84="WGS84" 确保数据符合 WGS84 坐标系。 |
os.listdir() | 获取指定目录下的所有文件名,结合 .endswith() 可筛选出特定扩展名的文件。 |
os.path.join() | 拼接文件夹路径与文件名,确保跨平台路径格式统一。 |
os.path.normpath() | 标准化路径格式,消除路径中的冗余部分,确保路径在不同操作系统下的兼容性。 |
os.path.splitext() | 分离文件名与扩展名,方便生成新的文件名或进行文件类型判断。 |
arcpy.env.overwriteOutput | 设置是否允许覆盖已有的输出文件,True 表示允许覆盖。 |
通过自动化处理、大幅提升工作效率,同时保证转换结果的准确性和一致性。该脚本灵活且易于部署,适合在不同项目中快速应用。
如果这对您有所帮助,希望点赞支持一下作者! 😊
详细全文-点击查看

相关文章:
Python 批量转换 Shapefile 为 GeoJSON
批量转换 Shapefile (.shp) 为 GeoJSON 文件的脚本详解 🗺️🔄 在地理信息系统(GIS)和遥感领域,Shapefile(.shp)格式与GeoJSON格式是两种常用的数据格式。Shapefile 作为矢量数据的标准格式之一…...
软考《信息系统运行管理员》- 4.1信息系统软件运维概述
4.1信息系统软件运维概述 文章目录 4.1信息系统软件运维概述信息系统软件运维的概念信息系统软件的可维护性及维护类型对软件可维护性的度量可以从以下几个方面进行:软件维护分类: 信息系统软件运维的体系1.**需求驱动**2.**运维流程**3.**运维过程**4.*…...
Leetcode 3319. K-th Largest Perfect Subtree Size in Binary Tree
Leetcode 3319. K-th Largest Perfect Subtree Size in Binary Tree 1. 解题思路2. 代码实现 题目链接:3319. K-th Largest Perfect Subtree Size in Binary Tree 1. 解题思路 这一题其实就是一个很常见的树的遍历,我们自底向上遍历每一个子树&#x…...
从秒级到小时级:TikTok等发布首篇面向长视频理解的多模态大语言模型全面综述
文章链接:https://arxiv.org/pdf/2409.18938 亮点直击 追踪并总结从图像理解到长视频理解的MM-LLMs的进展;回顾了各种视觉理解任务之间的差异,并强调了长视频理解中的挑战,包括更细粒度的时空细节、动态事件和长期依赖性;详细总结了MM-LLMs在…...
【CTF】敏感信息泄露 GIT SVN VIM
在CTF(Capture The Flag)比赛中,信息泄露是常见的考察方向之一。这类题目通过模拟开发人员的疏忽或系统配置的失误,导致敏感文件或数据被泄露。信息泄露题目通常相对简单,但能帮助参赛者掌握如何从公开的信息中获取潜在…...
EMQX服务器的搭建,实现本地机和虚拟机之间的MQTT通信(详细教程)
前言 MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。 MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(…...
cordova的使用
环境 Cordova 是一个跨平台的开发框架,它允许开发者使用 HTML、CSS 和 JavaScript 创建移动应用。Cordova 的不同版本可能会有不同的环境要求。以下是 Cordova 10 和 Cordova 12 在开发 Android 和 iOS 应用时的环境要求的对比总结。 1. Cordova 10 环境要求 And…...
三种Transformer模型中的注意力机制介绍及Pytorch实现:从自注意力到因果自注意力
本文深入探讨Transformer模型中三种关键的注意力机制:自注意力、交叉注意力和因果自注意力。这些机制是GPT-4、Llama等大型语言模型(LLMs)的核心组件。通过理解这些注意力机制,我们可以更好地把握这些模型的工作原理和应用潜力。 …...
《使用Gin框架构建分布式应用》阅读笔记:p20-p31
《用Gin框架构建分布式应用》学习第2天,p20-p31总结,总计12页。 一、技术总结 1.第一个gin程序 // main.go package mainimport "github.com/gin-gonic/gin"func main() {r : gin.Default()r.GET("/", func(c *gin.Context) {c.J…...
如何修改MacOS的终端的配色和linux一样
目录 一、配色方案 二、修改配色 一、配色方案 一键更改MacOS的终端配色文件,目的就是为了让他从原本的样子变成XShell里面显示的配色样式。文件夹为蓝色,链接文件为青色,可执行文件为绿色之类的。 linux默认配色方案是"exfxcxdxbxege…...
基于百度智能体开发爱情三十六计
基于百度智能体开发爱情三十六计 文章目录 基于百度智能体开发爱情三十六计1. 爱情三十六计智能体2. 三十六计开发创意3. 智能体开发实践3.1 基础配置3.2 进阶配置3.3 调优心得3.4可能会遇到的问题 4. 为什么选择文心智能体平台 1. 爱情三十六计智能体 爱情三十六计 是一款基于…...
计算机网络:计算机网络概述 —— 描述计算机网络的参数
文章目录 数据量性能指标速率带宽数据传输速率 吞吐量时延分析时延问题 时延带宽积往返时间利用率丢包率丢包的情况 抖动可用性可靠性安全性 计算机网络是现代信息社会的基础设施,其性能和可靠性对各类应用至关重要。为了理解和优化计算机网络,我们需要深…...
Windows 11系统选项卡详解:从新手到专家的操作指南
Windows 11的“系统”选项卡是管理电脑硬件和软件设置的中心。 基础操作 1. 查看和编辑系统信息 打开“开始”菜单,点击“设置”图标。 在“设置”窗口中,选择左侧的“系统”选项卡。 点击“关于”。 在这里,我们可以查看系统规格。要编辑设…...
乐鑫ESP32-S3无线方案,AI大模型中控屏智能升级,提升智能家居用户体验
在这个由数据驱动的时代,人工智能正以其前所未有的速度和规模改变着我们的世界。随着技术的不断进步,AI已经从科幻小说中的概念,转变为我们日常生活中不可或缺的一部分。 特别是在智能家居领域,AI的应用已成为提升生活质量、增强…...
postman变量,断言,参数化
环境变量 1.创建环境变量 正式环境是错误的,方便验证环境变化 2.在请求中添加变量 3.运行前选择环境变量 全局变量 能够在任何接口访问的变量 console中打印日志 console.log(responseBody);//将数据解析为json格式 var data JSON.parse(responseBody); conso…...
Nginx实战指南:基础知识、配置详解及最佳实践全攻略
背景 在Java系统实现过程中,我们不可避免地会借助大量开源功能组件。然而,这些组件往往功能丰富且体系庞大,官方文档常常详尽至数百页。而在实际项目中,我们可能仅需使用其中的一小部分功能,这就造成了一个挑战&#…...
百度搜索引擎(SEO)优化师的未来将何去何从?
百度搜索引擎(SEO)优化师的未来将何去何从? 作为一名SEO专家(林汉文),在过去的三年里,我深感自己与快速变化的百度SEO圈子逐渐脱节。然而,在最近重拾旧业,重新审视SEO特…...
如何在UE5中创建加载屏幕(开场动画)?
第一步: 首先在虚幻商城安装好Async Loading Screen,并且在项目的插件中勾选好。 第二步: 确保准备好所需要的素材: 1)开头的动画视频 2)关卡加载图片 3)准备至少两个关卡 第三步:…...
【WebGIS】Cesium:地形加载
在 Cesium 中,地形数据用于提供三维场景的高度信息,使得地球表面的细节更加逼真。地形加载是 Cesium 应用中的关键功能,支持各种地形源和格式,如 Cesium Ion 服务、Terrain Server 等。本文将系统介绍如何在 Cesium 中加载、配置、…...
前端程序员策略:使用框架还是纯JavaScript?
前端程序员策略:使用框架还是纯JavaScript? 在现代Web开发领域,JavaScript语言占据着举足轻重的地位,而基于JavaScript的前端框架更是层出不穷,为开发者提供了丰富的选择。 然而,面对琳琅满目的框架&…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...
LangChain【6】之输出解析器:结构化LLM响应的关键工具
文章目录 一 LangChain输出解析器概述1.1 什么是输出解析器?1.2 主要功能与工作原理1.3 常用解析器类型 二 主要输出解析器类型2.1 Pydantic/Json输出解析器2.2 结构化输出解析器2.3 列表解析器2.4 日期解析器2.5 Json输出解析器2.6 xml输出解析器 三 高级使用技巧3…...
CppCon 2015 学习:REFLECTION TECHNIQUES IN C++
关于 Reflection(反射) 这个概念,总结一下: Reflection(反射)是什么? 反射是对类型的自我检查能力(Introspection) 可以查看类的成员变量、成员函数等信息。反射允许枚…...
21-Oracle 23 ai-Automatic SQL Plan Management(SPM)
小伙伴们,有没有迁移数据库完毕后或是突然某一天在同一个实例上同样的SQL, 性能不一样了、业务反馈卡顿、业务超时等各种匪夷所思的现状。 于是SPM定位开始,OCM考试中SPM必考。 其他的AWR、ASH、SQLHC、SQLT、SQL profile等换作下一个话题…...
C/Python/Go示例 | Socket Programing与RPC
Socket Programming介绍 Computer networking这个领域围绕着两台电脑或者同一台电脑内的不同进程之间的数据传输和信息交流,会涉及到许多有意思的话题,诸如怎么确保对方能收到信息,怎么应对数据丢失、被污染或者顺序混乱,怎么提高…...
