GEE Shapefile 格式转换 GeoJSON

news2024/11/16 9:53:09

在地理信息系统(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 arcpy


def Model(shp, json):  # a_Feature to json
    """
    将 Shapefile 转换为 GeoJSON 文件。

    参数:
    shp (str): 输入的 Shapefile 文件路径。
    json (str): 输出的 GeoJSON 文件路径。
    """
    # 允许覆盖输出文件
    arcpy.env.overwriteOutput = True

    # 转换 Shapefile 为 GeoJSON
    arcpy.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_extension


if __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 为 GeoJSON
        Model(shp=feature_shp, json=feature_geojson)

小结

通过上述脚本,我们实现了一个简单而有效的批量转换工具,可以将 Shapefile 文件转换为 GeoJSON 格式。这对于需要将地理数据上传至 GEE 的用户而言,是一个非常有用的工具。自动化此过程能够显著节省时间和精力,尤其是在处理大量数据时。

术语解释
Shapefile一种地理矢量数据存储格式,由 ESRI 开发,用于存储矢量地理信息。
GeoJSON一种开放标准的格式,用来表示地理空间对象。
Google Earth Engine (GEE)由 Google 提供的一个基于云端的平台,用于大规模地理空间数据分析。
arcpyEsri ArcGIS 的 Python API,提供了与 ArcGIS 进行交互的能力。
arcpy.conversion.FeaturesToJSON一个函数,用于将矢量特征转换成 JSON 或 GeoJSON 格式。

如果这对您有所帮助,希望点赞支持一下作者! 😊

详细全文-点击查看

file

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2126775.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件无线电1-MATLAB实现FM调制解调

1、MATLAB读取语音文件 准备一段wav的语音文件,我用笔记本自带的录音机录制了一段自己的语音“爱福皮的姐.wav“,MATLAB读取语音文件,并获取采样率信息。 clc; clear all; %% ***************read file************************************…

【困难】 猿人学web第一届 第18题 jsvmp 洞察先机

文章目录 数据接口分析还原加密参数插桩调试分析日志插桩补充 python 代码 数据接口分析 数据接口 https://match.yuanrenxue.cn/match/18data 请求参数 {page: 页码, t: 时间戳, v: 加密值} 请求第一页不需要携带 t, v 参数 cookie 只需要携带 sessionid 只要 还原加密字段…

深入理解Java反射技术及其应用

什么是反射技术? Java反射机制是一种强大的特性,它允许程序在运行时动态加载类并获取类或对象的属性和方法。其核心在于JVM通过获得class对象进行反编译,从而获取对象的各种信息。 反射机制的基本特点 动态性 Java是一种先编译后运行的语言…

【电子通识】规格书上的%FS和%RD具体指什么?

在仪器仪表类的手册上,常见的精度表达规格显示方式:%FS 和%RD 究竟如何解读呢? 术语解说 %RD(Reading):用于表示对比显示值(读值)存在多少(%)的误差 %FS(Full Scale):用于表示对比全量程存在多少(%)的误差 %SP(Set Poi…

基于vue框架的城市体育运动交流平台15s43(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:用户,赛事类型,近期赛事,比赛报名,器材类型,器材信息,自由约战,运动队伍 开题报告内容 基于Vue框架的城市体育运动交流平台开题报告 一、项目背景与意义 随着城市化进程的加速和居民健康意识的提升,城市体育运动已成为现代…

思维导图神器!四款高效工具助你职场逆袭

在如今这个信息爆炸的时代,如何高效地整理和呈现思维,成为了一个重要的能力;思维导图作为一种有效的思维工具,被广泛应用于工作、学习和生活中;今天,我将为大家介绍四款常用的思维导图软件并分享一下它们的…

win10任务栏透明如何调整?——详解Windows任务栏设置与优化技巧

在这个数字化时代,电脑已经成为我们日常办公和生活中的。关于win10任务栏透明的设置方法,身边很多同事都在咨询。 本文就来简单介绍下关于电脑任务栏个性化设置的方法,毕竟任务栏影响着用户体验。这时,一款优秀的任务栏优化工具就…

模拟实现string类: clear函数、流提取(<<)和流插入(>>)运算符重载、>、<、==、<=、>=、!=的运算符重载、赋值运算符(=)重载等的介绍

文章目录 前言一、 clear函数二、流提取(<<)和流插入(>>)运算符重载三、 >、<、、<、>、!的运算符重载四、赋值运算符&#xff08;&#xff09;重载总结 前言 模拟实现string类: clear函数、流提取(<<)和流插入(>>)运算符重载、>、<…

[论文笔记]ChatQA: Surpassing GPT-4 on Conversational QA and RAG

引言 今天来看一下上篇论文笔记中反复介绍的 ChatQA: Surpassing GPT-4 on Conversational QA and RAG。 为了简单&#xff0c;下文中以翻译的口吻记录&#xff0c;比如替换"作者"为"我们"。 我们介绍了 ChatQA&#xff0c;这是一个模型套件&#xff0c;一…

机器学习和深度学习的常见概念总结(面试用,多原创图和公式)

目录 使用说明一、未分类损失函数&#xff08;Loss Function&#xff09;1. **损失函数的作用**2. **常见的损失函数**2.1. **均方误差&#xff08;MSE, Mean Squared Error&#xff09;**2.2. **均方根误差&#xff08;RMSE, Root Mean Squared Error&#xff09;**2.3. **平均…

1. 运动控制指令概要(omron 机器自动化控制器)

机器自动化控制器——第一章 运动控制指令概要 1-1 运动控制指令PLCopen运动控制用功能块运动控制指令概要▶ 运动控制指令的种类▶ 状态变化▶ 运动控制指令的启动和状态▶ 异常处理▶ 执行运动控制指令时输入变量的变更(指令重启)▶ 通过选择缓存模式执行指令多重启动▶ 通过…

四川锦程消费金融有限责任公司2024年(第一批次)催收机构选型入库采购公告

四川锦程消费金融有限责任公司2024年&#xff08;第一批次&#xff09;催收机构选型入库采购公告 根据需要&#xff0c; 四川锦程消费金融有限责任公司决定对外公 开选型采购催收代理合作的催收机构&#xff0c;欢迎符合条件的催收 机构参与采购。具体公告如下&#xff1a; 一…

Redisson分布式锁实现及原理详解

随着技术快速发展&#xff0c;数据规模增大&#xff0c;分布式系统越来越普及&#xff0c;一个应用往往会部署在多台机器上&#xff08;多节点&#xff09;&#xff0c;在有些场景中&#xff0c;为了保证数据不重复&#xff0c;要求在同一时刻&#xff0c;同一任务只在一个节点…

Makefile中的override

若对变量进行赋值一部分需要由命令行&#xff08;注意命令行只能使用/:/进行赋值&#xff0c;不能使用&#xff1f;进行赋值&#xff09;输入完成&#xff0c;一部分需要写在Makefile文件里&#xff0c;Makefile规则默认会让命令行的赋值覆盖文件里的赋值。要想解决这个问题&am…

【源码+文档+调试讲解】高校研招信息共享系统

摘 要 近年来&#xff0c;科技飞速发展&#xff0c;在经济全球化的背景之下&#xff0c;互联网技术将进一步提高社会综合发展的效率和速度&#xff0c;互联网技术也会涉及到各个领域&#xff0c;而高校研招信息共享系统在网络背景下有着无法忽视的作用。信息管理系统的开发是…

log4j靶场,反弹shell

1.用vulhub靶场搭建&#xff0c;首先进入目录CVE-2021-44228中&#xff0c;docker启动命令 2.发现端口是8983&#xff0c;浏览器访问http://172.16.1.18:8983/ 3.用dnslog平台检测dns回显&#xff0c;看看有没有漏洞存在 4.反弹shell到kali&#xff08;ip为172.16.1.18&#xf…

【白话Spring】三级缓存

快速导航 一、Spring的三级缓存是什么&#xff1f;三级缓存SpringBean 的生命周期&#xff1a;BeanFactory关于Bean初始化注释&#xff1a;分析&#xff1a;Bean的创建过程&#xff1a;Bean的销毁过程&#xff1a; Spring Bean创建的核心逻辑&#xff1a; 二、Spring的三级缓存…

CentOS7 使用yum报错:[Errno 14] HTTP Error 404 - Not Found 正在尝试其它镜像。

CentOS7 使用yum报错&#xff1a;[Errno 14] HTTP Error 404 - Not Found 正在尝试其它镜像。 CentOS镜像下载、VM虚拟机下载 下载地址&#xff1a;www.macfxb.cn 一、问题描述 安装完CentOS7 后 使用yum报错 如下图 二、解决方案 1.查看自己的系统架构 我的是aarch64 uname …

【MySQL】查询语句之inner、left、right、full join 的区别

前言&#xff1a; INNER JOIN 和 OUTER JOIN 是SQL中常用的两种连接方式&#xff0c;用于从两表活多表中提取相关的数据。两者区别主要在于返回的 结果集 如何处理 匹配 与 不匹配 的行。 目录 1、INNER JOIN 2、OUTER JOIN 3、总结 1、INNER JOIN 称为内连接&#xff0c;只…

ComfyUI-AdvancedLivePortrait:实时编辑人脸让图像动起来

经常使用Stable Diffiusion的朋友都知道&#xff0c;webUI和comfyUI底层都是Stable Diffiusion&#xff0c;但是它们的显示界面有非常大的区别&#xff1a;webUI界面简洁&#xff0c;新手比较容易上手&#xff1b;而ComfyUI 是采用基于节点的图形界面&#xff0c;通过连接不同的…