zoukankan      html  css  js  c++  java
  • 【可视化】地质油藏可视化之一-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)
  • 相关阅读:
    sentinel集群刚开始好的,过几分钟就崩了
    redis主从文件权限问题
    centos7下解决keepalived双机都为master问题
    windows局域网共享文件夹
    最近JS的一些问题
    总结下html、css的一些东西
    Less、一些选择器
    常见布局、媒体查询
    audio标签、HOVER效果、rgba和opacity、隐藏场景
    护工列表页
  • 原文地址:https://www.cnblogs.com/defineconst/p/12512162.html
Copyright © 2011-2022 走看看