##// END OF EJS Templates
Add georef for realtime
Juan C. Espinoza -
r1498:675eff1be3dc
parent child
Show More
@@ -907,8 +907,8 class PlotterData(object):
907 907 Object to hold data to be plotted
908 908 '''
909 909
910 MAXNUMX = 200
911 MAXNUMY = 200
910 MAXNUMX = 1000
911 MAXNUMY = 1000
912 912
913 913 def __init__(self, code, exp_code, localtime=True):
914 914
@@ -993,25 +993,28 class PlotterData(object):
993 993
994 994 self.__heights = [H for tm in self.times]
995 995
996 def jsonify(self, tm, plot_name, plot_type, decimate=False):
996 def jsonify(self, tm, plot_name, plot_type, key=None, decimate=False):
997 997 '''
998 998 Convert data to json
999 999 '''
1000 1000
1001 if key is None:
1002 key = self.key
1003
1001 1004 meta = {}
1002 1005 meta['xrange'] = []
1003 1006 dy = int(len(self.yrange)/self.MAXNUMY) + 1
1004 tmp = self.data[tm][self.key]
1007 tmp = self.data[tm][key]
1005 1008 shape = tmp.shape
1006 1009 if len(shape) == 2:
1007 data = self.roundFloats(self.data[tm][self.key][::, ::dy].tolist())
1010 data = self.roundFloats(self.data[tm][key][::, ::dy].tolist())
1008 1011 elif len(shape) == 3:
1009 dx = int(self.data[tm][self.key].shape[1]/self.MAXNUMX) + 1
1012 dx = int(self.data[tm][key].shape[1]/self.MAXNUMX) + 1
1010 1013 data = self.roundFloats(
1011 self.data[tm][self.key][::, ::dx, ::dy].tolist())
1014 self.data[tm][key][::, ::dx, ::dy].tolist())
1012 1015 meta['xrange'] = self.roundFloats(self.xrange[2][::dx].tolist())
1013 1016 else:
1014 data = self.roundFloats(self.data[tm][self.key].tolist())
1017 data = self.roundFloats(self.data[tm][key].tolist())
1015 1018
1016 1019 ret = {
1017 1020 'plot': plot_name,
@@ -1022,7 +1025,9 class PlotterData(object):
1022 1025 meta['type'] = plot_type
1023 1026 meta['interval'] = float(self.interval)
1024 1027 meta['localtime'] = self.localtime
1025 meta['yrange'] = self.roundFloats(self.yrange[::dy].tolist())
1028 #meta['yrange'] = self.roundFloats(self.yrange[::dy].tolist())
1029 meta['yrange'] = self.roundFloats(self.lat[::dy].tolist())
1030 meta['xrange'] = self.roundFloats(self.lon[::dy].tolist())
1026 1031 meta.update(self.meta)
1027 1032 ret['metadata'] = meta
1028 1033 return json.dumps(ret)
@@ -1066,4 +1071,4 class PlotterData(object):
1066 1071 if isinstance(obj, list):
1067 1072 return list(map(PlotterData.roundFloats, obj))
1068 1073 elif isinstance(obj, float):
1069 return round(obj, 2)
1074 return round(obj, 4)
@@ -596,9 +596,9 class Plot(Operation):
596 596 if isinstance(value, (numpy.float32, numpy.float64)):
597 597 value = round(float(value), 2)
598 598 self.data.meta[attr] = value
599 if self.colormap == 'jet':
599 if self.colormap == 'jet' or self.colormap == 'sophy_w':
600 600 self.data.meta['colormap'] = 'Jet'
601 elif 'RdBu' in self.colormap:
601 elif 'sophy_v' in self.colormap:
602 602 self.data.meta['colormap'] = 'RdBu'
603 603 else:
604 604 self.data.meta['colormap'] = 'Viridis'
@@ -611,7 +611,7 class Plot(Operation):
611 611 tm = self.sender_queue.popleft()
612 612 except IndexError:
613 613 break
614 msg = self.data.jsonify(tm, self.save_code, self.plot_type)
614 msg = self.data.jsonify(tm, self.save_code, self.plot_type, key='var')
615 615 self.socket.send_string(msg)
616 616 socks = dict(self.poll.poll(2000))
617 617 if socks.get(self.socket) == zmq.POLLIN:
@@ -6,8 +6,8 from mpl_toolkits.axisartist.grid_finder import FixedLocator, DictFormatter
6 6 from schainpy.model.graphics.jroplot_base import Plot, plt
7 7 from schainpy.model.graphics.jroplot_spectra import SpectraPlot, RTIPlot, CoherencePlot, SpectraCutPlot
8 8 from schainpy.utils import log
9 # libreria wradlib
10 #import wradlib as wrl
9
10 import wradlib.georef as georef
11 11
12 12 EARTH_RADIUS = 6.3710e3
13 13
@@ -372,7 +372,7 class PolarMapPlot(Plot):
372 372 class WeatherParamsPlot(Plot):
373 373 #CODE = 'RHI'
374 374 #plot_name = 'RHI'
375 #plot_type = 'rhistyle'
375 plot_type = 'scattermap'
376 376 buffering = False
377 377
378 378 def setup(self):
@@ -418,10 +418,20 class WeatherParamsPlot(Plot):
418 418
419 419 if 'pow' in self.attr_data[0].lower():
420 420 # data['data'] = 10*numpy.log10(getattr(dataOut, self.attr_data[0])/(factor))
421 data['data'] = numpy.ma.masked_array(10*numpy.log10(getattr(dataOut, self.attr_data[0])/(factor)), mask=mask)
421 tmp = numpy.ma.masked_array(10*numpy.log10(getattr(dataOut, self.attr_data[0])/(factor)), mask=mask)
422 422 else:
423 data['data'] = numpy.ma.masked_array(getattr(dataOut, self.attr_data[0]), mask=mask)
424 # data['data'] = getattr(dataOut, self.attr_data[0])
423 tmp = numpy.ma.masked_array(getattr(dataOut, self.attr_data[0]), mask=mask)
424 # tmp = getattr(dataOut, self.attr_data[0])
425
426 r = dataOut.heightList
427 delta_height = r[1]-r[0]
428 valid = numpy.where(r>=0)[0]
429 data['r'] = numpy.arange(len(valid))*delta_height
430
431 try:
432 data['data'] = tmp[self.channels[0]][:,valid]
433 except:
434 data['data'] = tmp[0][:,valid]
425 435
426 436 if dataOut.mode_op == 'PPI':
427 437 self.CODE = 'PPI'
@@ -430,25 +440,22 class WeatherParamsPlot(Plot):
430 440 self.CODE = 'RHI'
431 441 self.title = self.CODE
432 442
433 data['azi'] = dataOut.data_azi
434 data['ele'] = dataOut.data_ele
443 data['azi'] = dataOut.data_azi
444 data['ele'] = dataOut.data_ele
435 445 data['mode_op'] = dataOut.mode_op
436
446 var = data['data'].flatten()
447 r = numpy.tile(data['r'], data['data'].shape[0]).reshape(data['data'].shape)*1000
448 lla = georef.spherical_to_proj(r, data['azi'], data['ele'], (-75.295893, -12.040436, 3379.2147))
449 meta['lat'] = lla[:,:,1].flatten()[var.mask==False]
450 meta['lon'] = lla[:,:,0].flatten()[var.mask==False]
451 data['var'] = numpy.array([var[var.mask==False]])
452
437 453 return data, meta
438 454
439 455 def plot(self):
440 data = self.data[-1]
441 r = self.data.yrange
442 delta_height = r[1]-r[0]
443 r_mask = numpy.where(r>=0)[0]
444 r = numpy.arange(len(r_mask))*delta_height
445 self.y = 2*r
446
447 try:
448 z = data['data'][self.channels[0]][:,r_mask]
449 except:
450 z = data['data'][0][:,r_mask]
451
456 data = self.data[-1]
457 z = data['data']
458 r = data['r']
452 459 self.titles = []
453 460
454 461 self.ymax = self.ymax if self.ymax else numpy.nanmax(r)
General Comments 0
You need to be logged in to leave comments. Login now