metradar 0.1.5__py3-none-any.whl → 0.1.8__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. metradar/__init__.py +4 -2
  2. metradar/config.py +53 -0
  3. metradar/core/__init__.py +9 -0
  4. metradar/{get_cross_section_from_pyart.py → core/get_cross_section.py} +5 -157
  5. metradar/{mosaic_merge.py → core/mosaic_merge.py} +3 -1
  6. metradar/{oa_dig_func.py → core/oa_dig_func.py} +83 -333
  7. metradar/graph/__init__.py +9 -0
  8. metradar/{mosaic_quickdraw.py → graph/draw_comp_mosaic.py} +71 -68
  9. metradar/{draw_mosaic_new.py → graph/draw_latlon_func.py} +177 -173
  10. metradar/graph/draw_radar_aws.py +212 -0
  11. metradar/{draw_radar_comp_func.py → graph/draw_radar_comp_func.py} +319 -248
  12. metradar/graph/parse_pal.py +157 -0
  13. metradar/io/__init__.py +9 -0
  14. metradar/{cnrad_level2.py → io/cnrad_level2.py} +45 -2
  15. metradar/{decode_fmt_pyart.py → io/decode_fmt_pyart.py} +19 -3
  16. metradar/{decode_pup_rose.py → io/decode_pup_rose.py} +241 -684
  17. metradar/{read_new_mosaic_func.py → io/read_new_mosaic_func.py} +30 -2
  18. metradar/io/read_swan.py +250 -0
  19. metradar/{rose_structer.py → io/rose_structer.py} +2 -0
  20. metradar/project/__init__.py +9 -0
  21. metradar/project/make_mosaic/__init__.py +9 -0
  22. metradar/project/make_mosaic/batch_draw_mosaic.py +32 -0
  23. metradar/{make_mosaic_mp_archive.py → project/make_mosaic/make_mosaic_func.py} +144 -175
  24. metradar/project/make_mosaic/make_mosaic_mp.ini +29 -0
  25. metradar/project/make_mosaic/make_mosaic_mp.py +70 -0
  26. metradar/project/make_vpr_aws/__init__.py +9 -0
  27. metradar/project/make_vpr_aws/construct_aws_refvpr_mainprog.ini +39 -0
  28. metradar/project/make_vpr_aws/construct_aws_refvpr_mainprog.py +565 -0
  29. metradar/project/nowcasting/__init__.py +9 -0
  30. metradar/project/nowcasting/nowcast_by_pysteps.py +214 -0
  31. metradar/{trans_nc_pgmb.py → project/nowcasting/trans_mosaic_pgmb.py} +19 -17
  32. metradar/project/qpe/Archive /346/250/241/345/274/217/350/257/264/346/230/216.txt" +2 -0
  33. metradar/project/qpe/__init__.py +9 -0
  34. metradar/project/qpe/archive_main_qpe_cfg.ini +91 -0
  35. metradar/project/qpe/do_s1.sh +6 -0
  36. metradar/project/qpe/do_s2.sh +6 -0
  37. metradar/project/qpe/do_s3.sh +6 -0
  38. metradar/project/qpe/do_s4.sh +6 -0
  39. metradar/project/qpe/do_s5.sh +6 -0
  40. metradar/project/qpe/exec_all.sh +11 -0
  41. metradar/project/qpe/get_rainrate_func.py +80 -0
  42. metradar/project/qpe/main_qpe_cfg.ini +85 -0
  43. metradar/project/qpe/s1_download_radar_region_cmadaas.py +123 -0
  44. metradar/project/qpe/s2_pre_process_single_radar.py +183 -0
  45. metradar/project/qpe/s3_trans_rainrate_to_qpe.py +499 -0
  46. metradar/project/qpe/s4_mosaic_qpe.py +523 -0
  47. metradar/project/qpe/s5_draw_qpe_mosaic.py +308 -0
  48. metradar/project/wind_retrieval/__init__.py +9 -0
  49. metradar/project/wind_retrieval/config_3dwind.ini +45 -0
  50. metradar/{main_pydda.py → project/wind_retrieval/main_pydda.py} +152 -149
  51. metradar/util/__init__.py +9 -0
  52. metradar/{comm_func.py → util/comm_func.py} +1 -41
  53. metradar/util/exceptions.py +50 -0
  54. metradar/util/geo_transforms_pyart.py +627 -0
  55. metradar/{get_tlogp_from_sharppy.py → util/get_tlogp_from_sharppy.py} +16 -5
  56. metradar/{parse_pal.py → util/parse_pal.py} +147 -147
  57. metradar/util/radar_common.py +16 -0
  58. metradar/{trans_new_mosaic_nc.py → util/trans_new_mosaic_nc.py} +1 -1
  59. metradar-0.1.8.dist-info/METADATA +91 -0
  60. metradar-0.1.8.dist-info/RECORD +67 -0
  61. {metradar-0.1.5.dist-info → metradar-0.1.8.dist-info}/WHEEL +1 -1
  62. metradar-0.1.8.dist-info/licenses/LICENSE +21 -0
  63. metradar/grid.py +0 -281
  64. metradar/grid_data.py +0 -64
  65. metradar/oa_couhua.py +0 -166
  66. metradar/read_new_mosaic.py +0 -33
  67. metradar/retrieve_cmadaas.py +0 -3126
  68. metradar/retrieve_micaps_server.py +0 -2061
  69. metradar-0.1.5.dist-info/METADATA +0 -37
  70. metradar-0.1.5.dist-info/RECORD +0 -33
  71. /metradar/{pgmb_io.py → io/pgmb_io.py} +0 -0
  72. /metradar/{exceptions.py → project/make_vpr_aws/exceptions.py} +0 -0
  73. /metradar/{geo_transforms_pyart.py → project/make_vpr_aws/geo_transforms_pyart.py} +0 -0
  74. /metradar/{make_gif.py → util/make_gif.py} +0 -0
  75. {metradar-0.1.5.dist-info → metradar-0.1.8.dist-info}/top_level.txt +0 -0
metradar/grid.py DELETED
@@ -1,281 +0,0 @@
1
- import math
2
- import datetime
3
- import re
4
- from copy import deepcopy
5
- import numpy as np
6
-
7
- class grid:
8
- '''
9
- 定义一个格点的类grid,来存储网格的范围包括(起始经纬度、格距、起止时间,时间间隔,起止时效,时效间隔,层次列表,数据成员)
10
- 约定坐标顺序为: member, time,ddtime, level, lat,lon
11
- '''
12
- def __init__(self,glon, glat, gtime=None, dtime_list=None,level_list=None,member_list = None):
13
-
14
- #提取成员维度信息
15
- if(member_list is None):
16
- self.members =['data0']
17
- else:
18
- self.members = member_list
19
- ############################################################################
20
- #提取层次维度信息
21
- if(level_list is None):
22
- self.levels =[0]
23
- else:
24
- self.levels = level_list
25
- ############################################################################
26
- #提取时间维度信息
27
- self.stime = np.datetime64('2099-01-01T00:00:00.000000')
28
- self.etime = np.datetime64('2099-01-01T00:00:00.000000')
29
- self.dtime_int = 1
30
- self.dtime_type = "h"
31
- self.dtimedelta = np.timedelta64(1,'h')
32
- if(gtime == None):gtime = []
33
- if len(gtime) == 1:
34
- if type(gtime[0]) == str:
35
- num = ''.join([x for x in gtime[0] if x.isdigit()])
36
- # 用户输入2019041910十位字符,后面补全加0000,为14位统一处理
37
- if len(num) == 4:
38
- num += "0101000000"
39
- elif len(num) == 6:
40
- num +="01000000"
41
- elif len(num) == 8:
42
- num +="000000"
43
- elif len(num) == 10:
44
- num +="0000"
45
- elif len(num) == 12:
46
- num +="00"
47
- elif len(num) == 14:
48
- pass
49
- else:
50
- print("输入日期有误,请检查!")
51
- # 统一将日期变为datetime类型
52
- self.stime = datetime.datetime.strptime(num, '%Y%m%d%H%M%S')
53
- self.etime = datetime.datetime.strptime(num, '%Y%m%d%H%M%S')
54
- self.stime = np.datetime64(self.stime)
55
- self.etime = np.datetime64(self.etime)
56
- else:
57
- self.stime = gtime[0]
58
- self.etime = gtime[0]
59
- self.dtime_int = 1
60
- self.dtime_type = "h"
61
- self.dtimedelta = np.timedelta64(0,'h')
62
- elif len(gtime) ==3:
63
- num1 =[]
64
- if type(gtime[0]) == str:
65
- for i in range (0,2):
66
- num = ''.join([x for x in gtime[i] if x.isdigit()])
67
- #用户输入2019041910十位字符,后面补全加0000,为14位统一处理
68
- if len(num) == 4:
69
- num1.append(num + "0101000000")
70
- elif len(num) == 6:
71
- num1.append(num + "01000000")
72
- elif len(num) == 8:
73
- num1.append(num + "000000")
74
- elif len(num) == 10:
75
- num1.append(num + "0000")
76
- elif len(num) == 12:
77
- num1.append(num + "00")
78
- elif len(num) == 14:
79
- num1.append(num)
80
- else:
81
- print("输入日期有误,请检查!")
82
- #统一将日期变为datetime类型
83
- #print(num1)
84
- self.stime = datetime.datetime.strptime(num1[0], '%Y%m%d%H%M%S')
85
- self.etime = datetime.datetime.strptime(num1[1], '%Y%m%d%H%M%S')
86
- self.stime = np.datetime64(self.stime)
87
- self.etime = np.datetime64(self.etime)
88
- elif isinstance(gtime[0],np.datetime64):
89
- stime = gtime[0].astype(datetime.datetime)
90
- etime = gtime[1].astype(datetime.datetime)
91
- if isinstance(stime, int):
92
- stime = datetime.datetime.utcfromtimestamp(stime / 1000000000)
93
- etime = datetime.datetime.utcfromtimestamp(etime / 1000000000)
94
- self.stime = stime
95
- self.etime = etime
96
- else:
97
- self.stime = gtime[0]
98
- self.etime = gtime[1]
99
-
100
- if type(gtime[2]) == str:
101
- self.dtime_int = re.findall(r"\d+", gtime[2])[0]
102
- dtime_type = re.findall(r"\D+", gtime[2])[0]
103
- if dtime_type == 'h':
104
- self.dtime_type ="h"
105
- self.dtimedelta = np.timedelta64(self.dtime_int,'h')
106
- elif dtime_type == 'd':
107
- self.dtime_type ="D"
108
- self.dtimedelta = np.timedelta64(self.dtime_int, 'D')
109
- elif dtime_type == 'm':
110
- self.dtime_type ="m"
111
- self.dtimedelta = np.timedelta64(self.dtime_int, 'm')
112
- elif isinstance(gtime[2],np.timedelta64):
113
- seconds = int(gtime[2] / np.timedelta64(1, 's'))
114
- if seconds % 3600 == 0:
115
- self.dtime_type = "h"
116
- self.dtime_int = int(seconds / 3600)
117
- else:
118
- self.dtime_type = "m"
119
- self.dtime_int = int(seconds / 60)
120
- else:
121
- self.dtimedelta = gtime[2]
122
- seconds = gtime[2].total_seconds()
123
- if seconds % 3600 == 0:
124
- self.dtime_type = "h"
125
- self.dtime_int = int(seconds/3600)
126
- else:
127
- self.dtime_type = "m"
128
- self.dtime_int = int(seconds / 60)
129
- self.gtime = [self.stime,self.etime,str(self.dtime_int) + self.dtime_type]
130
- self.stime_str = str(self.stime).replace("-","").replace(" ","").replace(":","").replace("T","")[0:14]
131
- self.etime_str = str(self.etime).replace("-", "").replace(" ", "").replace(":", "").replace("T", "")[0:14]
132
- self.dtime_str = str(self.dtime_int) + self.dtime_type
133
-
134
- ############################################################################
135
- #提取预报时效维度信息
136
- if dtime_list is None:
137
- self.dtimes = [0]
138
- else:
139
- self.dtimes = dtime_list
140
- ############################################################################
141
- #提取经度信息
142
-
143
- self.slon = get_true_value(glon[0])
144
- self.elon = get_true_value(glon[1])
145
- self.dlon = get_true_value(glon[2])
146
- nlon = 1 + (self.elon - self.slon) / self.dlon
147
- error = abs(round(nlon) - nlon)/nlon
148
- if (error > 0.01):
149
- self.nlon = int(math.ceil(nlon))
150
- else:
151
- self.nlon = int(round(nlon))
152
-
153
- self.elon = get_true_value(self.slon + (nlon - 1) * self.dlon)
154
- self.glon = [self.slon,self.elon,self.dlon]
155
-
156
- ############################################################################
157
- #提取纬度信息
158
- self.slat = get_true_value(glat[0])
159
- self.elat = get_true_value(glat[1])
160
- self.dlat = get_true_value(glat[2])
161
- nlat = 1 + (self.elat - self.slat) / self.dlat
162
- error = abs(round(nlat) - nlat)/nlat
163
- if (error > 0.01):
164
- self.nlat = int(math.ceil(nlat))
165
- else:
166
- self.nlat = int(round(nlat))
167
- self.elat = get_true_value(self.slat + (nlat - 1) * self.dlat)
168
- self.glat = [self.slat,self.elat,self.dlat]
169
-
170
-
171
-
172
- #对原有的格点数据进行一次深拷贝,不改变原有的值和结构。
173
- def copy(self):
174
- return deepcopy(self)
175
-
176
- #reset的作用是把网格的坐标间隔统一为正数。
177
- def reset(self):
178
- if (self.dlon > 0 and self.dlat > 0):
179
- pass
180
- if (self.dlat < 0):
181
- tran = self.slat
182
- self.slat = self.elat
183
- self.elat = tran
184
- self.dlat = abs(self.dlat)
185
- if (self.dlon < 0):
186
- tran = self.slon
187
- self.slon = self.elon
188
- self.elon = tran
189
- self.dlon = abs(self.dlon)
190
- return
191
-
192
-
193
- def __str__(self):
194
- '''
195
- 重置系统自动的函数,在print(grid) 的时候可以很整齐的看到所有信息
196
- :return: string
197
- '''
198
- grid_str = ""
199
- grid_str += "members:" + str(self.members) +"\n"
200
- grid_str += "levels:" + str(self.levels) + "\n"
201
- grid_str += "gtime:" + str([self.stime_str,self.etime_str,self.dtime_str]) + "\n"
202
- grid_str += "dtimes:" + str(self.dtimes) +"\n"
203
- grid_str += "glon:" + str(self.glon) + "\n"
204
- grid_str += "glat:" + str(self.glat) + "\n"
205
- return grid_str
206
-
207
- def get_true_value(value):
208
- dlon2 = round(value, 2)
209
- dlon3 = round(value, 3)
210
- dlon4 = round(value, 4)
211
- dlon5 = round(value, 5)
212
- if dlon2 == dlon3 and dlon3 == dlon4:
213
- return dlon3
214
- elif dlon3 == dlon4 and dlon5 == dlon4:
215
- return dlon3
216
- else:
217
- return value
218
-
219
-
220
- def get_grid_of_data(grid_data0):
221
- '''
222
- 获取grid的数据values值
223
- :param grid_data0:初始化之后的网格数据
224
- :return:返回grid数据。
225
- '''
226
- member_list = grid_data0['member'].values
227
- level_list = grid_data0['level'].values
228
- times = grid_data0['time'].values
229
- #print(times)
230
- if(len(times)>1):
231
- gtime = [times[0],times[-1],times[1]-times[0]]
232
- elif len(times) == 1:
233
- gtime = times
234
- else:
235
- gtime = None
236
-
237
- gdt = grid_data0['dtime'].values.tolist()
238
- attrs_name = list(grid_data0.attrs)
239
-
240
-
241
- lons = grid_data0['lon'].values
242
-
243
- #dlon5 = round(lons[1] - lons[0], 5)
244
- #dlon6 = round(lons[1] - lons[0], 6)
245
- #dlon7 = round(lons[1] - lons[0], 7)
246
- #if dlon5 == dlon6 and dlon6 == dlon7:
247
- # dlon = dlon5
248
- #else:
249
- # dlon = lons[1]-lons[0]
250
- dlon = get_true_value(lons[1] - lons[0])
251
-
252
- #glon = [lons[0],round(lons[-1],5),round(lons[1]-lons[0],5)]
253
- glon = [get_true_value(lons[0]), get_true_value(lons[-1]), dlon]
254
- lats = grid_data0['lat'].values
255
- #dlat5 = round(lats[1] - lats[0], 5)
256
- #dlat6 = round(lats[1] - lats[0], 6)
257
- #dlat7 = round(lats[1] - lats[0], 7)
258
- #if dlat5 == dlat6 and dlat6 == dlat7:
259
- # dlat = dlat5
260
- #else:
261
- # dlat = lats[1]-lats[0]
262
- dlat = get_true_value(lats[1] - lats[0])
263
-
264
- #glat = [lats[0],round(lats[-1],5),round(lats[1]-lats[0],5)]
265
- glat = [get_true_value(lats[0]), get_true_value(lats[-1]), dlat]
266
- grid01 = grid(glon, glat, gtime, gdt, level_list, member_list)
267
- return grid01
268
-
269
-
270
- def reset_grid(grid0):
271
- if grid0.dlat <0:
272
- grid0.dlat = - grid0.dlat
273
- tran = grid0.slat
274
- grid0.slat = grid0.elat
275
- grid0.elat = tran
276
- if grid0.dlon <0:
277
- grid0.dlon = - grid0.dlon
278
- tran = grid0.slon
279
- grid0.slon = grid0.elon
280
- grid0.elon = tran
281
- return
metradar/grid_data.py DELETED
@@ -1,64 +0,0 @@
1
- #!/usr/bin/python3.6
2
- # -*- coding:UTF-8 -*-
3
- import xarray as xr
4
- import numpy as np
5
- import pandas as pd
6
-
7
-
8
- #返回一个DataArray,其维度信息和grid描述一致,数组里面的值为0.
9
- def grid_data(grid,data=None):
10
- slon = grid.slon
11
- dlon = grid.dlon
12
- slat = grid.slat
13
- dlat = grid.dlat
14
- nlon = grid.nlon
15
- nlat = grid.nlat
16
- # 通过起始经纬度和格距计算经纬度格点数
17
- lon = np.arange(nlon) * dlon + slon
18
- lat = np.arange(nlat) * dlat + slat
19
- dt_str = grid.gtime[2]
20
- if dt_str.find("m")>=0:
21
- dt_str = dt_str.replace("m","min")
22
-
23
- times = pd.date_range(grid.stime, grid.etime, freq=dt_str)
24
- #print(times)
25
- ntime = len(times)
26
- # 根据timedelta的格式,算出ndt次数和gds时效列表
27
-
28
- ndt = len(grid.dtimes)
29
- gdt_list = grid.dtimes
30
-
31
- level_list = grid.levels
32
- nlevel_list = len(level_list)
33
-
34
- member_list = grid.members
35
- nmember = len(member_list)
36
- if data is None:
37
- data = np.zeros((nmember, nlevel_list, ntime, ndt, nlat, nlon))
38
- else:
39
- data = data.reshape(nmember, nlevel_list, ntime, ndt, nlat, nlon)
40
-
41
- grd = (xr.DataArray(data, coords={'member': member_list,'level': level_list,'time': times,'dtime':gdt_list,
42
- 'lat': lat, 'lon': lon},
43
- dims=['member', 'level','time', 'dtime','lat', 'lon']))
44
-
45
- grd.name = "data0"
46
- return grd
47
-
48
-
49
- def reset(grd):
50
- lats = grd["lat"].values
51
- if lats[0]>lats[1]:
52
- lats = grd["lat"].values[::-1]
53
- grd['lat'] = lats
54
- dat = grd.values[:, :, :, :, ::-1, :]
55
- grd.values = dat
56
-
57
- lons = grd["lon"].values
58
- if lons[0]>lons[1]:
59
- lons = grd["lon"].values[::-1]
60
- grd['lon'] = lons
61
- dat = grd.values[:, :, :, :, :, ::-1]
62
- grd.values = dat
63
-
64
- return
metradar/oa_couhua.py DELETED
@@ -1,166 +0,0 @@
1
- '''
2
- 封装凑华的客观分析程序
3
- 2023年4月6日
4
- 朱文剑
5
-
6
- '''
7
-
8
- # %%
9
- import numpy as np
10
- import math
11
- import time
12
- from grid import *
13
- from grid_data import *
14
-
15
- # %%迭代函数
16
- def frprmn2(x,targe,grads,tol = 0.001,caculate_time = 60,show = False):
17
- x0 = x
18
- n = len(x0)
19
- x_min = math.sqrt(1.0/n)
20
- df = grads(x0)
21
- g_0 = -df
22
- h_0 = g_0
23
- f_min_line0 = 0
24
- f_min_line1 = targe(x0)
25
- start_time = time.time()
26
- for i in range(10000):
27
- d0 = np.dot(df,h_0)
28
- x1 = x0 + h_0 * x_min
29
- df = grads(x1)
30
- d1 = np.dot(df,h_0)
31
- if d0 == d1:
32
- f_min_line1 = targe(x0)
33
- return x0
34
- else:
35
- x_min = x_min * d0/(d0 - d1)
36
- x0 += h_0 * x_min
37
- df = grads(x0)
38
- g_1 = -df
39
- v1 = np.dot(g_1 - g_0, g_1)
40
- v2 = np.dot(g_0,g_0)
41
- h_0 = g_1 + (v1/v2) * h_0
42
- g_0 = g_1
43
- if i%10 == 0:
44
- f_min_line0 = f_min_line1
45
- f_min_line1 = targe(x0)
46
- if show:print(str(i) + " " + str(f_min_line1))
47
- delta = 2 * abs(f_min_line1 - f_min_line0) / (abs(f_min_line1) + abs(f_min_line0)) - tol
48
- if delta < 0:
49
- return x0
50
- if(time.time() - start_time > caculate_time):
51
- return x0
52
- print('迭代分析超过10000次而退出')
53
- return x0
54
-
55
- # 客观分析算法的代码
56
- # def interp_sg_oa(sta0,background,sm = 1,effectR = 1000,rate_of_model = 0,show = False):
57
- def interp_sg_oa(x,y,z,reso,boundary=None,sm = 1,effectR = 1000,rate_of_model = 0,show = False):
58
-
59
- if boundary is None:
60
- wlon = int(np.min(x))
61
- elon = int(np.max(x))+1
62
- slat = int(np.min(y))
63
- nlat = int(np.max(y))+1
64
- else:
65
- wlon = boundary[0]
66
- elon = boundary[1]
67
- slat = boundary[2]
68
- nlat = boundary[3]
69
-
70
- grid0 = grid([wlon,elon,reso],[slat,nlat,reso])
71
- background = grid_data(grid0)
72
- grd = background.copy()
73
- ig = ((x - grid0.slon) // grid0.dlon).astype(dtype = 'int16')
74
- jg = ((y - grid0.slat) // grid0.dlat).astype(dtype = 'int16')
75
- dx = (x - grid0.slon) / grid0.dlon - ig
76
- dy = (y - grid0.slat) / grid0.dlat - jg
77
-
78
- # zhuwj add
79
- flag1 = ig+1 <= grid0.nlon-1
80
- flag2 = jg+1 <= grid0.nlat-1
81
- flag = flag1 & flag2
82
- ig = ig[flag]
83
- jg = jg[flag]
84
- dx = dx[flag]
85
- dy = dy[flag]
86
- z = z[flag]
87
-
88
- c00 = (1 - dx) * (1 - dy)
89
- c01 = dx * (1 - dy)
90
- c10 = (1-dx) * dy
91
- c11 = dx * dy
92
- lat = grd["lat"].values
93
- sr = 1/np.power(np.cos(lat*math.pi/180),4)
94
-
95
-
96
-
97
- def targe(x):
98
- grdv = x.reshape(grid0.nlat,grid0.nlon)
99
- dx = grdv[:,:-2] + grdv[:,2:] - 2 * grdv[:,1:-1]
100
- dx2 = dx**2
101
- sum_dx =np.sum(dx2,axis=1)
102
- cost1 = np.sum(sum_dx * sr)
103
-
104
- dy = grdv[:-2,:] + grdv[2:,:] - 2 * grdv[1:-1,:]
105
- dy2 = dy**2
106
- sum_dy = np.sum(dy2)
107
- cost1 = cost1 + sum_dy
108
-
109
- sta_g = c00 * grdv[jg, ig] + c01 * grdv[jg, ig + 1] + c10 * grdv[jg + 1, ig] + c11 * grdv[
110
- jg + 1, ig + 1]
111
- error = z - sta_g
112
- cost2 = np.sum(error**2)
113
- cost3 = 0
114
- cost = sm * cost1 + cost2 + cost3
115
- return cost
116
-
117
- def grads(x):
118
- grdv = x.reshape(grid0.nlat,grid0.nlon)
119
- g1 = np.zeros(grdv.shape)
120
-
121
- sr_expend = np.tile(sr,[grid0.nlon-2,1]).T
122
-
123
- dx = 2 * (grdv[:,:-2] + grdv[:,2:] - 2 * grdv[:,1:-1])
124
- dx_sr = dx * sr_expend
125
- g1[:,:-2] = dx_sr
126
- g1[:,2:] += dx_sr
127
- g1[:,1:-1] -= 2*dx_sr
128
-
129
- dy = 2 *(grdv[:-2,:] + grdv[2:,:] - 2 * grdv[1:-1,:])
130
- g1[:-2,:] += dy
131
- g1[2:,:] += dy
132
- g1[1:-1,:] -= 2 * dy
133
-
134
- g2 = np.zeros(grdv.shape)
135
- sta_g = c00 * grdv[jg, ig] + c01 * grdv[jg, ig + 1] + c10 * grdv[jg + 1, ig] + c11 * grdv[jg + 1, ig + 1]
136
- d = 2 * (sta_g - z)
137
- g2[jg,ig] += d * c00
138
- g2[jg,ig + 1] += d * c01
139
- g2[jg+1,ig] += d * c10
140
- g2[jg+1,ig+1] += d * c11
141
-
142
- g3 = 0
143
-
144
- g = sm * g1 + g2 + g3
145
- return g.reshape(-1)
146
-
147
- x = grd.values.reshape(-1)
148
- x_oa = frprmn2(x, targe, grads,show = show)
149
- result = grid_data(grid0,x_oa)
150
-
151
- grid_x = np.linspace(wlon, elon, grid0.nlon)
152
- grid_y = np.linspace(slat, nlat, grid0.nlat)
153
-
154
- gx, gy = np.meshgrid(grid_x, grid_y)
155
-
156
- return gx, gy,result.data[0,0,0,0,:,:]
157
-
158
- # return result
159
-
160
-
161
- # %%
162
-
163
- if __name__ == "__main__":
164
- #读取观测数据
165
- pass
166
-
@@ -1,33 +0,0 @@
1
- '''
2
- 读取新的雷达拼图数据
3
-
4
- '''
5
- from read_new_mosaic_func import decode_mosaic
6
- from draw_mosaic_new import draw_mosaic
7
-
8
- if __name__ == '__main__':
9
- # filepath = '/Users/wenjianzhu/Downloads/CMADAAS/rdmosaic_bin/202208/'1
10
- # filepath = '/Users/wenjianzhu/Library/CloudStorage/OneDrive-个人/推广应用/GR2/四川/测试数据/雷达拼图'
11
- filepath = 'testdata/national_mosaic'
12
- # filename = 'Z_RADA_C_BABJ_20220826001200_P_DOR_ACHN_QREF_20220826_001821.bin'
13
- filename = 'ACHN_CREF_20210918_155000.BIN'
14
- outpath = 'pic'
15
- outname = filename + '.png'
16
- data = decode_mosaic(filepath,filename)
17
-
18
- pass
19
- slat = 15.0
20
- nlat = 56
21
- wlon = 70.
22
- elon = 140.
23
- # newdata = data.CREF.sel(lat=slice(slat,nlat),lon=slice(wlon,elon))
24
- # tstr = filename.split('_')[4]
25
- # draw_mosaic(newdata.data,newdata.lat.data,newdata.lon.data,slat,nlat,wlon,elon,outpath,outname,tstr,thred=15,dpi=800)
26
-
27
-
28
- newdata = data.CREF.sel(lat=slice(slat,nlat),lon=slice(wlon,elon))
29
- tstr = filename.split('_')[2]+'_'+filename.split('_')[3]
30
- draw_mosaic(newdata.data,newdata.lat.data,newdata.lon.data,slat,nlat,wlon,elon,outpath,outname,tstr,add_title=1,
31
- prefix_title='雷达组合反射率拼图',units='dBZ',thred=0,dpi=800)
32
-
33
- # %%