metradar 0.1.6__py3-none-any.whl → 0.1.8.2__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 (78) 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} +20 -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/make_vpr_aws/make_mosaic_20230731_daxing.ini +29 -0
  30. metradar/project/make_vpr_aws/make_mosaic_basefile.ini +29 -0
  31. metradar/project/nowcasting/__init__.py +9 -0
  32. metradar/project/nowcasting/nowcast_by_pysteps.py +214 -0
  33. metradar/{trans_nc_pgmb.py → project/nowcasting/trans_mosaic_pgmb.py} +19 -17
  34. metradar/project/qpe/Archive /346/250/241/345/274/217/350/257/264/346/230/216.txt" +2 -0
  35. metradar/project/qpe/__init__.py +9 -0
  36. metradar/project/qpe/archive_main_qpe_cfg.ini +91 -0
  37. metradar/project/qpe/do_s1.sh +6 -0
  38. metradar/project/qpe/do_s2.sh +6 -0
  39. metradar/project/qpe/do_s3.sh +6 -0
  40. metradar/project/qpe/do_s4.sh +6 -0
  41. metradar/project/qpe/do_s5.sh +6 -0
  42. metradar/project/qpe/exec_all.sh +11 -0
  43. metradar/project/qpe/get_rainrate_func.py +80 -0
  44. metradar/project/qpe/main_qpe_cfg.ini +85 -0
  45. metradar/project/qpe/s1_download_radar_region_cmadaas.py +123 -0
  46. metradar/project/qpe/s2_pre_process_single_radar.py +183 -0
  47. metradar/project/qpe/s3_trans_rainrate_to_qpe.py +499 -0
  48. metradar/project/qpe/s4_mosaic_qpe.py +523 -0
  49. metradar/project/qpe/s5_draw_qpe_mosaic.py +308 -0
  50. metradar/project/wind_retrieval/__init__.py +9 -0
  51. metradar/project/wind_retrieval/config_3dwind.ini +45 -0
  52. metradar/{main_pydda.py → project/wind_retrieval/main_pydda.py} +152 -149
  53. metradar/util/__init__.py +9 -0
  54. metradar/{comm_func.py → util/comm_func.py} +1 -41
  55. metradar/util/exceptions.py +50 -0
  56. metradar/util/geo_transforms_pyart.py +627 -0
  57. metradar/{get_tlogp_from_sharppy.py → util/get_tlogp_from_sharppy.py} +16 -5
  58. metradar/{parse_pal.py → util/parse_pal.py} +147 -147
  59. metradar/util/radar_common.py +16 -0
  60. metradar/{trans_new_mosaic_nc.py → util/trans_new_mosaic_nc.py} +1 -1
  61. metradar-0.1.8.2.dist-info/METADATA +90 -0
  62. metradar-0.1.8.2.dist-info/RECORD +69 -0
  63. {metradar-0.1.6.dist-info → metradar-0.1.8.2.dist-info}/WHEEL +1 -1
  64. metradar-0.1.8.2.dist-info/licenses/LICENSE +21 -0
  65. {metradar-0.1.6.dist-info → metradar-0.1.8.2.dist-info}/top_level.txt +0 -1
  66. cfg/config.py +0 -90
  67. metradar/grid.py +0 -281
  68. metradar/grid_data.py +0 -64
  69. metradar/oa_couhua.py +0 -166
  70. metradar/read_new_mosaic.py +0 -33
  71. metradar/retrieve_cmadaas.py +0 -3126
  72. metradar/retrieve_micaps_server.py +0 -2061
  73. metradar-0.1.6.dist-info/METADATA +0 -37
  74. metradar-0.1.6.dist-info/RECORD +0 -34
  75. /metradar/{pgmb_io.py → io/pgmb_io.py} +0 -0
  76. /metradar/{exceptions.py → project/make_vpr_aws/exceptions.py} +0 -0
  77. /metradar/{geo_transforms_pyart.py → project/make_vpr_aws/geo_transforms_pyart.py} +0 -0
  78. /metradar/{make_gif.py → util/make_gif.py} +0 -0
@@ -1,6 +1,8 @@
1
+
2
+ # _*_ coding: utf-8 _*_
3
+
1
4
  '''
2
- 将不同层次的mosacdata stack在一起
3
- ZhuWJ
5
+ 快速绘制三维雷达组网拼图
4
6
 
5
7
  '''
6
8
 
@@ -17,10 +19,20 @@ from matplotlib.font_manager import FontProperties
17
19
  import pandas as pd
18
20
  from pyart.graph import common
19
21
  from datetime import datetime,timedelta
20
- from parse_pal import parse_pro
22
+ from metradar.util.parse_pal import parse_pro,parse
21
23
  import xarray as xr
22
24
 
23
- def add_china_map_2cartopy(ax, name='province', facecolor='none',
25
+ from metradar.config import CONFIG
26
+
27
+ # 资源文件路径
28
+ RESOURCES_PATH = CONFIG.get('SETTING','RESOURCES_PATH')
29
+ FONT_FILE = RESOURCES_PATH + '/fonts/YaHeiConsolasHybrid_1.12.ttf'
30
+ COLOR_FILE=RESOURCES_PATH + '/gr2_colors/default_BR_PUP2.pal'
31
+ MAP_PATH = RESOURCES_PATH + '/国省市县审图号(GS (2019) 3082号/'
32
+ STATION_FILE = RESOURCES_PATH + '/stations/cma_city_station_info.dat'
33
+
34
+
35
+ def add_china_map_2cartopy(ax, name='province', facecolor='none',transform=None,
24
36
  edgecolor='c', lw=2, **kwargs):
25
37
  """
26
38
  Draw china boundary on cartopy map.
@@ -34,40 +46,56 @@ def add_china_map_2cartopy(ax, name='province', facecolor='none',
34
46
  """
35
47
 
36
48
  # map name
37
- names = {'nation': "bou1_4p", 'province': "bou2_4p",
38
- 'county': "BOUNT_poly", 'river': "hyd1_4l",
39
- 'river_high': "hyd2_4l"}
40
-
41
- # get shape filename
42
- shpfile = "../common/resources/maps/" + names[name] + ".shp"
43
-
44
- # add map
45
- ax.add_geometries(
46
- Reader(shpfile).geometries(), ccrs.PlateCarree(),
47
- path_effects=[path_effects.Stroke(linewidth=lw+1, foreground=[0.8,0.8,0.8]),path_effects.Normal()],
48
- facecolor=facecolor, edgecolor=edgecolor, lw=lw, **kwargs)
49
+ names = {'nation': "BOUL_G", 'province': "BOUL_S",
50
+ 'city': "BOUL_D", 'county': "BOUL_X",}
51
+
52
+ # add 省界
53
+ if transform is None:
54
+ transform = ccrs.PlateCarree()
55
+
56
+ if name == 'county':
57
+ # 添加县边界
58
+ shpfile = MAP_PATH + os.sep + names[name] + ".shp"
59
+ ax.add_geometries(
60
+ Reader(shpfile).geometries(), transform,
61
+ path_effects=[path_effects.Stroke(linewidth=lw, foreground=[1,1,1]),path_effects.Normal()],
62
+ facecolor=facecolor, edgecolor=edgecolor, lw=lw-0.5, **kwargs)
63
+
64
+ if name == 'city':
65
+ # 添加市边界
66
+ shpfile = MAP_PATH + os.sep + names[name] + ".shp"
67
+ ax.add_geometries(
68
+ Reader(shpfile).geometries(), transform,
69
+ path_effects=[path_effects.Stroke(linewidth=lw+0.2, foreground=[1,1,1]),path_effects.Normal()],
70
+ facecolor=facecolor, edgecolor=edgecolor, lw=lw-0.2, **kwargs)
71
+
72
+ # 添加省边界
73
+ if name == 'province':
74
+ shpfile = MAP_PATH + os.sep + names[name] + ".shp"
75
+ ax.add_geometries(
76
+ Reader(shpfile).geometries(), transform,
77
+ path_effects=[path_effects.Stroke(linewidth=lw+0.5, foreground=[1,1,1]),path_effects.Normal()],
78
+ facecolor=facecolor, edgecolor=edgecolor, lw=lw+0.2, **kwargs)
49
79
 
50
80
  def draw_gisinfo(ax,slat,nlat,wlon,elon):
51
81
 
52
82
  # 添加中文地名
53
83
 
54
- filename = '/Users/wenjianzhu/Library/CloudStorage/OneDrive-个人/PythonCode/MyWork/nmc_met_radar/resources/中文地理信息原始文件/cma_city_station_info.xlsx'
84
+ city_file = STATION_FILE
55
85
 
56
- data_guojia = pd.read_excel(filename,
57
- header=0,skiprows=0,index_col=None,
58
- )
86
+ cities = pd.read_csv(city_file, delimiter=r"\s+") # cma_city_station_info
59
87
 
60
88
  gis_lats=[]
61
89
  gis_lons=[]
62
90
  gis_name=[]
63
- for ng in range(len(data_guojia['经度'])):
64
- gis_lons.append(data_guojia['经度'][ng])
65
- gis_lats.append(data_guojia['纬度'][ng])
66
- gis_name.append(data_guojia['城市名'][ng])
91
+ for ng in range(len(cities['lon'])):
92
+ gis_lons.append(cities['lon'][ng])
93
+ gis_lats.append(cities['lat'][ng])
94
+ gis_name.append(cities['city_name'][ng])
67
95
 
68
96
 
69
- fontname='/Users/wenjianzhu/Library/CloudStorage/OneDrive-个人/PythonCode/MyWork/nmc_met_radar/resources/fonts/msyhbd.ttc'
70
- font2=FontProperties(fname=fontname, size=8)
97
+
98
+ font2=FontProperties(fname=FONT_FILE, size=8)
71
99
  geodetic_transform = ccrs.Geodetic()._as_mpl_transform(ax)
72
100
  text_transform = offset_copy(geodetic_transform, units='dots', x=-5)
73
101
  aa = (np.array(gis_lats)<nlat) & (np.array(gis_lats) > slat)
@@ -127,14 +155,7 @@ def quick_draw_mosaic_cross(grid:pyart.core.Grid,params):
127
155
  vmin = 0
128
156
  vmax = 75
129
157
 
130
- cmapname = 'pyart_NWSRef'
131
-
132
- #
133
- #cmapname = 'pyart_NWSVel'
134
- #cmapname = 'pyart_NWS_SPW'
135
- #cmapname = 'pyart_RefDiff'
136
- #cmapname = 'pyart_NWS_SPW'
137
- #cmapname = 'pyart_NWS_SPW'
158
+ cmapname = 'NWSRef'
138
159
 
139
160
  # Panel 1: PPI plot of the second tilt.
140
161
  ax1 = fig.add_axes(map_panel_axes, projection=projection)
@@ -168,17 +189,6 @@ def quick_draw_mosaic_cross(grid:pyart.core.Grid,params):
168
189
  plt.close()
169
190
 
170
191
 
171
-
172
- def draw_topo(ax=None):
173
- # 读取地形数据
174
- filename = '/Users/wenjianzhu/Downloads/srtm_southchina.nc'
175
- topo = xr.open_dataset(filename)
176
- # ax = plt.axes()
177
- if ax is None:
178
- ax = plt.gca()
179
- ax.contour(topo['longitude'].values,topo['latitude'].values,topo['topo'],levels=[250,500,750,1000],colors='gray')
180
-
181
- pass
182
192
  def draw_composite_operational(gridfile,outpath='.',level=4,vmin=0,vmax=75,colorfile=None):
183
193
 
184
194
  if not os.path.exists(gridfile):
@@ -192,15 +202,14 @@ def draw_composite_operational(gridfile,outpath='.',level=4,vmin=0,vmax=75,color
192
202
  if not os.path.exists(outpath):
193
203
  os.makedirs(outpath)
194
204
 
195
- fontname='/Users/wenjianzhu/Library/CloudStorage/OneDrive-个人/PythonCode/MyWork/nmc_met_radar/resources/fonts/msyhbd.ttc'
196
205
  (filepath,filename) = os.path.split(gridfile)
197
206
  tstr = filename[7:19]
198
207
  tt = datetime.strptime(tstr,'%Y%m%d%H%M') + timedelta(hours=8)
199
208
 
200
209
  tstr_date = '%04d年%02d月%02d日'%(tt.year,tt.month,tt.day)
201
210
  tstr_time = '%02d时%02d分(北京时)'%(tt.hour,tt.minute)
202
- font_large=FontProperties(fname=fontname, size=14)
203
- font_mid=FontProperties(fname=fontname, size=10)
211
+ font_large=FontProperties(fname=FONT_FILE, size=14)
212
+ font_mid=FontProperties(fname=FONT_FILE, size=10)
204
213
 
205
214
  min_ref=10
206
215
  am = grid.fields['reflectivity']['data'].mask
@@ -248,29 +257,23 @@ def draw_composite_operational(gridfile,outpath='.',level=4,vmin=0,vmax=75,color
248
257
 
249
258
  field = 'reflectivity'
250
259
  if colorfile is None:
251
- cmapname = 'pyart_NWSRef'
260
+ cmapname = 'NWSRef'
252
261
  cmap = common.parse_cmap(cmapname, field)
253
262
  else:
254
- # colorfile='gr2_colors/default_BR_PUP2.pal'
255
- # colorfile = 'gr2_colors/BR_WDTB_Bright.pal'
256
-
257
- outdic= parse_pro(colorfile)
258
- cmap=outdic['cmap']
259
- norm=outdic['norm']
263
+ cmap,norm=parse(colorfile)
264
+ # outdic= parse(colorfile)
265
+ # cmap=outdic['cmap']
266
+ # norm=outdic['norm']
260
267
 
261
268
  display.plot_grid(field, level, vmin=vmin, vmax=vmax,
262
269
  ax=ax_main,colorbar_flag=False,title_flag=False,
263
270
  projection=projection,axislabels_flag=False,title=None,
264
271
  cmap=cmap,norm=norm)
265
-
266
- # add_china_map_2cartopy(ax_main, name='province', facecolor='none',edgecolor=None, lw=1)
272
+ add_china_map_2cartopy(ax_main, name='province', facecolor='none',edgecolor=None, lw=1)
267
273
  draw_gisinfo(ax_main,slat=ylim_south,nlat=ylim_north,wlon=xlim_west,elon=xlim_east)
268
- # draw_topo()
269
- # point_lat = 30.72
270
- # point_lon = 108.57
271
- # ax_main.plot(point_lon,point_lat,marker='o',color='k',markersize=6,transform=ccrs.PlateCarree())
272
- infostr = '中央气象台-天气预报技术研发室 制作(试验产品)'
273
- # infostr = '贵州省气象台制作(试验产品)'
274
+
275
+ infostr = '基于 metradar 制作'
276
+
274
277
  fig.text(0.05,0.03, infostr, va="center", ha="left", font=font_mid )
275
278
 
276
279
  ax_main.set_ylim([ylim_south, ylim_north])
@@ -319,20 +322,20 @@ def draw_composite_operational(gridfile,outpath='.',level=4,vmin=0,vmax=75,color
319
322
  plt.close()
320
323
  # plt.show()
321
324
  # create axis
322
-
325
+ print('save figure to ' + outpath + os.sep + filename.replace('.nc','.png'))
323
326
  pass
324
327
 
325
328
  if __name__ == "__main__":
326
329
 
327
330
 
328
- path = '/Users/wenjianzhu/Downloads/20230727重庆/FMT/mosaic_pyart'
329
- outpath = '/Users/wenjianzhu/Downloads/20230727重庆/FMT/mosaic_3d_pic'
331
+ path = '/mnt/e/metradar_test/vpr/mosaic/20230731_daxing'
332
+ outpath = '/mnt/e/metradar_test/vpr/mosaic/20230731_daxing/mosac_pic'
330
333
 
331
- colorfile='/Users/wenjianzhu/Library/CloudStorage/OneDrive-个人/PythonCode/MyWork/nmc_met_radar/resources/gr2_colors/default_BR_PUP2.pal'
334
+ print(os.listdir(path))
332
335
  for file in os.listdir(path):
333
336
  if not file.endswith('.nc'):
334
337
  continue
335
- draw_composite_operational(path + os.sep + file,outpath,colorfile=colorfile)
338
+ draw_composite_operational(path + os.sep + file,outpath,colorfile=None)
336
339
  pass
337
340
 
338
341