跳转到主要内容

用于threedigrid管理的Python包

项目描述

Threedigrid:3Di网格管理框架

threedigrid管理的Python包。

Github Actions status Documentation Status PyPI Anaconda
  • 免费软件:BSD许可证

  • 文档:[https://threedigrid.readthedocs.io](https://threedigrid.readthedocs.io)。

概述

特性

  • 通过单个GridH5Admin实例访问threedicore管理

  • 通过预定义子集和Django风格过滤器查询模型数据

  • 将模型数据导出为GIS格式,如shapefile、geopackage

  • 将模型数据序列化为geojson

快速入门

标准的threedigrid分发相当轻量级,尽可能少地安装依赖项。如果您想充分利用threedigrid提供的所有功能(例如空间操作和命令行工具),请按以下方式安装

$ pip install threedigrid[geo,results]

控制台脚本

使用3digrid_explore快捷方式,只需运行

$ 3digrid_explore --grid-file=<path to grid file> --ipy

这将启动一个ipython会话,其中已加载GridH5Admin实例。

要快速查看threedimodels元数据,请省略--ipy选项或显式运行

$ 3digrid_explore --grid-file=<the to grid file> --no-ipy

这将输出如下内容

Overview of model specifics:

model slug:              v2_bergermeer-v2_bergermeer_bres_maalstop-58-b1f8179f1f3c2333adb08c9e6933fa7b9a8cd163
threedicore version:     0-20180315-3578e9b-1
threedi version:         1.63.dev0
has 1d:                  True
has 2d:                  True
has groundwater:         True
has levees:              True
has breaches:            True
has pumpstations:        True

(I)Python shell

获取网格管理实例

from threedigrid.admin.gridadmin import GridH5Admin

f = 'gridadmin.h5'
ga = GridH5Admin(f)

网格管理直接包含一些模型特定属性,例如模型是否具有1D、2D或地下水段

In [4]: ga.has_groundwater
Out[4]: False

In [5]: ga.has_1d
Out[5]: True

存在不同类型的过滤器,但一般来说,过滤器作用于字段。这意味着您可以通过值进行筛选。如果您有一个线模型实例,可以通过kcu字段筛选数据

ga.lines.filter(kcu__in=[100,102])

或通过lik值

ga.lines.filter(lik__eq=4)

筛选是懒加载的,也就是说,要检索数据,您必须显式调用data

ga.lines.filter(lik__eq=4).data  # will return an ordered dict

使用threedigrid还可以分析和导出结构控制动作netcdf

from threedigrid.admin.gridresultadmin import GridH5StructureControl
from threedigrid.admin.structure_controls.exporters import structure_control_actions_to_csv

gst = GridH5StructureControl("gridadmin.h5", "structure_control_actions_3di.nc")
gst.table_control
structure_control_actions_to_csv(gst, "test.csv")

远程过程调用

目前仅包含客户端。服务器端可能在以后阶段添加。注意:这是一个高级功能,用于3Di堆栈内部,您可能不需要此功能。注意2:您需要Python 3.7或更高版本才能使其工作。

安装

$ pip install threedigrid[rpc]

基本用法

ga = GridH5ResultAdmin('rpc://REDIS_HOST/SIMULATION_ID', 'rpc://REDIS_HOST/SIMULATION_ID')
# Replace REDIS_HOST and SIMULATION_ID with actual values.
future_result = ga.nodes.filter(lik__eq=4).data
data = await future_result.resolve()

订阅用法

subscription = await future_result.subscribe()

async for item in subscription.enumerate():
      # do something with item

致谢

此包是用Cookiecutteraudreyr/cookiecutter-pypackage项目模板创建的。

历史记录

2.3.0 (2024-08-07)

  • 添加自定义结果NetCDF接口。

2.2.11 (2024-07-25)

  • 修复NumPy 2.0不兼容性。

2.2.10 (2024-05-29)

  • 将_field_model_dict及其方法移回GridH5ResultAdmin。

  • 在GridH5WaterQualityResultAdmin中添加substances并重写get_model_instance_by_field_name方法。

2.2.9 (2024-05-27)

  • 将_field_model_dict及其方法从GridH5ResultAdmin移到GridH5Admin。

2.2.8 (2024-04-25)

  • group_by_grid_id添加到结构控制接口。

2.2.7 (2024-04-22)

  • 在节点上设置物质单位。

  • 在突破geojson导出上的levl属性上设置交换级别。

  • 从测试中删除旧的gridadmin文件。

  • 在geojson导出中设置泵并在起始节点上添加线几何形状。

  • 如果为YZ表列数据,则在geojson导出中返回YZ。

2.2.6 (2024-03-13)

  • 对于渠道、管道、闸门、涵洞和孔口,将横截面类型和表列数据添加到geojson导出中。

2.2.5 (2024-03-07)

  • 从代码依赖项中删除sphinx_rtd_theme (#221)

2.2.4 (2024-02-06)

  • 物质计数正则表达式修复

  • 在节点上设置物质名称

2.2.3 (2024-01-12)

  • 修复水质量结果中的1D/2D数据交换

2.2.3b (2024-01-02)

  • 添加构建/发布Github操作。

2.2.2 (2023-12-21)

  • 错误修复:仅在强边情况下:在所有TimeSeriesSubsetArrayField中正确排序时间序列。这影响了:节点 [infiltration_rate_simple, ucx, ucy, leak, intercepted_volume, q_sss] 线:[qp, up1, breach_depth, breach_width]

  • 注意:对于breaches对象,depthwidth字段已损坏。请使用lines对象上的breach_depthbreach_width

2.2.1 (2023-12-05)

  • 修复单细胞模型中Lines查找索引的bug。

2.2.0 (2023-11-07)

  • 添加水质结果NetCDF接口。

  • 放弃对Python 3.7的支持。

2.1.2 (2023-11-03)

  • 重试PyPi发布。

2.1.1 (2023-11-03)

  • 将缺少的init文件添加到结构控制文件夹。

2.1.0 (2023-10-16)

  • 添加结构控制动作NetCDF接口和CSV导出器。

2.0.6 (2023-07-07)

  • seweragesewerage_type字段添加到Line模型。

2.0.5 (2023-03-27)

  • 将“line_geometries”用于Breaches模型。

2.0.4 (2023-03-24)

  • 使“line_coords”成为breaches geojson输出的几何形状。

2.0.3 (2023-03-22)

  • 修复bug:数据集实例检查不是通用的。

2.0.2 (2023-03-21)

  • 将“line_coords”添加到Breaches模型和默认导出字段。

2.0.1 (2023-02-22)

  • 将包含3Di模型元信息的meta表添加到Geokpackage导出。

  • 添加2D地下水边界线类型600、700、800、900。扩展了“2D_GROUNDWATER”子集。

2.0.0 (2023-01-11)

  • 删除gridadmin.lines.breaches。

  • 删除MappedSubsetArrayField。

  • 将“code”和“display_name”添加到breaches。

  • 为节点添加缺少的Geopackage字段bottom_leveldrain_level。将connection_node_storage_are重命名为connection_node_storage_area

  • 放弃对python 3.6的支持。

  • 修复与shapely 2.*的兼容性。

1.2.5 (2022-10-17)

  • 优化geojson导出内存使用。

  • 从flowlines(1D2D)导出中删除大部分属性。

1.2.4 (2022-10-03)

  • 允许将flowlines(1D2D)导出到geojson或shapefile。

1.2.3 (2022-06-01)

  • 改进Geopackage导出。

1.2.2 (2022-05-31)

  • 自1.2.1以来,新版本已在PyPi中存在。

1.2.1 (2022-05-31)

  • 添加基于OGR的新导出器,用于Geopackage导出。目前只为线、单元格、节点和泵提供默认导出设置。

  • 修复crs属性中的错误。

  • 在gridadmin.breaches上删除弃用警告,并将其添加到gridadmin.lines.breaches。

  • 修复新gridadmins的export_breaches。

1.2.0 (2022-03-09)

  • discharge_coefficient_positivedischarge_coefficient_negative添加到breaches。

  • 在GridH5ResultAdmin初始化中删除threedicore版本检查。

  • 将crs属性添加到GridH5Admin。需要Pyproj >=2.2。

  • 放弃对python 2.7的支持。

1.1.14 (2022-02-16)

  • 修复几何选择过滤,gridadmin现在可以包含nan值。

  • 将dimp属性添加到节点。

1.1.13 (2021-12-09)

  • 将flod和flou属性添加到线,以便可能读取障碍物高度。

1.1.12 (2021-11-18)

  • 将“has_dem_averaged”属性添加到单元格。

1.1.11 (2021-11-02)

  • 导出器现在将NaN和-9999.0浮点值导出为NULL。

  • 修复OGR导出器中导出字符串dtype字段(例如,cont_type)。例如,字符串“b'something'”现在写为“something”。

  • 在所有导出器中跳过虚拟元素(id=0)。

  • 在OGR(shapefile/geopackage/某些geojson)导出器中设置FID(特征ID)。

  • 弃用threedigrid.admin.breaches、.lines、.nodes和.pumps下的特定serializers.py。

1.1.10 (2021-11-01)

  • 修复GeoJSON levees坐标顺序。

1.1.9 (2021-10-25)

  • 将lines下的“s_1d”字段重命名为“ds1d_half”。

  • 将“initial_waterlevel”添加到节点。

1.1.8 (2021-10-25)

  • 将“nodes_embedded”(在gridadmin类中可用)添加。

1.1.7 (2021-10-18)

  • 修复了h5py>=3.1.x的timeseries过滤。

1.1.6 (2021-08-31)

  • 将CrossSection模型添加到ORM。

  • 将以下字段添加到lines:dpumax cross1 cross2 ds1d s1d cross_weight invert_level_start_point invert_level_end_point

  • 将以下字段添加到nodes:calculation_type drain_level storage_area dmax

  • 为Nodes创建新子集1D。

1.1.5 (2021-08-10)

  • 在pypi上发布(仓库没有Github动作)。

1.1.4 (2021-08-10)

  • 在geojson输出中将nan替换为null。

  • 删除需求文件,仅在docker开发中保留一个。

1.1.3 (2021-06-01)

  • 修复bug:geojson levees导出也因3.8.10和numpy 1.19.1而崩溃。

1.1.2 (2021-05-28)

  • 修复仅针对聚合结果admin的过滤。(#121)

  • 将cross_pix_coords字段添加到lines。

  • 修复bug:geojson line_geometries导出在Python 3.8.10和numpy 1.19.1下崩溃。需要显式的astype转换。

1.1.1 (2021-03-30)

  • 通过删除测试减少源分布文件大小。

1.1.0 (2021-03-29)

  • 将asyncio-rpc提升到0.1.10。

  • 修复pyproj <= 1.9.6的GeoJSON导出。

  • 修复与h5py 3.*的兼容性。

  • 添加gridadmin.grid.transform。

  • 修复gridadmin.grid.n2dtot和.dx传播。

  • 添加了gridadmin.cells.iter_by_tile()和.get_extent_pixels().

1.0.27 (2021-02-22)

  • 将asyncio-rpc升级到0.1.9。

1.0.26 (2021-02-05)

  • 修复了rpc gridadmin属性。

1.0.25 (2020-09-15)

  • 错误修复:crest_level也被Inpy反转。在准备步骤中使用原始值以包含正确的(非反转)值。

1.0.24 (2020-09-02)

  • 移除了依赖项numba,因为它在Linux上并没有真正带来性能提升。

1.0.23 (2020-09-02)

  • 上传失败后创建新的发布版本。

1.0.22 (2020-09-02)

  • 为渠道和管道添加了额外的字段‘discharge_coefficient’。这些字段默认为1.0。

  • 错误修复:在准备步骤创建line_geometries时不使用z坐标。

1.0.21 (2020-07-17)

  • Invert_level_start_point和end point被Inpy反转。在此更改之后,值将再次正确,但现有的gridadmin文件仍将具有错误值。

  • 在具有特定breach字段的线条下添加了《Breaches》模型,这些字段从‘breaches’ h5py datagroup映射而来。

  • 添加了《MappedSubsetArrayField》,允许将其他h5py datagroup中的数组映射到另一个datagroup子集上的模型。Breaches使用此功能将‘breaches’下的数组映射到‘lines’。

1.0.20.12 (2020-07-14)

  • 修复了上一个版本的问题。

1.0.20.11 (2020-07-14)

  • 修复了Nodgrid生成错误。

1.0.20.10 (2020-07-07)

  • 在setup.py中添加了缺失的numba需求。

1.0.20.9 (2020-07-07)

  • 修复了RPC breaches/pumps错误。

  • 在单元格上添加了快速的nod_grid生成。

1.0.20.8 (2020-05-22)

  • 为前端添加了groundwater_cells到exporter。

1.0.20.7 (2020-05-18)

  • content_pk添加到所有具有content_pk的结构export_constants中。

1.0.20.6 (2020-04-15)

  • 如果没有数据集,现在返回一个空数组[]而不是None。

  • 线geojson项需要使用line_geometry值。

  • 错误修复:Model._get_subset_idx没有使用父类的mixins实例化新的子集。

1.0.20.5 (2020-04-01)

  • 使用‘ga.xxx.id.size’检查某些子模型(如渠道/溢洪道/检查井)是否可用于geojson导出。

1.0.20.4 (2020-03-31)

  • 允许使用较旧的pyrpoj版本。(pre 2.2.0)

  • 修复了timeseries start_time=0选择错误,并允许与sample()方法结合使用indexes=slice(x,x,x)。

  • 在包的所有导入周围添加了try-except。此包仅在安装了带有额外[geo]扩展的threedigrid时才可用。

  • ORIFICES_EXPORT_FIELDS添加到export_constants。

1.0.20.3 (2020-03-18)

  • 为单元格添加了额外的字段pixel_width

  • 错误修复:GeometryIntersectionFilter:过滤器仅检查相交的边界框。

1.0.20.2 (2020-03-06)

  • sample方法需要跳过最后一个时间戳,以便SWMR能够正确工作。(时间数据集可以比带时间序列的数据集多一个条目)

1.0.20.1 (2020-02-26)

  • 错误修复:没有坐标的重投影(空数组)

1.0.20 (2020-02-19)

  • 添加了《GeometryIntersectionFilter》。

  • 添加了通用的GeoJsonSerializer,允许您指定要序列化和提取到geojson的字段名称。GeoJsonSerializer允许您指定嵌套字段。

  • 为每个模型添加了一组标准导出字段。

  • 根据文件扩展名自动选择正确的序列化器。

    • .json/.geojson –> to_geojson

    • .gpgk –> to_geopackage

    • .shp –> to_shape

1.0.19.1 (2020-02-04)

  • 小错误修复,需要在初始化时检查h5py文件路径是str还是bytes字符串。

1.0.19 (2020-01-31)

  • 首次发布带有RPC集成。

1.0.19rc3(2020-01-14)

  • 升级了asyncio-rpc版本。

1.0.19rc2(2020-01-14)

  • 修复了不正确的版本号。

1.0.19rc1(2020-01-14)

  • 添加了RPC数据源,允许在RPC设置中使用大多数threedigrid。使用asyncio-rpc发送/处理RPC调用。

  • RPC数据源允许一次性执行(resolve())和pub/sub(subscribe())功能。

  • 重构以允许使用RPC数据源。

1.0.18 (2019-11-28)

  • 如果存在,则仅使用pyproj Transformer,否则恢复到旧转换方法。

1.0.17 (2019-11-28)

  • content_pk添加到pumps模型。

  • 升级了包版本。

  • 减少了line_geometries的重投影开销。

1.0.16 (2019-07-08)

  • 从Orifice模型/序列化器中移除了最大容量。

1.0.15 (2019-07-05)

  • 修复了默认空值的组更新。

1.0.14 (2019-06-19)

  • 在准备阶段将数据库对象转换为NumPy数组时,不要使用默认值0

1.0.13 (2019-05-01)

  • 修复了_field_model_dict作为类变量的问题。

1.0.12 (2019-04-18)

  • 向节点添加了sumax。

1.0.11 (2019-02-01)

  • 修复了h5py_file方法映射中的错误。

1.0.10 (2019-01-31)

  • 向threedigrid添加了源和汇(q_sss)。

1.0.9 (2019-01-31)

  • 修复了在connection_node_pk中的曼洞准备映射。

  • 添加了to_structured_array方法,用于以Numpy结构数组的形式检索(过滤)结果,而不是OrderedDict。

1.0.8 (2019-01-03)

  • 将字段codedisplay_nameshape的类型设置为固定值。这些字段现在分别具有32、64和4个字符的固定长度。

1.0.7 (2018-11-21)

  • 修复了Python 3中dict.values()和dict.keys()导致的一些意外行为。

1.0.6 (2018-11-14)

  • 由于上传失败,推出新版本。

1.0.5 (2018-11-14)

  • 将“当前”聚合选项添加到体积和截留体积中。

  • 对于多维索引,使用非元组序列是过时的;请使用arr[tuple(seq)]而不是arr[seq]

  • 属性应该是字符串,这样我们就可以对它们使用字符串方法。

  • 如果没有,则不要准备堤坝。

  • 将需求文件拆分为更细粒度的构建(例如生成文档)。

  • 将“截留体积”添加到NodesAggregateResultsMixin中。

  • 将需求文件拆分为更细粒度的构建(例如生成文档)。

1.0.4 (2018-10-17)

  • 添加了BooleanArrayField用于布尔值,并用于is_manhole过滤器。NO_DATA_VALUE被解释为False。

1.0.3 (2018-09-17)

  • 在导入cftime时,不要抛出异常ImportError

1.0.2 (2018-09-17)

  • 为曼洞添加布尔过滤器。

1.0.1 (2018-09-11)

  • 为Python 2和3修补将NumPy字符串/字节转换为浮点数。

  • 删除NetCDF库,并使用h5py替换打开NetCDF文件。

  • 升级h5py到2.8.0。

1.0 (2018-09-04)

  • 使threedigrid与Python 3.5及以上版本兼容。

0.2.8 (2018-07-23)

  • 修复了问题#44:对于计数属性,使用方法get_filtered_field_value()而不是get_field_value()

  • 正确关闭GridH5ResultAdmin中的netcdf文件。

0.2.7 (2018-05-24)

  • 将2D的导出函数添加到export_all()集合中。

0.2.6 (2018-05-17)

  • 不要使用pkg_resources来确定当前版本,而是使用zest_releaser更新threedigrid/init.py中的版本字符串。

0.2.5 (2018-05-16)

  • 在调用(geo-)json.dumps()时,使用自定义的NumpyEncoder将特定的NumPy类型转换为原生Python类型。

0.2.4 (2018-05-15)

  • 引入子集字段,可用于查询仅针对模型子集(如2D部分)收集的结果。

0.2.3 (2018-05-14)

  • 修复了复合字段的lookup_index功能。

  • 使模型名称属性可选。也就是说,如果无法推导出名称,则返回“unknown”。

  • 将breach-timeseries上的深度/宽度字段更改为breach_depth和breach_width。

0.2.2 (2018-04-30)

  • _get_composite_meta()不再在复合字段属性不同时引发AssertionError。相反,发出警告。

0.2.1 (2018-04-26)

  • 修复了错误:threedicore_result_version必须是属性。

0.2 (2018-04-26)

  • 为2D_GROUNDWATER、2D_OPEN_WATER和2D_VERTICAL_INFILTRATION添加了额外的导出器。

    • 2D_GROUNDWATER

    • 2D_OPEN_WATER

    • 2D_VERTICAL_INFILTRATION

  • GridH5ResultAdmin类添加了方法get_model_instance_by_field_name。这使得在您有字段名称但不知道它属于哪个模型的情况下进行反向查找成为可能。注意,字段必须是唯一的,否则将引发IndexError

  • 向timeseries_mixin模块添加了属性dt_timestamps

  • 使用pkg_resources API动态地将版本号添加到__init__文件中。

  • 对于聚合结果,显示所有时间序列字段的戳记。

  • 在检索时间序列的子集时,过滤聚合结果中的戳记。

  • 引入了ModelMeta类。目前其主要目的是计算所有可能的复合字段和聚合变量的组合。

  • 方法slice(在Model类中)的固定返回语句现在接受 **new_class_kwargs

  • 现在将空或缺失的数据集显示为 np.array(None),而不是引发错误。

0.1.6 (2018-04-18)

  • 使用twine 1.11的新版本。

0.1.5 (2018-04-18)

  • 添加了对复合字段的支持,可以将其用作单个字段从多个源变量中获取数据。例如,result_3di netcdfs可以像gridadmin文件一样进行查询。

0.1.4 (2018-04-08)

  • 将ResultMixin修改为根据netcdf变量动态添加属性。

  • 添加了对线/节点数据的初步结果处理。

  • 仅对受影响的数组计算过滤器掩码,然后再将其应用于所有数组。

  • “only”过滤器运行得更快,因为过滤器掩码仅应用于受影响的字段。

  • 过滤器掩码在获取第一个值后缓存在线/节点实例上。因此,您可以这样做:

    queryset = gridadmin.lines.filter(kcu=2) ids = queryset.id line_coords = queryset.line_coords

    并且过滤器掩码将只计算一次。

  • 添加了click控制台脚本 3digrid_explore3digrid_export,以便快速查看数据导出。

  • 将ogr/gdal导入设置为可选,以避免破坏文档的部分。

  • 添加了sphinx文档管道的文档和设置。

  • 为嵌入式渠道使用线性引用,以在准备可视化线几何时保持原始几何形状。

  • 定义额外的选项,以使标准threedigrid分布尽可能轻量。

  • 将attrs中的字符串转换为numpy.string_,以修复Windows下的崩溃。

0.1.3 (2018-03-16)

  • GridH5Admin中删除属性 has_groundwater。这始终应由threedicore本身提供。为向后兼容性提供警告。

0.1.2 (2018-03-12)

  • 获取模型范围现在始终返回一个bbox(minX,minY,maxX,maxY)。

0.1.1 (2018-03-06)

  • 所有导入都是绝对的。

  • 使用pip添加了安装信息。

0.1.0 (2018-03-05)

  • 这是使用fullrelease的第一个版本。

项目详情


发布历史 发布通知 | RSS源

下载文件

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

源分发

threedigrid-2.3.0.tar.gz (123.8 kB 查看哈希值)

上传时间

构建分发

threedigrid-2.3.0-py2.py3-none-any.whl (110.8 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者