跳转到主要内容

提供pytreedb API访问的服务器

项目描述

pytreedb-Server

此包提供了一个作为pytreedb实例前端的web服务器。

先决条件

  • Python包
    • pytreedb
    • flask
    • dotenv

本地开发部署

安装

pytreedb_server包可以通过以下方式安装:a) 通过PyPI安装,b) 从git仓库使用pip安装,或c) 作为本地目录使用。

a) [推荐]: 在准备好的(例如,conda)环境中运行python -m pip install pytreedb_server,这将安装pytreedb。然后您可以从任何地方导入pytreedb_serverpytreedb

b) 克隆git仓库,并将目录更改为webserver目录。然后运行python -m pip install .,这将使用本地文件创建一个包,并将其复制到环境的site-packages目录。然后您可以从任何地方导入pytreedb_serverpytreedb

c) 克隆git仓库,并将目录更改为webserver目录。在此目录中运行运行本地web服务器的命令(见下文)。您需要提供PYTREEDB_LOCATION参数(见下一节)。

使用.env设置

我们使用dotenv包来配置服务器。应将pytreedbflask参数写入当前目录的.env-文件。

# path of the pytreedb package (if not installed via PIP)
PYTREEDB_LOCATION="../pytreedb"
# local filename for database file
PYTREEDB_FILENAME="syssifoss.db"
# if set, download (and overwrite local file) data from this URL
PYTREEDB_DOWNLOAD="https://github.com/3dgeo-heidelberg/pytreedb/raw/main/data/test/geojsons.zip"
# connection string to mongodb (e.g. 127.0.0.1, or "mongodb+srv://..." if using MongoDB Cloud)
CONN_URI = ""
# database name to connect to
CONN_DB = ""
# collection to connect to
CONN_COL = ""
# FLASK settings

FLASK_RUN_HOST="0.0.0.0"
FLASK_RUN_PORT="5001"

配置pytreedb数据集

数据集不是先决条件。请在Flask在您的机器上运行后遵循说明。

本地托管web服务器

在web服务器文件夹下,运行

conda activate pytreedb
python -m pytreedb_server

生产部署

请注意,Flask不适合用于生产。然而,您可以使用以下步骤在Apache WGSI中直接使用该包as-is

  1. 在服务器使用的conda环境中安装 mod_wsgi。以下假设环境名称为pytreedb
conda create -n pytreedb python=3.8
conda activate pytreedb
conda install mod_wsgi -c conda-forge -y
python -m pip install python-dotenv pandas pymongo[srv]
  1. 使用pip安装pytreedb_server
python -m pip install pytreedb_server
  1. 获取WSGI库的路径
mod_wsgi-express module-config

例如,这将给出

LoadModule wsgi_module "/opt/miniconda3/envs/pytreedb/lib/python3.9/site-packages/mod_wsgi/server/mod_wsgi-py39.cpython-39-x86_64-linux-gnu.so"
WSGIPythonHome "/opt/miniconda3/envs/pytreedb"
  1. 创建/编辑Apache服务器配置。在此,我们将覆盖默认配置。使用您选择的文本编辑器(vimnano)以root用户身份编辑文件/etc/apache2/sites-enabled/000-default.conf,并插入以下行。请确保调整所有与您的conda安装和数据库放置位置相关的路径(在本例中:/var/www/pytreedb
WSGIPythonHome "/opt/miniconda3/envs/pytreedb"
LoadModule wsgi_module "/opt/miniconda3/envs/pytreedb/lib/python3.8/site-packages/mod_wsgi/server/mod_wsgi-py38.cpython-38-x86_64-linux-gnu.so"

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    WSGIDaemonProcess pytreedb python-path=/opt/miniconda3/envs/pytreedb/lib/python3.8/site-packages home=/var/www/pytreedb/webserver
    WSGIScriptAlias / /var/www/pytreedb/pytreedb_server.wsgi

    <Directory /var/www/pytreedb/>
        WSGIProcessGroup pytreedb
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>
  1. 创建一个新的文件/var/www/pytreedb/pytreedb_server.wsgi(根据需要调整路径)并添加以下行
from pytreedb_server.__main__ import app as application

如果您未通过pip安装pytreedbpytreedb_server,则需要在此之前添加安装路径

import sys
sys.path.insert(0, '/var/www/pytreedb/webserver/')
sys.path.insert(0, '/var/www/pytreedb/')
from pytreedb_server.__main__ import app as application
  1. 创建一个新的环境文件/var/www/pytreedb/webserver/.env并填写以下参数
CONN_URI = ""
CONN_DB = ""
CONN_COL = ""

PYTREEDB_FILENAME="/var/www/pytreedb/syssifoss.db"
PYTREEDB_DOWNLOAD=""

请参阅上面的部分以获取参数的详细信息。需要由web用户(通常是www-data)可写PYTREEDB_FILENAME。首次运行时,可能需要使用PYTREEDB_DOWNLOAD下载数据。

  1. 重新启动Apache并检查状态
sudo systemctl restart apache2
systemctl status apache2.service
  1. 导航到http://127.0.0.1/并检查是否按预期工作。

如果发生任何更改(例如,在.env文件中),则按步骤7重新加载apache2。如果您使用了PYTREEDB_DOWNLOAD,请确保再次删除它并重新加载服务器,否则数据库将随每个http请求下载。

有关其他部署选项,请参阅https://flask.org.cn/en/2.0.x/deploying/

用法

在“按索引获取树”搜索框中,您可以直接根据索引搜索树。

在“搜索数据库”区域,我们预定义了以下筛选器

筛选器 对应字段
物种 properties.species
模式 properties.data.mode
树冠 properties.data.canopy_condition
质量 properties.data.quality
来源 properties.measurements.source
胸径 properties.measurements.DBH_cm
高度 properties.measurements.height_m
树冠直径 properties.measurements.mean_crown_diameter_m

筛选器的默认逻辑运算符为AND。您可以通过单击每个筛选器前面的按钮在AND/OR之间切换。

我们还可以允许深度为3的括号。通过将筛选器向右移动,将添加一个括号来包围前面的筛选器与当前筛选器。如果您仍然不熟悉我们的搜索界面,不确定是否正确配置了搜索,只需按“更新预览”按钮检查它是否与您的期望查询一致。

您可以将查询导出为Json文件以保存到本地,并导入此类查询以供将来使用。单击“永久链接”按钮还会复制当前查询的链接。

API

您可以使用以下二维码中显示的密钥访问我们的示例服务器API http://pytreedb.geog.uni-heidelberg.de/

扫描二维码并保存密钥。将请求头中的X-Api-Key值设置为密钥,否则您的请求将不会被授权。

如果您使用curl

curl -v -H "X-Api-Key:{api key here}" {URL here}

如果您使用API平台,例如Postman,请从授权类型中选择“API Key”,并将密钥名称设置为“X-Api-Key”。

GET方法

请求 描述
/stats 数据库中的树木和物种数量
/listspecies 数据库中独特的物种名称
/sharedproperties 所有对象之间共享的所有对象的properties列表
/getitem/<index> 通过索引获取特定树木
/download/exportcollection/<query> 从查询结果生成所有树木的特征集合
/download/lazlinks/tree/<index> 通过索引获取树木的点云URL列表
/download/lazlinks/<query> 从查询结果获取所有树木的点云URL列表
/download/exportcsv/<query> 从查询结果获取包含所有树木信息的csv文件

POST方法

请求 描述 示例消息
/search 基于给定查询进行搜索。返回包含搜索结果的Json对象 {"properties.species": "Abies alba"}
/search/wssearch 此端点仅用于前端UI的搜索请求,以提高网站性能 {"properties.species": "Abies alba", "limit": 10, "nthEntrySet": 3, "getCoords": false}

注意:GET方法中所有 <query> 参数都应使用base64编码。

有关查询的更多示例,请参阅 example_queries

项目详情


下载文件

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

源分发

pytreedb_server-1.0.0.post2.tar.gz (477.4 kB 查看哈希值)

上传时间

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面