数据格式转换--GeoMap contour如何转换为同一深度的xyz多点数据

在沉积储层研究或盆模研究过程中,很多专业软件(如Trinity)输出格式有GeoMap contour、egrid、xyz等等,很多成图应用支持的格式是x1,x2,y1,y2,z,大家将其用于其他专业应用或成图过程中,需要进行不同类型的数据格式转换,最典型的数据格式转换如下,因此就用python简单写了一个数据转换格式工具,同样也可以用C++,java或js来实现,目标是一样的,只是python最容易解析和实现,就分享出来啦,供参考。

1.数据格式说明:

# GM Line contour转化前的原始数据,格式说明:第一个数字(8)为该contour的点数,第二个数字(2000)为该contour的深度或者属性值,接下来是对应的各个点的x y数据,空格分割;然后下一行起是第二条contour,以此类推。
GmLine v3.0(Contour)
8 2000
396140.4 4297960.0
396143.7 4298095.5
396121.1 4298590.5
396117.1 4298706.5
396073.9 4299248.5
396063.4 4299317.5
396005.2 4299375.0
395875.1 4299448.0
# 转换后的contour数据,格式说明:所有contour存放在list中,每一段contour以json格式存储,每个contour为一段完整的json,具体为{"x":[x1,x2,...,xn],"y":[y1,y2,...,yn],"z":2000}
[
{"x":[396140.4, 396143.7, 396121.1, 396117.1, 396073.9, 396063.4, 396005.2, 395875.1],
"y":[4297960.0, 4298095.5, 4298590.5, 4298706.5, 4299248.5, 4299317.5, 4299375.0, 4299448.0],"z":-2000}
]

2.数据格式转换程序

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2023/2/15
# @Author : sunocean
# @Site :
# @File : GeoContour.py
# @Remark :利用python实现储层网格数据的转换。
from pylab import *
import pandas as pd

if __name__ == '__main__':
    ## 4.1读取数据
    filename = r'D:\project\PythonProject\ECL\data\geochemical-data\2018_T28_Mer_PS_0Ma-contourt.txt'
    filename2 = r'D:\project\vuedemo-int\src\demos\mycomponent\data\surfaces3.json'  # 数据文件地址,附件1
    outFile = open(filename2, 'w')  # 文本写模式
    data = pd.read_csv(filename, sep=' ', header=0,names=['x','y'])
    contourData=[]
    xlist=[]
    ylist=[]
    dataNum=0 #每一段contour的计数器
    for row,item in data.iterrows():
        if(dataNum==0):
            # print(item['x'])
            if(len(xlist)>0):# 当读取完第一条输出每一条contour线
                contourData.append({"\"x\":"+str(xlist)+",\"y\":"+str(ylist)+",\"z\":-"+str(z)})
                xlist.clear()   #重置xlist,为读取下一段contour做准备
                ylist.clear()   #重置ylist
                z=0             #重置z
            dataNum=int(item['x'])
            z=int(item['y'])
        else: # 将每个点得xy数据收集起来,并且更新点计数
            # print(item['x'],item['y'])
            # print(item.tolist())
            xlist.append(item['x'])
            ylist.append(item['y'])
            dataNum-=1

    # print(contourData)
    # 保存contour数据
    outFile.write('[')
    for index, item in enumerate(contourData):
        # print(item)
                if index == len(contourData) - 1:
                    outFile.write('{%s}'%','.join(map(str,item)))    # 去掉字符串两边的单引号,如果是最后一段contour,末尾不加逗号
                else:
                    outFile.write('{%s},' % ','.join(map(str, item))) # 去掉字符串两边的单引号,如果不是最后一段contour,末尾加逗号
    outFile.write(']')
    outFile.close()

3.数据转换后的三维应用效果

猜你喜欢

转载自blog.csdn.net/hhue2007/article/details/129213254