提供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_server
和pytreedb
。
b) 克隆git仓库,并将目录更改为webserver
目录。然后运行python -m pip install .
,这将使用本地文件创建一个包,并将其复制到环境的site-packages
目录。然后您可以从任何地方导入pytreedb_server
和pytreedb
。
c) 克隆git仓库,并将目录更改为webserver
目录。在此目录中运行运行本地web服务器的命令(见下文)。您需要提供PYTREEDB_LOCATION
参数(见下一节)。
使用.env
设置
我们使用dotenv
包来配置服务器。应将pytreedb
和flask
参数写入当前目录的.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
- 在服务器使用的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]
- 使用pip安装
pytreedb_server
python -m pip install pytreedb_server
- 获取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"
- 创建/编辑Apache服务器配置。在此,我们将覆盖默认配置。使用您选择的文本编辑器(
vim
,nano
)以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>
- 创建一个新的文件
/var/www/pytreedb/pytreedb_server.wsgi
(根据需要调整路径)并添加以下行
from pytreedb_server.__main__ import app as application
如果您未通过pip安装pytreedb
和pytreedb_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
- 创建一个新的环境文件
/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
下载数据。
- 重新启动Apache并检查状态
sudo systemctl restart apache2
systemctl status apache2.service
- 导航到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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 58b262d1249ae4648e6c5c808fb337e52023945c7d3315ce3bbc7ab8e89a8071 |
|
MD5 | 17023553349cd8758c7733f1ae84b603 |
|
BLAKE2b-256 | bbe732301db244aa528791d97793a24325825a2838a728d72f108da73c87a306 |