地球观测数据分析库 EOdal
项目描述
E:earth_africa:dal 地球观测数据分析库
pip install eodal
一个真正开源的地球观测(EO)数据统一分析包
:heavy_check_mark: 由于STAC,设计为云原生
:heavy_check_mark: 通过本机Mapper
模块访问PB级别的全球EO数据,包括卫星图像
:heavy_check_mark: 在单个包中执行EO数据的查询、I/O、处理、分析和可视化
:heavy_check_mark: 模块化和轻量级架构
:heavy_check_mark: 几乎无限的可扩展性,具有接口到xarray、numpy、geopandas等更多
关于
E:earth_africa:dal 是一个Python库,它允许在统一框架内以完全开源的方式获取、组织和分析EO数据。
E:earth_africa:dal 实现了开源、可重复的地理空间数据科学。同时,E:earth_africa:dal 降低了数据处理负担,并通过下载器和出色的时空资产目录 (STAC) 提供了对全球卫星数据档案的访问。
E:earth_africa:dal 支持使用STAC目录在云环境中工作("在线"模式)以及使用空间PostgreSQL/PostGIS数据库在本地组织元数据("离线"模式)。
在我们的同行评审文章中了解更多关于E:earth_africa:dal的信息。
引用E:earth_africa:dal
我们在开发E:earth_africa:dal上投入了大量的努力。为了给予我们应有的认可,请尊重我们的许可协议。当您在您的研究中使用E:earth_africa:dal时,请除了给予我们适当的科学认可外,还要引用我们的论文。
@article{GRAF2022107487,
title = {EOdal: An open-source Python package for large-scale agroecological research using Earth Observation and gridded environmental data},
journal = {Computers and Electronics in Agriculture},
volume = {203},
pages = {107487},
year = {2022},
issn = {0168-1699},
doi = {https://doi.org/10.1016/j.compag.2022.107487},
url = {https://www.sciencedirect.com/science/article/pii/S0168169922007955},
author = {Lukas Valentin Graf and Gregor Perich and Helge Aasen},
keywords = {Satellite data, Python, Open-source, Earth Observation, Ecophysiology}
}
数据模型
E:earth_africa:dal具有复杂的数据模型,将地球观测数据投影到Python类中。E:earth_africa:dal基于对象的设计包含四个基本类
- E:earth_africa:dal Band是处理单个波段的一个类。波段是一个二维栅格层(即二维数组)。每个栅格单元取一个值。这些值可以代表颜色强度、平均海平面以上的高程或温度读数,仅举几个例子。波段有一个名称和一个可选的别名。其栅格网格单元是地理参照的,意味着每个单元可以在一个空间参照系中定位。
- E:earth_africa:dal RasterCollection是一个包含0到n个Band对象的类。波段通过其名称或别名(如果有的话)来识别。
- E:earth_africa:dal Scene基本上是一个带有
SceneMetadata
的RasterCollection,为RasterCollection分配时间戳和可选的场景标识符。 - E:earth_africa:dal SceneCollection是包含0到n个Scenes的集合。场景通过其时间戳或场景标识符(如果有的话)来识别。
映射器
E:earth_africa:dal的Mapper是其关键组件之一。如果您熟悉GEE,您可以期望以类似的方式轻松访问大量的EO数据——只不过它是真正的开源。如果您对EO完全陌生,您将很快学会如何查询、读取和处理大量数据。
以下示例中,我们从Microsoft Planetary Computer(无需认证)加载了瑞士中部的Sentinel-2数据。
import geopandas as gpd
from datetime import datetime
from eodal.core.sensors.sentinel2 import Sentinel2
from eodal.mapper.feature import Feature
from eodal.mapper.filter import Filter
from eodal.mapper.mapper import Mapper, MapperConfigs
from typing import List
#%% user-inputs
# -------------------------- Collection -------------------------------
collection: str = 'sentinel2-msi'
# ------------------------- Time Range ---------------------------------
time_start: datetime = datetime(2022,3,1) # year, month, day (incl.)
time_end: datetime = datetime(2022,6,30) # year, month, day (incl.)
# ---------------------- Spatial Feature ------------------------------
geom: Path = Path('data/sample_polygons/lake_lucerne.gpkg')
# ------------------------- Metadata Filters ---------------------------
metadata_filters: List[Filter] = [
Filter('cloudy_pixel_percentage','<', 80),
Filter('processing_level', '==', 'Level-2A')
]
#%% query the scenes available (no I/O of scenes, this only fetches metadata)
feature = Feature.from_geoseries(gpd.read_file(geom).geometry)
mapper_configs = MapperConfigs(
collection=collection,
time_start=time_start,
time_end=time_end,
feature=feature,
metadata_filters=metadata_filters
)
# now, a new Mapper instance is created
mapper = Mapper(mapper_configs)
mapper.query_scenes()
#%% load the scenes available from STAC (reading bands B02 "blue", B03 "green", B04 "red")
scene_kwargs = {
'scene_constructor': Sentinel2.from_safe,
'scene_constructor_kwargs': {'band_selection': ['B02', 'B03', 'B04'], 'read_scl': False}
}
mapper.load_scenes(scene_kwargs=scene_kwargs)
# the data loaded into `mapper.data` as a EOdal SceneCollection
mapper.data
示例
我们已编译了一系列Jupyter笔记本,展示了E:earth_africa:dal的功能以及如何启用它们。
贡献
欢迎对E:earth_africa:dal做出贡献。请首先阅读贡献指南。
代码覆盖率
最内层的圆圈是整个项目,向外移动的是文件夹,最后是一个单独的文件。每个切片的大小和颜色分别表示语句数和覆盖率。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。