一、环境要求
GeoScene Pro 5.1 + Python3.11 + 千问Qwen-Long模型
拷贝克隆GeoScene安装目录conda下的arcpy环境。
在克隆后的新环境中,使用conda命令安装OpenAI的包
二、钻孔报告概况
首先用脚本将原始钻孔报告的pdf拆分,按钻孔编号拆分。使用pypdf写一个独立脚本拆分原始报告。


三、脚本开发
首先初始化大模型调用的客户端OpenAI

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

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

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


四、脚本提取结果后处理
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。要计算的属性字段:选择你刚创建的计算映射的数值字段。

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官方获得该解决方案的完整源码和示例数据。