【可视化】地质油藏可视化之一-zmap数据转换

# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
import json#引用json模块

filename = "E:/3000_3D_VTK/VTKJS_2020/Geo3DViewerVTKJS/Data/elevation/base_zmap.grid"
filenamecsv = "E:/2102_H5/WebGL2020/ThreejsDEM-master/data/base_zmap.json"

#工区范围
n,m,x1,x2,y1,y2 = 0,0,0,0,0,0
#数据处理起始行
i = 0
#缺省值
defaultMin = -999999
defaultMax = 999999
null = -999999
#数据区域
bData = False
#参数区域
bHead = False
#网格间隔
step,stepw,steph = 0,0,0
#最大值、最小值
min,max = 0,0
#数据存储
s = np.array([])
file = open(filename)
for line in file:
    line = line.strip()
    i = i + 1

    # 处理网格头
    if line == "@Grid HEADER, GRID, 5":
        bHead = True
        i = 0
        print("处理网格头")
        continue
    if bHead:
        if i == 1: #处理缺省值
            arr = line.split(",")
            null = float(arr[1])
            print(str(i) + "--->处理缺省值--->" + str(null) + "," + arr[1])
        if i == 2: #处理工区范围及坐标
            arr = line.split(",")
            n,m,x1,x2,y1,y2 = int(arr[0].strip()),int(arr[1].strip()),float(arr[2].strip()),float(arr[3].strip()),float(arr[4].strip()),float(arr[5].strip())
            print(str(i) + "--->处理工区范围及坐标--->" + "n:" + str(n)+ ",m:" + str(m)+ ",x1:" + str(x1)+ ",x2:" + str(x2)+ ",y1:" + str(y1)+ ",y2:" + str(y2))
        if i == 3: #处理网格间距
            # print(str(i) + "--->处理网格间距--->" + line)
            step, stepw, steph = float(arr[0].strip()),float(arr[1].strip()),float(arr[2].strip())
            print(str(i) + "--->处理网格间距--->,step:" + str(step) + ",stepw:" + str(stepw) + ",steph:" +str(steph))
    # 处理网格数据
    if line == "@":
        bData = True
        bHead = False
        i = 0
        print("处理网格数据")
        continue
    if bData:
        # print(str(i) + "--->" + line)
        arr = line.split()
        # print(str(i) +  ":" + str(arr))
        lst = list(map(float, arr))
        arr = np.array(lst)
        # print(str(i) + ":" + str(arr))
        s = np.append(s, arr)
file.close()



s[s==null] = defaultMin

if len(s) > n*m :
    s = s[0:len(s) -1]
print( str(n) + "*" +str(m) + " = " + str(n*m))

s = np.maximum(s, -s)

# print(s)
# print(len(s))
# print(s[0])
# print(s[len(s)-1])

# 取最大值、最小值
s[s==defaultMin] = defaultMax
min = np.amin(s)
s[s==defaultMax] = defaultMin
max = np.amax(s)
print( "smin:"  + str(min))
print( "smax:"  + str(max))

#数据分割
def arr_size(arr,size):
    s = []
    for i in range(0,int(len(arr)),size):
        c = arr[i:i+size]
        s.append(c)
    return s

arr2 = arr_size(s,n)



jsonObject = {
    "data": "",
    "size": {
        "width": str(n),
        "height": str(m)
    },
    "min": str(min),
    "max": str(max),
    "null": str(defaultMin)
}

jsonArray = ""
for i in range(0,len(arr2)):
    if jsonArray == "":
        jsonArray = "[" + ",".join(str(i) for i in arr2[i]) + "]"
        # print(jsonArray)
    else:
        jsonArray = jsonArray + ",[" + ",".join(str(i) for i in arr2[i]) + "]"

jsonObject["data"] = "[" + jsonArray+ "]"

res2 = json.dumps(jsonObject)   #先把字典转成json

retJson = json.loads(res2)

f = open(filenamecsv,'w',encoding='utf-8')
json.dump(retJson,f,indent=4,ensure_ascii=False)
原文地址:https://www.cnblogs.com/defineconst/p/12512162.html