隐式地层建模
dimine_python_sdk.lib.exploitation 提供 ImplicitModeling 类,基于钻孔数据库的分层信息进行隐式地层建模,生成各地层的三维三角网(TIN)实体。
一、基本用法
隐式地层建模使用 ImplicitModeling.stratum_modeling() 静态方法,传入 ImplicitStratumModelingParam 参数对象,返回 (地层名称, TINGeometry) 列表:
from dimine_python_sdk.lib.exploitation import ImplicitModeling
from dimine_python_sdk.lib.exploitation.models import (
ImplicitStratumModelingParam,
ImplicitStratumDataParam,
ImplicitGridParam,
ImplicitEstimationParam,
)
# 配置数据参数
data_param = ImplicitStratumDataParam(
drill_file=r"F:\测试数据\钻孔数据库.dmd",
layer_table="分层表",
layer_table_field="地层",
layer_sequence=["泥盆纪地层", "志留纪地层", "寒武纪地层"],
)
# 配置网格参数(可选,有默认值)
grid_param = ImplicitGridParam(
x_node_num=81,
y_node_num=81,
z_node_num=20,
offset=10.0,
)
# 配置估值参数(可选,有默认值)
estimation_param = ImplicitEstimationParam(
reach=100.0,
reach_point_num=10,
)
# 组合参数并执行建模
param = ImplicitStratumModelingParam(
data=data_param,
grid=grid_param,
estimation=estimation_param,
pinch_thickness=0.1,
)
results = ImplicitModeling.stratum_modeling(param)
for name, tin in results:
print(f"地层: {name}")
print(f" 顶点数: {tin.points.shape[0]}")
print(f" 面片数: {tin.faces.shape[0]}")
二、数据参数(ImplicitStratumDataParam)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
drill_file |
str |
✅ | 钻孔数据库文件路径(.dmd) |
layer_table |
str |
✅ | 分层表名称(DMD 扩展表) |
layer_table_field |
str |
✅ | 分层表中地层字段名称 |
layer_sequence |
List[str] |
可选 | 地层序列,按建模顺序排列。为 None 时由算法内部计算默认顺序 |
注意:
layer_table对应的扩展表必须已包含在 DMD 文件中。如果 DMD 中没有该扩展表,需要通过DmdFile.extend_tables先添加。
三、网格参数(ImplicitGridParam)
控制隐式建模的网格分辨率。所有参数有默认值。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
type |
int |
1 |
网格类型 |
adaptive |
bool |
True |
是否自适应网格 |
x_node_num |
int |
81 |
X 方向节点数(>1) |
y_node_num |
int |
81 |
Y 方向节点数(>1) |
z_node_num |
int |
20 |
Z 方向节点数(>1) |
offset |
float |
10.0 |
网格外扩距离(≥0) |
四、估值参数(ImplicitEstimationParam)
控制隐式建模中插值估算的行为。所有参数有默认值。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
method |
int |
0 |
估值方法 |
kernel_function |
int |
0 |
核函数类型 |
reach_point_num |
int |
10 |
邻域搜索点数(>0) |
reach |
float |
100.0 |
搜索半径(>0) |
function_type |
int |
0 |
变差函数类型 |
nugget |
float |
0.0 |
块金值(≥0) |
sill |
float |
2.0 |
基台值(≥0) |
range |
float |
10.0 |
变程(>0) |
ellipse_rate |
float |
1.0 |
椭球各向异性比(>0) |
main_angle |
float |
0.0 |
主方向角(度) |
五、建模结果
stratum_modeling() 返回 List[Tuple[str, TINGeometry]],按地层建模顺序排列,每项为 (地层名称, 三角网实体):
results = ImplicitModeling.stratum_modeling(param)
for name, tin in results:
print(name)
# 三角网顶点 (N, 3)
print(tin.points.shape)
# 三角网面片索引 (M, 3)
print(tin.faces.shape)
结果可进一步用于:
- 保存为 DMF 文件(通过 DmfFile.insert_shell)
- 3D 可视化渲染(通过 render_tin)
六、异常处理
from dimine_python_sdk.lib.exploitation import ImplicitModelingError, ImplicitStratumModelingError
try:
results = ImplicitModeling.stratum_modeling(param)
except ImplicitStratumModelingError as e:
print(f"隐式地层建模失败: {e}")
except ImplicitModelingError as e:
print(f"隐式建模异常: {e}")
异常层次:
- ImplicitModelingError(RuntimeError) — 隐式建模异常基类
- ImplicitStratumModelingError(ImplicitModelingError) — 隐式地层建模失败