初步了解Three的基本功能后,开始了本项目的研究,项目需要检索分析出符合地质规律的井点坐标及其纵向的属性分布值,取得数据后开始建立三角剖分网格,然后对网格内数据插值,最后展示,需求很明确,于是开始了第一步:
1、数据获取
这一步涉及太多业务算法,略过说明,总之是最终得到一个json格式的数据字串文件,大概如下:
2、网格建立
利用井点坐标寻找井点最大凸边界,这一步有用算法导论内的获取最大凸边界的算法,理论依据是从原点出发,寻找与目标点夹角最大的点,网上理论很多,这里不过多涉及,部分代码如下:
3、有了井点边界后,在此基础上创建矩形边界,矩形边界的顶点采用寻找到的凸边界井点坐标,然后建立三角网,并对建立的三角网进行克里金插值处理。插值前必须把井点原始坐标取值缩放至空间坐标系内,不然绘制的数据会有很大差异,代码如下:
4、插值完成后,进行空间上的储层平面属性图绘制,这一步也略过,效果大概如下:
这是采用某油田某研究区块400多口井的相属性插值后的结果,其中插值后的深度采用区域内井点储层顶界面深度获取,颜色代表属性取值。
5、这里有个问题了,绘制的图因为缺少储层厚度取值,所以怎么看都是一个平面,这样就失去空间展示的意义了,于是研究了下绘制厚度的方法,因为时间有限,我采取了最笨的版本,获取平面上的最大边界点,然后通过最大边界点向下延伸绘制指定厚度的三角面,获取最大边界点的算法是更改了凸集算法相关取值,这里有个BUG,网格步长设置不合理会引起凸集取值错误,凹进去的边界点会被忽略,待有时间改进,获取的边界点如下(黑色的小球即时最大边界点):
6、通过获取的边界点绘制边界厚度面,关键代码如下:
7、最后可以获取到绘制的模型体,效果如下,其中模型体的厚度可以根据每个井点取不一样的厚度值,后期再加关键参数的设置,模型体的颜色可以设置统一也可以根据井点插值后的结果设置。
三维地质体的展示模块大致完成,剩余就是一个封装问题,感兴趣的小伙伴可以一起研究研究,另外,Three的展示效果还是不错的,并且在页面出于不激活状态下,是很省内存的。