Threedi Raster Edits提供了适用于threedi的Python工具,例如栅格转换、对齐、填充、检查等
项目描述
threedi-raster-edits
简介
Threedi Raster Edits是在NENS内部用于栅格转换、编辑和检查的工具。目前它包括对齐、替换无数据、对齐检查、属性检查以及将栅格转换为摩擦、拦截等功能。
用法
我们可以下载栅格
>>> import threedi_raster_edits as tre >>> landuse = tre.UUID.THREEDI_LANDUSE >>> vector = tre.Vector(vector_path) >>> feature = vector[0] >>> rextract = tre.RasterExtraction(lizard_api_key) >>> rextract.run("ouput/raster.tif", landuse_uuid, feature.geometry, cellsize=0.5, threads=1)
栅格转换
>>> from threedi_raster_edits import ThreediRasterGroup >>> group = ThreediRasterGroup(dem_path, landuse_path=landuse_path, soil_path=soil_path) >>> group.load_landuse_conversion_table(csv_landuse_path) >>> group.load_soil_conversion_table(csv_soil_path) >>> group.generate_friction() >>> group.generate_permeability() >>> group.generate_interception() >>> group.generate_crop_type() >>> group.generate_max_infiltration() >>> group.generate_infiltration() >>> group.generate_hydraulic_conductivity() >>> group.friction.write("friction.tif")
栅格检查
>>> group = ThreediRasterGroup(dem_path, friction_path="friction.tif") >>> align_checks = group.check_alignemnt() >>> property_checks = group.check_properties()
也可以生成拦截建筑
>>> from threedi_raster_edits import Vector >>> buildings = Vector("buildings.shp") >>> group = ThreediRasterGroup(dem_path, buildings=buildings) >>> group.generate_building_interception(10) >>> group.interception.write("interception.tif")
还可以使用内部栅格类进行简单的栅格处理,如重新投影、裁剪、重采样、对齐、读取几何形状和创建副本
>>> from threedi_raster_edits import Raster >>> import numpy as np >>> raster = Raster("dem.tif") >>> raster.reproject(28992) >>> raster.resample(1,1) >>> raster.clip(Vector("clip.shp")) >>> raster.align(Raster("template.tif")) >>> copy = raster.copy(shell=True) >>> clip = Vector("clip.shp") >>> geometry = clip[0].geometry # geometry of first feature >>> clip_values = np.nansum(raster.read(clip))
对于更高级/更大的处理,您也可以使用栅格循环
>>> output = raster.copy(shell=True) >>> for tile in raster: >>> array = tile.array >>> array[array==1] = 20 >>> output.array = array, tile.location >>> output.write("tiles_adding.tif")
或者只对数组进行一些操作
>>> output = raster.copy(shell=True) >>> array = raster.array >>> array = array *100 >>> output.array = array >>> output.write("output.tif")
安装
我们可以使用以下方式安装
$ pip install threedi-raster-edits
(待办:在第一次发布后)
本项目开发版本的安装
GDAL不会自动安装,因此不在需求中,请自行安装GDAL 3.2.0或使用anaconda
$ conda create -n threedi_raster_edits python=3 gdal=3.2.0 rtree black pytest
我们使用Python的内置“virtualenv”来获取一个干净的目录。您只需要运行一次
$ python3 -m venv --system-site-packages .
virtualenv将它的命令放在
$ bin/pip install -r requirements.txt
将会有一个可以运行的脚本
$ bin/run-threedi-raster-edits
在 threedi-raster-edits/scripts.py 中运行 main() 函数,如有必要请调整。该脚本的配置在 setup.py 中(见 entry_points)。
为了得到格式良好的 Python 文件,无需手动操作,定期运行以下命令:
$ bin/black threedi_raster_edits
定期运行测试。这也会检查 pyflakes、black 并报告覆盖率。纯粹是奢华。
$ bin/pytest
测试也会在“github actions”上自动运行(针对“master”和拉取请求)。所以不要只创建分支,而要立即将其转换为拉取请求。
在标题前添加“[WIP]”,表示工作正在进行中。这样,你可以清楚地知道它尚未准备好合并。
重要:在拉取请求上给出反馈很容易。例如,对个别行进行少量评论。因此,如果您认为这很有用,请用它来获取早期反馈。
在您的拉取请求页面上,您还会自动收到来自自动化测试的反馈。
在 coveralls.io 上也有 覆盖率报告(一旦设置完毕)。
如果您需要新的依赖项(如 requests),请将其添加到 setup.py 中的 install_requires。例如,“black”这样的本地开发工具可以添加到 requirements.txt 目录中。在两种情况下,运行安装以实际安装您的依赖项。
$ bin/pip install -r requirements.txt
发布项目
要发布,首先全局安装 zest.releaser。
$ pip install zest.releaser
确保您在 master 分支上,并且已经更新了变更日志。然后使用“fullrelease”发布它。您可以在每个问题上都按“enter”键。
$ fullrelease
github action 应该上传新鲜包到 pypi。
threedi-raster-edits 的变更日志
0.27 (2022-08-29)
修复:对于栅格瓦片,现在不再全部在内存中完成。
为 lizard 包括依赖项安装进行清理。
更新用于 postgres 上传。再次工作。
更新块大小估计。
堆叠和相邻栅格之间的差异。
没有自动控制台记录。
0.26 (2022-07-11)
连接节点几何字段的更改。
0.25 (2022-07-08)
热修复:从 v2_aggregation_settings 中删除 aggregation_in_space
0.24 (2022-07-08)
热修复:requirements.txt
0.23 (2022-07-07)
添加了两个额外的依赖项。
0.22 (2022-07-07)
删除了 3Di 结果。
删除了 3Di 场景。
支持 Klondike。
0.21 (2022-03-22)
场景 > 3.8.0
0.20 (2022-03-22)
QGIS 变更以进行栅格转换。
包括全局缓存,用于 pickle 存储。
添加了简单的 threedi 场景下载。
0.19 (2022-02-28)
增加矢量环路的速度。
在脚本中添加了示例。
添加了直观的进度条,包括 gdal。
0.18 (2021-11-29)
更改了 rextract 的输入。
0.17 (2021-11-29)
为 lizard rextract 添加了线程。
还添加了 QGIS 兼容的显示进度的方式。
模拟现在在队列中。
0.16 (2021-10-28)
修复发布错误。
0.15 (2021-10-28)
更有效地加载 threedirastergroup。
0.14 (2021-10-28)
ThreediAPI 和 ThreediResults 现在是可选的。
0.13 (2021-10-19)
修复了矢量重投影。
为栅格添加了膨胀的栅格环。
为rastergroups添加了rasterloops
为rastergroups添加了膨胀的rasterloops
为rasters添加了bbox裁剪
0.12 (2021-09-13)
改进了差异算法
移除每次调用都固定的几何形状,现在使用veotor.fix()调用一次
fid=-1将产生一个fid,它是计数
0.11 (2021-09-06)
令牌释放
0.10 (2021-09-06)
添加了sqlite-model支持
添加了api支持
0.9 (2021-05-06)
更改了black格式。
0.8 (2021-05-06)
为rasters添加了剪辑
添加了自定义线字符串长度
添加了矢量插值
添加了(部分)修复三维rasters
0.7 (2021-03-26)
修复了发布过程(0.6/0.6相同)。
0.4 (2021-03-26)
修复了发布过程。
修复了测试。
添加了日志。
优化了rasters的内存使用。
向量和几何形状中的小改动。
0.3 (2021-03-25)
自动化的pypi发布。
0.2 (2021-03-12)
更改了raster类的语法
将导入更改为主脚本:例如,from threedi_raster_edits import raster, rastergroup等。
更改了readme。
重写了几何结构。
0.1 (2021-03-11)
使用cookiecutter和https://github.com/nens/cookiecutter-python-template创建了初始项目结构