基于大模型与GeoScene从地质钻孔报告提取岩土分类体元

一、环境要求

GeoScene Pro 5.1  + Python3.11 + 千问Qwen-Long模型

拷贝克隆GeoScene安装目录conda下的arcpy环境。

在克隆后的新环境中,使用conda命令安装OpenAI的包

二、钻孔报告概况

首先用脚本将原始钻孔报告的pdf拆分,按钻孔编号拆分。使用pypdf写一个独立脚本拆分原始报告。

原始报告
钻孔报告拆分示意

三、脚本开发

首先初始化大模型调用的客户端OpenAI

初始化客户端

写个辅助函数,从模型返回的内容中提取第一个 JSON 对象

从大模型返回中提取JSON对象

对单个PDF文件提问,返回解析后的JSON数据的核心方法。

核心方法

定义main函数,遍历目录中所有pdf文档,调用上述核心方法,并将返回的json通过arcpy写入gdb要素类。

main函数(部分1)
main函数(部分2)

四、脚本提取结果后处理

1.先导出要素到一个新的output.gdb,在环境设置里设置包含Z值,Z默认为0。得到了含Z值的点要素类,但Z值为0。

2.再创建一个双精度数值字段,用于存储绝对Z值的高程信息,字段计算器= 0- !from_depth!

(提取的点要素属性包含了深度,但不含Z值,最好具有当地DEM做一下基于DEM的栅格提取至点,得到DEM值,用DEM值减去当前深度,得到绝对Z值。)

3.使用工具:“依据属性实现要素转3D” (Feature To 3D By Attribute) 工具,这个工具在 “3D Analyst 工具” > “3D要素” 工具集中。在参数设置中,将你的2D要素作为输入,并选择上一步那个包含高程信息的字段作为“高度字段”。工具会自动创建一个3D要素类,其折点Z值就来自该字段。

钻孔可视化

4.为了后续使用插值方法,将类别字段layer_code文本映射为一个新建的短整型数值的字段。使用字段计算器+代码块。

在值字段 = 的表达式中输入map_uscs(!layer_code!)

在代码块输入定义 def map_uscs(code)方法

# 定义 USCS 代码到整数的映射字典,具体根据实际具有的分类而定。

5.使用按位置选择工具,手动绘制一个区域,选中较为集中的区域,该区域所有的三维点高亮。(钻孔覆盖区域不全,选一个区域)

6. 使用地统计工具箱中的 3D经验贝叶斯克里金法 工具进行插值。Z 值字段:选择Shape.Z。要计算的属性字段:选择你刚创建的计算映射的数值字段。

3D经验贝叶斯克里金工具插值结果

7.在左侧内容窗格,右键这个地统计图层,点导出。指定输出路径和文件名,根据需求设置输出像元大小(我没设置,默认是X和Y 60多70多还是100多,Z是3米左右):设置 X, Y, Z 方向上的分辨率。你需要根据钻孔的分布密度和地质构造的复杂程度来设置。分辨率越高,文件越大,但细节越丰富。

8.可视化,注意移除掉自动添加进来的体元。手动添加体元栅格时,选择变量为离散型,使用离散型渲染。加载以后,再在符号系统中根据分类值重新编写显示的图例内容,如由数字改为USCS代码。

体元结果生成

9.体元成果发布,通过数据管理工具箱-打包工具集,打包slpk并上传GeoScene Enterprise发布。可以在web端预览和调用

创建体元场景图层内容
发布后预览

总结

调用千问Qwen-Long大语言模型,从历史归档的钻孔报告pdf文档中提取结构化的钻孔信息JSON。是大模型赋予的能力。将钻孔信息JSON转化为3D可视化的体元并在Web端发布,是GeoScene提供的能力。

大模型方面最关键的是提示词(提问模板、PROMPT_TEMPLATE),没有在博客中贴出,有需要可以联系GeoScene官方获得该解决方案的完整源码和示例数据。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容