批量上传 GeoJSON 文件到 Google Earth Engine (GEE) 资产存储 🚀
在遥感和地理信息系统(GIS)领域,处理和分析地理数据是日常工作的重要组成部分。Google Earth Engine(GEE)作为一个功能强大的云平台,提供了全球范围内的地理数据管理、分析和可视化能力。然而,当用户手头有大量的 GeoJSON 文件时,手动上传这些文件到 GEE 的资产存储库可能会变得繁琐且耗时。本文将介绍一种高效的批量上传方法,帮助您自动化这一过程,提升工作效率。
完整版本地址
- 详细原文见:
https://mp.weixin.qq.com/s?__biz=Mzk0MTU1MjU5Mw==&mid=2247485071&idx=1&sn=12c9e83b4ed7be84f70ab8d22ed1d36e&chksm=c2d1e031f5a6692760a0463bd4a923f93ec5e203a4d146f19c81b764e3589b8bc82676fc1488#rd
使用方法 🛠️
1. 环境准备
-
安装
earthengine-api
库:用于与 Google Earth Engine 进行交互。pip install earthengine-api
-
配置 Google Earth Engine 账户:确保已经完成
ee.Authenticate()
的授权认证。
2. 代码使用步骤
-
准备 GeoJSON 文件:将本地的 GeoJSON 文件放置在一个指定的文件夹中。
-
修改代码路径:
json_folder_path
:设置为 GeoJSON 文件所在的目录。asset_path
:设置为 GEE 中目标存储的路径。
-
运行代码:系统将自动上传每一个 GeoJSON 文件至 GEE,并处理任务状态。
3. 运行环境
- 编程语言:Python 3
- 依赖库:Google Earth Engine (GEE) API
代码详情 🖥️
以下是用于批量上传 GeoJSON 文件到 GEE 资产存储的完整 Python 代码:
# -*- coding:utf-8 -*-
"""
此代码用于批量上传本地 GeoJSON 文件到 Google Earth Engine (GEE) 资产存储。
在上传前,自动删除同名资产,确保数据唯一性。
"""
import ee
import os
import json
import time
# 配置网络代理(如无代理,请注释以下两行)
os.environ['HTTP_PROXY'] = 'http://127.0.0.1:XXXX'
os.environ['HTTPS_PROXY'] = 'http://127.0.0.1:XXXX'
# 解决 OpenSSL 3.0 兼容性问题
os.environ['CRYPTOGRAPHY_OPENSSL_NO_LEGACY'] = '1'
# 授权并初始化 Earth Engine API
ee.Authenticate()
ee.Initialize(project='XXXX')
def delete_asset_if_exists(asset_path):
"""
检查并删除指定的资产路径(如果存在)。
参数:
asset_path (str): 资产路径。
"""
try:
ee.data.getAsset(asset_path)
ee.data.deleteAsset(asset_path)
except ee.EEException as e:
if "not found" not in str(e):
raise
def get_files_with_extension(directory, extension):
"""
获取指定文件夹中具有特定扩展名的所有文件。
参数:
directory (str): 文件夹路径。
extension (str): 文件扩展名(包括点,例如 '.geojson')。
返回:
list: 符合条件的文件名列表。
"""
directory = os.path.normpath(directory)
all_files = os.listdir(directory)
return [file for file in all_files if file.endswith(extension)]
def main():
"""
主函数,用于批量上传 GeoJSON 文件到 GEE 资产存储。
"""
json_folder_path = r"E:\_Geojson"
json_files = get_files_with_extension(directory=json_folder_path, extension='.geojson')
for json_file in json_files:
json_name = os.path.splitext(json_file.split('_')[-1])[0]
local_geojson_path = os.path.join(json_folder_path, json_file)
# 读取 GeoJSON 文件
with open(local_geojson_path, 'r', encoding='utf-8') as file:
geojson_data = json.load(file)
# 转换为 GEE 的 FeatureCollection
feature_collection = ee.FeatureCollection([
ee.Feature(
ee.Geometry(feature['geometry']),
{**feature['properties'], 'system:index': str(index)}
)
for index, feature in enumerate(geojson_data['features'])
])
# 设置 GEE 资产路径
asset_path = f'users/XXXX/{json_name}'
# 删除同名资产(如果存在)
delete_asset_if_exists(asset_path)
# 创建并启动上传任务
task = ee.batch.Export.table.toAsset(
collection=feature_collection,
description=f'Upload_geojson_to_asset_{json_name}',
assetId=asset_path,
fileFormat='GeoJSON'
)
task.start()
print(f"已启动上传任务:{json_file}")
# 监控任务状态
while task.active():
time.sleep(1)
print("任务已完成。")
if __name__ == '__main__':
main()
代码优势 ✨
- 自动化处理:批量上传多个 GeoJSON 文件,显著减少手动操作的时间和劳动强度。
- 错误处理:在上传前自动检查并删除同名资产,避免因重名导致的上传失败。
- 高灵活性:用户可根据需求轻松修改文件路径和 GEE 资产路径,适应不同应用场景。
- 任务状态监控:实时监控上传任务状态,确保每个任务顺利完成,防止遗漏。
注意事项 ⚠️
- 网络代理设置:若未使用代理服务器,请注释或移除以下代码行:
os.environ['HTTP_PROXY'] = 'http://127.0.0.1:XXXX' os.environ['HTTPS_PROXY'] = 'http://127.0.0.1:XXXX'
- GEE 配额限制:GEE 对上传频率和存储空间有一定限制,上传大量文件时需注意配额,避免触发限制。
- 文件格式要求:本代码仅支持
.geojson
格式,其他格式(如.shp
)需先进行格式转换。 - 资产命名:确保资产路径唯一,避免因重名导致的数据覆盖或丢失。
- OpenSSL 兼容性:根据本地环境需求,可能需调整
CRYPTOGRAPHY_OPENSSL_NO_LEGACY
设置。
相关函数讲解 📚
函数名称 | 功能描述 | 参数说明 |
---|---|---|
delete_asset_if_exists(asset_path) | 检查并删除指定的 GEE 资产路径(如果存在)。 | asset_path :GEE 资产的路径,例如 'users/nicexian0011/_DGS_GSV_Grids/{json_name}' 。 |
get_files_with_extension(directory, extension) | 从指定文件夹中提取所有特定扩展名的文件。 | directory :文件夹路径。extension :文件扩展名(包括点,如 .geojson )。 |
ee.batch.Export.table.toAsset() | 将本地的 FeatureCollection 数据上传至 GEE 资产存储。 | collection :需要上传的数据(FeatureCollection )。description :任务描述。assetId :目标资产路径。fileFormat :文件格式(如 GeoJSON )。 |
结论 🎯
通过本文提供的批量上传脚本,用户可以高效地将大量本地 GeoJSON 文件自动上传至 Google Earth Engine (GEE) 资产存储中。该方法不仅简化了操作流程,还通过自动化处理和错误检查,确保数据的唯一性和一致性。在实际应用中,请注意 GEE 的配额限制,并确保网络代理和认证配置正确,以实现最佳效果。
术语解释表 📖
术语 | 解释 |
---|---|
GeoJSON | 一种基于 JSON 格式的开放标准,用于表示地理特征及其属性。 |
Google Earth Engine (GEE) | 一个基于云的地理空间分析平台,支持大规模的地理数据存储、处理和可视化。 |
FeatureCollection | GEE 中用于存储一组地理特征(Feature)的数据结构。 |
Asset | 在 GEE 中,资产是用户上传和管理的地理数据资源。 |
earthengine-api | Google 提供的 Python 库,用于与 GEE 进行交互。 |
ee.Authenticate() | Earth Engine API 的认证函数,用于验证用户身份。 |
ee.Initialize() | 初始化 Earth Engine API,准备进行数据操作。 |
ee.batch.Export.table.toAsset() | 将数据导出为 GEE 资产的函数。 |
如果这对您有所帮助,希望点赞支持一下作者! 😊


