用于树木数据库管理和访问的Python库
项目描述
pytreedb
是一个提供对象库的 Python
软件包,该库提供了简单的数据库接口和REST API,用于访问以3D点云捕获的植被树木对象。主要目标是提供一个Python库,用于存储和共享基于单个树木的点云和所有相关的(森林清查)树木测量数据。树木数据包括所有与树木相关的信息、测量、元数据、地理信息,以及链接到任何文件格式(例如LAS/LAZ)中的3D点云。用于与其他软件(例如直接导入到大多数GIS)进行数据交换和可视化的数据格式是包括所有与树木相关信息的 GeoJSON
。因此,查看和修改树木数据集(*.geojson)非常简单。
使用 PyMongo 驱动程序通过 MongoDB 作为数据库后端。这可以实现扩展到大型全球数据集,例如连接到 MongoDB Atlas Cloud 以处理大数据集。如果只需要在数据处理的运行时使用数据库,并且不需要在Web上进行共享,也可以仅使用本地MongoDB安装进行本地工作。
主要功能
pytreedb
有三个主要组件和用法方向
- Python库:如果您需要在数据处理和分析的运行时访问树木数据库,请使用此库。
- REST API:如果您想通过REST API将数据集提供给任何软件。
pytreedb
服务器应用程序使用Flask框架进行本地(主机)使用,并提供有关使用Apache WGSI进行生产部署的说明。有关pytreedb
的REST API的更多信息,请参阅此处,例如包括服务器的设置和API密钥的使用。 - Web前端:如果您想将宝贵的树数据与社区分享。基于本存储库中展示的REST API,我们可以轻松实现Web前端,提供多个查询选项、数据导出以及查询结果的地图视图。有关Weiser等人2022年的树数据的展示可在http://pytreedb.geog.uni-heidelberg.de/查看。
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 前端代码可以轻松地适应您的需求 - 请参阅 static 和 templates 中的 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