跳转到主要内容

用于树木数据库管理和访问的Python库

项目描述

logo

License Documentation Status GitHub Workflow Status DOI

pytreedb 是一个提供对象库的 Python 软件包,该库提供了简单的数据库接口和REST API,用于访问以3D点云捕获的植被树木对象。主要目标是提供一个Python库,用于存储和共享基于单个树木的点云和所有相关的(森林清查)树木测量数据。树木数据包括所有与树木相关的信息、测量、元数据、地理信息,以及链接到任何文件格式(例如LAS/LAZ)中的3D点云。用于与其他软件(例如直接导入到大多数GIS)进行数据交换和可视化的数据格式是包括所有与树木相关信息的 GeoJSON。因此,查看和修改树木数据集(*.geojson)非常简单。

使用 PyMongo 驱动程序通过 MongoDB 作为数据库后端。这可以实现扩展到大型全球数据集,例如连接到 MongoDB Atlas Cloud 以处理大数据集。如果只需要在数据处理的运行时使用数据库,并且不需要在Web上进行共享,也可以仅使用本地MongoDB安装进行本地工作。

主要功能

pytreedb 有三个主要组件和用法方向

  1. Python库:如果您需要在数据处理和分析的运行时访问树木数据库,请使用此库。
  2. REST API:如果您想通过REST API将数据集提供给任何软件。pytreedb服务器应用程序使用Flask框架进行本地(主机)使用,并提供有关使用Apache WGSI进行生产部署的说明。有关pytreedb的REST API的更多信息,请参阅此处,例如包括服务器的设置和API密钥的使用。
  3. Web前端:如果您想将宝贵的树数据与社区分享。基于本存储库中展示的REST API,我们可以轻松实现Web前端,提供多个查询选项、数据导出以及查询结果的地图视图。有关Weiser等人2022年的树数据的展示可在http://pytreedb.geog.uni-heidelberg.de/查看。
overview of the components of pytreedb

PyTreeDB类是起点和核心组件。它负责,例如:

  • 数据导入、数据导出、数据验证、与MongoDB的自动同步
  • 所有类型的查询。

Python REST接口和所有客户端(如Web前端)都简单地使用Python类的方方法和功能。

在2022年布拉格的3DForEcoTech研讨会上的科学演讲中,Bernhard Höfle解释了pytreedb软件的主要概念。观看演讲

💻 下载和安装

安装

使用

pip

安装和更新核心库和服务器库

1) 核心库

$ pip install -U pytreedb

2) 服务器库

$ pip install -U pytreedb-server

替代安装

克隆此仓库并使用Anaconda环境

使用git clone克隆此仓库并将其用作工作目录。

只需使用提供的Anaconda环境文件environment.yml,其中包含运行和构建资源的所有依赖项。

$ conda env create --file environment.yml --force

或者,您也可以使用pip从requirements文件安装依赖项。

$ python -m pip install -r requirements.txt

或整个包

$ python -m pip install .

最后,如果您想为库的开发做出贡献,还应安装其额外的Python依赖项以进行测试和文档构建

$ python -m pip install -r requirements-dev.txt

连接到MongoDB(本地主机/服务器/Atlas云)

pytreedb需要一个到MongoDB数据库的有效连接。MongoDB的运行位置无关紧要,因为连接是通过pymongo(请参阅示例和我们的Jupyter笔记本)完成的)。我们成功测试了本地主机、服务器和MongoDB Atlas云连接。对于您自己的MongoDB安装,只需遵循官方安装说明)。

所需的带有凭据的 MongoDB 连接 通过一个 .env 文件(是的,这个文件没有名字)来实现,您需要将其放置在您的 Python 脚本文件夹或搜索路径中。使用 dotenv 提供凭据 - 1) 服务器 URI,2) 数据库和 3) 集合名称 - 在您的源代码外部(见 sample.env 作为模板)。

用于连接本地 MongoDB 安装的示例 .env 文件。ℹ️ 将 <database_name> 和 <collection_name> 替换为您自己的设置

CONN_URI = "mongodb://127.0.0.1:27017/"
CONN_DB = "<database_name>"
CONN_COL = "<collection_name>"

用于连接 MongoDB Atlas 云的 .env 文件中的示例 CONN_URI,其中相应的设置需要替换为您自己的

CONN_URI = "mongodb+srv://<username>:<password>@<your_cluster_details>.mongodb.net/<database_name>?retryWrites=true&w=majority"

软件依赖项

所有依赖项(即所需的第三方 Python 包)都在 Anaconda 的 environment.yml 定义中列出,并且可以使用 conda / pip 安装。从我们的定义文件创建 conda 环境时,所有依赖项都会被解决。

软件使用说明

PyTreeDB 类 🐍

请从仓库中可用的示例和 Jupyter Notebooks 开始。此外,每个子文件夹都包含一个 README.md,其中包含有关仓库部分的详细信息。

作为 API 服务器运行 💻

为了提供 REST API 以共享您的树数据,您可以使用 pytreedb 以服务器模式运行。安装 pytreedb-server Python 包后,您可以按照此处 webserver/README.md 中的说明进行操作。

作为 Web 服务器和前端运行

一个示例 Web 前端实例在这里运行:http://pytreedb.geog.uni-heidelberg.de/。在 pytreedb 的 webserver 代码部分可以找到安装网页的相应说明和代码,这些代码是通过 pytreedb-server Python 包实现的:pytreedb/webserver。Web 前端代码可以轻松地适应您的需求 - 请参阅 statictemplates 中的 Web 编程代码。

也可以通过 REST API 从其他编程语言(例如 R 统计)使用它

通过 REST API 直接从任何编程语言访问是可能的。我们提供了 http API 访问的示例脚本,例如在 R 统计中的 examples_api。该 R 函数示例 允许简单查询,还可以下载查询结果的树木的 LAZ 文件。

GeoJSON 格式和模板

一个示例树木在 data/geojson/AbiAlb_BR03_01.geojson 中给出,树木对象的 GeoJSON 模板在此处定义 pytreedb/db_conf.py

每棵树的单棵树信息(包括点云的URL)需要以每棵树为单位的GeoJSON文件提供。我们使用一种简单直接的格式,这是一种有效的GeoJSON,可以用任何GIS软件打开。pytreedb GeoJSON格式的核心思想是定义一组最小的树元数据,这些元数据可以通过用户所需的其他数据来扩展。因此,只需要确保您的GeoJSON文件符合最小集,以便能够导入数据库。PyTreeDB类提供了一个名为validate_json的方法,用于检查文件的有效性。此外,文件导入也会自动检查有效性,并且只会导入符合定义模板的树对象。所使用的GeoJSON模板也可以根据您的用例和应用程序进行修改。请注意,修改(例如,从我们的模板中删除必填字段)可能需要修改API和Web前端组件。

已发布测试数据

在这个存储库中,我们提供了1481棵树的元数据(包括点云的链接),这些树通过机载(ALS)、无人机(ULS)和地面(TLS)激光扫描以及实地调查数据捕获。有关详细信息,请参阅我们发表在Earth System Science Data上的数据发布(Weiser et al. 2022),链接为https://doi.org/10.5194/essd-14-2989-2022

测试数据以data提供,1)作为单个GeoJSON文件和ZIP存档,2)也作为序列化和压缩的pytreedb数据库转储文件,可以直接导入和使用以启动API服务器。

引用

当在您的研究中使用pytreedb时,请引用以下出版物,并引用适当的版本。pytreedb的所有版本都在Zenodo上列出,您可以在那里找到包括DOI在内的引用信息。

Höfle, B.,Qu, J.,Winiwarter, L.,Weiser, H.,Zahs, V.,Schäfer, J. & Fassnacht, F. E.(2023)。pytreedb - 树植被对象点云库(1.0.0)。Zenodo。链接为https://doi.org/10.5281/zenodo.7551310

@software{hofle_bernhard_2023_7551310,
  author       = {Höfle, Bernhard and
                  Qu, Jiani and
                  Winiwarter, Lukas and
                  Weiser, Hannah and
                  Zahs, Vivien and
                  Schäfer, Jannika and
                  Fassnacht, Fabian E.},
  title        = {{pytreedb - library for point clouds of tree 
                   vegetation objects}},
  month        = jan,
  year         = 2023,
  publisher    = {Zenodo},
  version      = {1.0.0},
  doi          = {10.5281/zenodo.7551310},
  url          = {https://doi.org/10.5281/zenodo.7551310}
}

资金/致谢

初始软件开发得到了DFG - 德国研究基金会(项目编号411263134)在SYSSIFOSS研究项目中的支持。

联系方式/错误/功能请求

如果您认为发现了错误或对新的功能有具体请求,请在线代码存储库GitHub上打开一个新问题。对于一般性问题,也请使用问题系统。

科学请求可以发送到海德堡3DGeo研究小组及其成员。

📜 许可证

请参阅LICENSE.md

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装软件包的信息。

源代码分发

pytreedb-1.0.0.post2.tar.gz (1.4 MB 查看哈希值

上传时间: 源代码

支持者