GEE Shapefile 格式转换 GeoJSON
在地理信息系统(GIS)领域,数据格式之间的转换是一项常见的需求。例如,将 Shapefile 格式转换为 GeoJSON 格式,对于上传数据到 Google Earth Engine (GEE) 尤其有用。本文将通过一个 Python 脚本的示例,实现批量将 Shapefile 文件转换为 GeoJSON 文件。
准备工作
在开始之前,请确保已安装了 Python 和 arcpy
库。arcpy
是 Esri ArcGIS 提供的 Python 库,它允许开发者自动化 ArcGIS 的地理数据处理功能。
脚本解析
导入必要的库
import os
import arcpy
这里导入了 os
库来处理文件路径和文件列表,以及 arcpy
库来执行地理数据的转换。
定义转换函数
def convert_to_geojson(shp_path, geojson_path):"""将 Shapefile 转换为 GeoJSON 格式。:param shp_path: Shapefile 文件路径:param geojson_path: GeoJSON 文件保存路径"""arcpy.env.overwriteOutput = True # 允许覆盖已有输出文件arcpy.conversion.FeaturesToJSON(in_features=shp_path,out_json_file=geojson_path,format_json="NOT_FORMATTED",geoJSON="GEOJSON",outputToWGS84="WGS84",use_field_alias="USE_FIELD_NAME")print(f'{geojson_path} 转换完成!')
此函数接受两个参数:shp_path
表示 Shapefile 的路径,geojson_path
表示输出的 GeoJSON 文件路径。函数内部使用 arcpy.conversion.FeaturesToJSON
方法来执行转换,并设置了几个参数来控制输出的格式和坐标系统。
获取特定扩展名的文件列表
def get_files_with_extension(directory, extension):"""获取指定目录下所有具有特定扩展名的文件。:param directory: 目录路径:param extension: 文件扩展名:return: 包含指定扩展名文件名的列表"""directory = os.path.normpath(directory)all_files = os.listdir(directory)files_with_extension = [file for file in all_files if file.endswith(extension)]return files_with_extension
该函数用于获取指定目录下所有具有特定扩展名的文件,并返回一个包含这些文件名的列表。
主程序
if __name__ == '__main__':shp_folder_path = "xxx"json_folder_path = "xxx"shp_files = get_files_with_extension(directory=shp_folder_path, extension='.shp')print(f"找到 '.shp' 文件: {shp_files}")for shp_name in shp_files:geo_name = f"{shp_name.split('.')[0]}.geojson"feature_shp = os.path.join(shp_folder_path, shp_name)feature_geojson = os.path.join(json_folder_path, geo_name)convert_to_geojson(shp=feature_shp, geojson=feature_geojson)
在主程序部分,我们首先设置了 Shapefile 和 GeoJSON 文件的存储路径。接着,我们调用 get_files_with_extension
函数来获取所有 Shapefile 文件,并遍历这些文件,为每个文件调用 convert_to_geojson
函数进行转换。
案例代码
# -*- coding: utf-8 -*-
"""
此脚本用于批量将指定文件夹下的 Shapefile (.shp) 文件转换为 GeoJSON 文件。
生成的 GeoJSON 文件将保存在指定的目标文件夹中。"""import os
import arcpydef Model(shp, json): # a_Feature to json"""将 Shapefile 转换为 GeoJSON 文件。参数:shp (str): 输入的 Shapefile 文件路径。json (str): 输出的 GeoJSON 文件路径。"""# 允许覆盖输出文件arcpy.env.overwriteOutput = True# 转换 Shapefile 为 GeoJSONarcpy.conversion.FeaturesToJSON(in_features=shp,out_json_file=json,format_json="NOT_FORMATTED",geoJSON="GEOJSON",outputToWGS84="WGS84",use_field_alias="USE_FIELD_NAME")print(f'{json} conversion completed!')def get_files_with_extension(directory, extension):"""获取指定文件夹中具有特定扩展名的所有文件名。参数:directory (str): 文件夹路径。extension (str): 文件扩展名(包括点,例如 '.shp')。返回:list: 包含指定扩展名文件名的列表。"""# 规范化目录路径directory = os.path.normpath(directory)# 获取文件夹中的所有文件all_files = os.listdir(directory)# 筛选出指定扩展名的文件files_with_extension = [file for file in all_files if file.endswith(extension)]# 返回结果return files_with_extensionif __name__ == '__main__':# 设置全局环境变量shp_folder_path = fr"E:\temp"json_folder_path = fr"E:\Geojson"# 获取指定文件夹下所有后缀为 .shp 的文件名列表shp_files = get_files_with_extension(directory=shp_folder_path, extension='.shp')print(f"find '.shp' file: {shp_files}")# 遍历所有 .shp 文件for shp_name in shp_files:# 生成对应的 GeoJSON 文件名geo_name = shp_name.split('.')[0] + '.geojson'# 构建完整的文件路径feature_shp = os.path.join(shp_folder_path, shp_name)feature_geojson = os.path.join(json_folder_path, geo_name)# 调用 Model 函数批量转换 Shapefile 为 GeoJSONModel(shp=feature_shp, json=feature_geojson)
小结
通过上述脚本,我们实现了一个简单而有效的批量转换工具,可以将 Shapefile 文件转换为 GeoJSON 格式。这对于需要将地理数据上传至 GEE 的用户而言,是一个非常有用的工具。自动化此过程能够显著节省时间和精力,尤其是在处理大量数据时。
术语 | 解释 |
---|---|
Shapefile | 一种地理矢量数据存储格式,由 ESRI 开发,用于存储矢量地理信息。 |
GeoJSON | 一种开放标准的格式,用来表示地理空间对象。 |
Google Earth Engine (GEE) | 由 Google 提供的一个基于云端的平台,用于大规模地理空间数据分析。 |
arcpy | Esri ArcGIS 的 Python API,提供了与 ArcGIS 进行交互的能力。 |
arcpy.conversion.FeaturesToJSON | 一个函数,用于将矢量特征转换成 JSON 或 GeoJSON 格式。 |
如果这对您有所帮助,希望点赞支持一下作者! 😊



详细全文-点击查看
相关文章:

GEE Shapefile 格式转换 GeoJSON
在地理信息系统(GIS)领域,数据格式之间的转换是一项常见的需求。例如,将 Shapefile 格式转换为 GeoJSON 格式,对于上传数据到 Google Earth Engine (GEE) 尤其有用。本文将通过一个 Python 脚本的示例,实现…...

从kaggle竞赛零基础上手CV实战(Deepfake检测)
关注B站可以观看更多实战教学视频:hallo128的个人空间 从kaggle竞赛零基础上手CV实战 从kaggle竞赛零基础上手CV实战(Deepfake检测) 目录 从kaggle竞赛零基础上手CV实战(Deepfake检测)背景介绍学习地址课程大纲课程特色…...
Linux cat命令详解使用:高效文本内容管理
cat是 Linux 中最常用的命令之一,主要用于查看文件内容、合并文件以及重定向输出。它可以一次性显示文件内容,也可以将多个文件的内容串联显示出来。 基本语法 cat [选项] [文件...]常用参数选项 -n:为输出的每一行添加行号。-b࿱…...

YOLOv9改进系列,YOLOv9颈部网络SPPELAN替换为FocalModulation
摘要 焦点调制网络(简称FocalNets),其中自注意力(SA)完全由焦点调制模块取代,用于在视觉中建模标记交互。焦点调制包括三个组件:(i)焦点情境化,通过一堆深度卷积层实现,从短到长范围编码视觉上下文,(ii)门控聚合,选择性地将上下文聚集到每个查询标记的调制器中…...

圆环加载效果
效果预览 代码实现 from PyQt5.QtCore import QSize, pyqtProperty, QTimer, Qt, QThread, pyqtSignal from PyQt5.QtGui import QColor, QPainter from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QPushButton, QVBoxLayout, QLabel, QGridLayoutclass Cir…...
leetcode - 分治思想
分治 - 快排 这里快排我们统一使用 数组分三块 和 随机产生基准值的方法实现排序 数组分三块: . - 力扣(LeetCode) 整个思想即将数组按照基准值分为三个区间 , 具体实现: 三指针实现. 遍历指针 , 左区间右边界指针 , 右区间左边界指针 class Solutio…...
Java面试题·解释题·单例模式、工厂模式、代理模式部分
系列文章目录 Java面试题解释题JavaSE部分 Java面试题解释题框架部分 Java面试题解释题单例模式、工厂模式、代理模式部分 文章目录 系列文章目录前言一、设计模式1. 单例模式1.1 单例模式的定义1.2 单例模式的实现方法 2. 工厂模式2.1 工厂模式的定义2.2 工厂模式的实现方法2…...

如何编写智能合约——基于长安链的Go语言的合约开发
场景设计:文件存证系统 在数字化时代,文件存证和版本追踪变得越来越重要。设想一个场景:在一个法律事务管理系统中,用户需要提交和管理各种文件的版本记录,以确保每个文件在不同时间点的状态可以被准确追踪。文件可能经…...

【PHP代码审计】PHP基础知识
🌝博客主页:菜鸟小羊 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 php简介 php是什么? php(全称:Hypertext Preprocessor,即超文本预处理器&…...

大模型笔记03--快速体验dify
大模型笔记03--快速体验dify 介绍部署&测试部署 dify测试dify对接本地ollama大模型对接阿里云千问大模型在个人网站中嵌入dify智能客服 注意事项说明 介绍 Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)…...

Linux常用命令以及操作技巧
🌏个人博客主页:意疏-CSDN博客 希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 关注 收藏支持一下笔者吧~ 阅读指南: 开篇说明帮助命令常见的七个linux操作终端实用的技巧跟文件目录…...

C语言 | Leetcode C语言题解之题409题最长回文串
题目: 题解: int longestPalindrome(char * s) {int c[128]{0},ret0;for(int i0;i<strlen(s);i){c[s[i]];}for(int i0;i<128;i){retc[i]-c[i]%2;}return ret(ret!strlen(s)); }...
FreeSql 全面指南:从基础到高级实战,深入解析读写分离与导航属性
FreeSql 使用详解:从入门到高级 FreeSql 是一个开源的、轻量级的 ORM 框架,它为 .NET 开发人员提供了丰富的功能,包括 CRUD 操作、读写分离、多租户、导航属性支持等。相比于 Entity Framework Core,FreeSql 在性能和特性上有一些…...
深度学习之微积分预备知识点
极限(Limit) 定义:表示某一点处函数趋近于某一特定值的过程,一般记为 极限是一种变化状态的描述,核心思想是无限靠近而永远不能到达 公式: 表示 x 趋向 a 时 f(x) 的极限。 知识点口诀解释极限的存在左…...

动态内存
动态内存分配函数:在程序运行时为变量或数据结构开辟的内存空间的函数。 有三个重要的动态分配函数:malloc、calloc、realloc。 动态内存分配函数 malloc 这个函数是向内存中申请一块连续的空间,返回一个指向这个块空间的指针。 如果开辟成…...

C/C++实现植物大战僵尸(PVZ)(打地鼠版)
🚀欢迎互三👉:程序猿方梓燚 💎💎 🚀关注博主,后期持续更新系列文章 🚀如果有错误感谢请大家批评指出,及时修改 🚀感谢大家点赞👍收藏⭐评论✍ 游戏…...
C++ 科目二 智能指针 [weak_ptr] (解决shared_ptr的循环引用问题)
shared_ptr引入的重复计数问题,导致内存泄漏 using namespace std; class CFather; class CSon;class CFather { public:CFather(){}void Set(shared_ptr<CSon> pson){Pson pson;}shared_ptr<CSon> Pson; };class CSon { public:CSon(){}void Set(sha…...

解决RabbitMQ设置TTL过期后不进入死信队列
解决RabbitMQ设置TTL过期后不进入死信队列 问题发现问题解决方法一:只监听死信队列,在死信队列里面处理业务逻辑方法二:改为自动确认模式 问题发现 最近再学习RabbitMQ过程中,看到关于死信队列内容: 来自队列的消息可…...
【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】005 - Kernel 入口 C 函数 start_kernel() 源码分析
【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】005 - Kernel 入口 C 函数 start_kernel 源码分析 系列文章汇总:《鸿蒙OH-v5.0源码分析之 Uboot+Kernel 部分】000 - 文章链接汇总》 本文链接:《【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】005 - Kernel 入口 C 函数 start_ke…...

EndnoteX9安装及使用教程
EndnoteX9安装及使用教程 一、EndNote安装 1.1 下载 这里提供一个下载链接: 链接:https://pan.baidu.com/s/1RlGJksQ67YDIhz4tBmph6Q 提取码:5210 解压完成后,如下所示: 1.2 安装 双击右键进行安装 安装比较简单…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...

LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...

leetcode73-矩阵置零
leetcode 73 思路 记录 0 元素的位置:遍历整个矩阵,找出所有值为 0 的元素,并将它们的坐标记录在数组zeroPosition中置零操作:遍历记录的所有 0 元素位置,将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...

【Qt】控件 QWidget
控件 QWidget 一. 控件概述二. QWidget 的核心属性可用状态:enabled几何:geometrywindows frame 窗口框架的影响 窗口标题:windowTitle窗口图标:windowIconqrc 机制 窗口不透明度:windowOpacity光标:cursor…...
Python打卡训练营学习记录Day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
创客匠人:如何通过创始人IP打造实现知识变现与IP变现的长效增长?
在流量红利逐渐消退的当下,创始人IP的价值愈发凸显。它不仅能够帮助中小企业及个人创业者突破竞争壁垒,还能成为企业品牌影响力的核心资产。然而,市场上IP孵化机构鱼龙混杂,如何选择一家真正具备长期价值的合作伙伴?创…...