# -*- 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)