First commit after changed file framework
这个提交包含在:
@@ -0,0 +1,154 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import warnings
|
||||
warnings.filterwarnings('ignore')
|
||||
import argparse, json
|
||||
from common import NoIndent, MyEncoder
|
||||
|
||||
def _argparse():
|
||||
parser = argparse.ArgumentParser(description='Average Noise Spectral Level')
|
||||
parser.add_argument('-a', '--argfile', action='store', dest='argfile', required=True, help='name of arguments file')
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def main():
|
||||
parser = _argparse()
|
||||
argfile = parser.argfile
|
||||
if argfile[-5:] != '.json':
|
||||
print('输入的参数文件名有误')
|
||||
return
|
||||
with open(argfile,'r') as jsonFile:
|
||||
paramData = json.load(jsonFile)
|
||||
if ("ETOPO1Path" not in paramData) or ("STPath" not in paramData) or \
|
||||
("freq" not in paramData) or ("sourceDepth" not in paramData) or ("receiveDepth" not in paramData) or\
|
||||
("lat" not in paramData) or ("lon" not in paramData) or\
|
||||
("timeType" not in paramData) or\
|
||||
("outParam" not in paramData):
|
||||
print(f'{argfile}中的参数有误,请核实!')
|
||||
return
|
||||
ETOPO1Path = paramData["ETOPO1Path"]
|
||||
STPath = paramData["STPath"]
|
||||
freq = float(paramData["freq"])
|
||||
sourceDepth = float(paramData["sourceDepth"])
|
||||
receiveDepth = float(paramData["receiveDepth"])
|
||||
lat = float(paramData["lat"])
|
||||
lon = float(paramData["lon"])
|
||||
try:
|
||||
azi = float(paramData["azi"])
|
||||
except:
|
||||
azi = None
|
||||
timeType = paramData["timeType"]
|
||||
outParam = paramData["outParam"]
|
||||
if "outPath" not in outParam:
|
||||
outParam["outPath"] = ""
|
||||
|
||||
from pyat.czcore import call_cz
|
||||
import numpy as np
|
||||
|
||||
# call_cz函数返回汇聚区计算的中间值CzData的列表
|
||||
# CzData保存了方位角、距离、深度、损失、地形、会聚区等数据
|
||||
# 其中czdata.azi是方位角、czdata.ranges是距离列表、czdata.depths是深度列表、
|
||||
# czdata.TL是损失、czdata.bathym是地形数据
|
||||
# czdata.Rays是声线数据
|
||||
# czdata.CzDetail是会聚区数据,包括会聚区宽度和距离
|
||||
res = call_cz(ETOPO1Path, STPath, freq, lat, lon, azi, sourceDepth, receiveDepth, timeType=timeType)
|
||||
# call_cz(25, 18.0, 114.0, 10, 3500)
|
||||
|
||||
# write data to file
|
||||
#输出json文件
|
||||
outData = {}
|
||||
outData["param"] = paramData
|
||||
if len(res) == 0:
|
||||
outData["result"] = "无会聚区"
|
||||
outData["data"] = []
|
||||
else:
|
||||
outData["result"] = "有会聚区"
|
||||
outDataData, outBathymData,outTlData,outRayData = [],[],[],[]
|
||||
json.encoder.FLOAT_REPR = lambda x: format(x, '.3f')
|
||||
for index in range(len(res)):
|
||||
bathymData,tlData,rayData = {},{},{}
|
||||
# 保存地形数据
|
||||
res[index].bathym.r = np.around(res[index].bathym.r, decimals=0)
|
||||
res[index].bathym.d = np.around(res[index].bathym.d, decimals=0)
|
||||
bathymData = {
|
||||
"param": paramData,
|
||||
"azi": f'{round(res[index].azi)}',
|
||||
"count": len(res[index].bathym.d),
|
||||
"descript": "距离、深度",
|
||||
"data": NoIndent(list(zip(res[index].bathym.r,res[index].bathym.d)))
|
||||
}
|
||||
# 保存传播损失数据
|
||||
tlpoint = []
|
||||
res[index].depths = np.around(res[index].depths, decimals=0)
|
||||
res[index].ranges = np.around(res[index].ranges, decimals=0)
|
||||
res[index].TL = np.around(res[index].TL, decimals=2)
|
||||
tlpoint = list(zip(np.tile(res[index].depths.reshape(len(res[index].depths),1),len(res[index].ranges)).flatten(), np.tile(res[index].ranges,(len(res[index].depths),1)).flatten(), res[index].TL.flatten()))
|
||||
tlData = {
|
||||
"param": paramData,
|
||||
"azi": f'{round(res[index].azi)}',
|
||||
"count": len(res[index].ranges)*len(res[index].depths),
|
||||
"descript": "距离、深度、损失",
|
||||
"data": NoIndent(tlpoint)
|
||||
}
|
||||
# 保存声线数据
|
||||
raypoint = []
|
||||
for ray in res[index].Rays:
|
||||
ray.xy[0] = np.around(ray.xy[0], decimals=2)
|
||||
ray.xy[1] = np.around(ray.xy[1], decimals=2)
|
||||
tempdata = {
|
||||
"pointCount": len(ray.xy[0]),
|
||||
"data": NoIndent(list(zip(ray.xy[0],ray.xy[1])))
|
||||
}
|
||||
raypoint.append(tempdata)
|
||||
rayData = {
|
||||
"param": paramData,
|
||||
"azi": f'{round(res[index].azi)}',
|
||||
"count": len(res[index].Rays),
|
||||
"rayData": raypoint
|
||||
}
|
||||
# print(len(res[index].Rays))
|
||||
czDeatilData = {}
|
||||
czDeatilData["descript"] = res[index].CzDetail.descript
|
||||
if len(res[index].CzDetail.directCz) == 0:
|
||||
czDeatilData["directCz"] = []
|
||||
else:
|
||||
directczdetaillist = []
|
||||
for directcz in res[index].CzDetail.directCz:
|
||||
directczdetail = {
|
||||
"minRange": f'{round(directcz.minRange,1)}',
|
||||
"maxRange": f'{round(directcz.maxRange,1)}',
|
||||
"width": f'{round(directcz.width,1)}',
|
||||
}
|
||||
directczdetaillist.append(directczdetail)
|
||||
czDeatilData["directCz"] = directczdetaillist
|
||||
if len(res[index].CzDetail.reflectCz) == 0:
|
||||
czDeatilData["reflectCz"] = []
|
||||
else:
|
||||
reflectczdetaillist = []
|
||||
for reflectcz in res[index].CzDetail.reflectCz:
|
||||
reflectczdetail = {
|
||||
"minRange": f'{round(reflectcz.minRange,1)}',
|
||||
"maxRange": f'{round(reflectcz.maxRange,1)}',
|
||||
"width": f'{round(reflectcz.width,1)}',
|
||||
}
|
||||
reflectczdetaillist.append(reflectczdetail)
|
||||
czDeatilData["reflectCz"] = reflectczdetaillist
|
||||
outDataData.append(czDeatilData)
|
||||
outBathymData.append(bathymData)
|
||||
outTlData.append(tlData)
|
||||
outRayData.append(rayData)
|
||||
with open(("" if outParam["outPath"]=="" else outParam["outPath"] + "/")+"czOut_bathym.json", 'w') as jsonFile:
|
||||
json_data = json.dumps(outBathymData, cls=MyEncoder, indent=2, ensure_ascii=False)
|
||||
jsonFile.write(json_data)
|
||||
with open(("" if outParam["outPath"]=="" else outParam["outPath"] + "/")+"czOut_tl.json", 'w') as jsonFile:
|
||||
json_data = json.dumps(outTlData, cls=MyEncoder, indent=2, ensure_ascii=False)
|
||||
jsonFile.write(json_data)
|
||||
with open(("" if outParam["outPath"]=="" else outParam["outPath"] + "/")+"czOut_ray.json", 'w') as jsonFile:
|
||||
json_data = json.dumps(outRayData, cls=MyEncoder, indent=2, ensure_ascii=False)
|
||||
jsonFile.write(json_data)
|
||||
outData["data"] = outDataData
|
||||
|
||||
with open(("" if outParam["outPath"]=="" else outParam["outPath"] + "/")+"czOut.json", 'w') as jsonFile:
|
||||
json.dump(outData, jsonFile, indent=4, ensure_ascii=False)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
在新工单中引用
屏蔽一个用户