##// 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 Object to hold data to be plotted
907 Object to hold data to be plotted
908 '''
908 '''
909
909
910 MAXNUMX = 200
910 MAXNUMX = 1000
911 MAXNUMY = 200
911 MAXNUMY = 1000
912
912
913 def __init__(self, code, exp_code, localtime=True):
913 def __init__(self, code, exp_code, localtime=True):
914
914
@@ -993,25 +993,28 class PlotterData(object):
993
993
994 self.__heights = [H for tm in self.times]
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 Convert data to json
998 Convert data to json
999 '''
999 '''
1000
1000
1001 if key is None:
1002 key = self.key
1003
1001 meta = {}
1004 meta = {}
1002 meta['xrange'] = []
1005 meta['xrange'] = []
1003 dy = int(len(self.yrange)/self.MAXNUMY) + 1
1006 dy = int(len(self.yrange)/self.MAXNUMY) + 1
1004 tmp = self.data[tm][self.key]
1007 tmp = self.data[tm][key]
1005 shape = tmp.shape
1008 shape = tmp.shape
1006 if len(shape) == 2:
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 elif len(shape) == 3:
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 data = self.roundFloats(
1013 data = self.roundFloats(
1011 self.data[tm][self.key][::, ::dx, ::dy].tolist())
1014 self.data[tm][key][::, ::dx, ::dy].tolist())
1012 meta['xrange'] = self.roundFloats(self.xrange[2][::dx].tolist())
1015 meta['xrange'] = self.roundFloats(self.xrange[2][::dx].tolist())
1013 else:
1016 else:
1014 data = self.roundFloats(self.data[tm][self.key].tolist())
1017 data = self.roundFloats(self.data[tm][key].tolist())
1015
1018
1016 ret = {
1019 ret = {
1017 'plot': plot_name,
1020 'plot': plot_name,
@@ -1022,7 +1025,9 class PlotterData(object):
1022 meta['type'] = plot_type
1025 meta['type'] = plot_type
1023 meta['interval'] = float(self.interval)
1026 meta['interval'] = float(self.interval)
1024 meta['localtime'] = self.localtime
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 meta.update(self.meta)
1031 meta.update(self.meta)
1027 ret['metadata'] = meta
1032 ret['metadata'] = meta
1028 return json.dumps(ret)
1033 return json.dumps(ret)
@@ -1066,4 +1071,4 class PlotterData(object):
1066 if isinstance(obj, list):
1071 if isinstance(obj, list):
1067 return list(map(PlotterData.roundFloats, obj))
1072 return list(map(PlotterData.roundFloats, obj))
1068 elif isinstance(obj, float):
1073 elif isinstance(obj, float):
1069 return round(obj, 2)
1074 return round(obj, 4)
@@ -596,9 +596,9 class Plot(Operation):
596 if isinstance(value, (numpy.float32, numpy.float64)):
596 if isinstance(value, (numpy.float32, numpy.float64)):
597 value = round(float(value), 2)
597 value = round(float(value), 2)
598 self.data.meta[attr] = value
598 self.data.meta[attr] = value
599 if self.colormap == 'jet':
599 if self.colormap == 'jet' or self.colormap == 'sophy_w':
600 self.data.meta['colormap'] = 'Jet'
600 self.data.meta['colormap'] = 'Jet'
601 elif 'RdBu' in self.colormap:
601 elif 'sophy_v' in self.colormap:
602 self.data.meta['colormap'] = 'RdBu'
602 self.data.meta['colormap'] = 'RdBu'
603 else:
603 else:
604 self.data.meta['colormap'] = 'Viridis'
604 self.data.meta['colormap'] = 'Viridis'
@@ -611,7 +611,7 class Plot(Operation):
611 tm = self.sender_queue.popleft()
611 tm = self.sender_queue.popleft()
612 except IndexError:
612 except IndexError:
613 break
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 self.socket.send_string(msg)
615 self.socket.send_string(msg)
616 socks = dict(self.poll.poll(2000))
616 socks = dict(self.poll.poll(2000))
617 if socks.get(self.socket) == zmq.POLLIN:
617 if socks.get(self.socket) == zmq.POLLIN:
@@ -6,8 +6,8 from mpl_toolkits.axisartist.grid_finder import FixedLocator, DictFormatter
6 from schainpy.model.graphics.jroplot_base import Plot, plt
6 from schainpy.model.graphics.jroplot_base import Plot, plt
7 from schainpy.model.graphics.jroplot_spectra import SpectraPlot, RTIPlot, CoherencePlot, SpectraCutPlot
7 from schainpy.model.graphics.jroplot_spectra import SpectraPlot, RTIPlot, CoherencePlot, SpectraCutPlot
8 from schainpy.utils import log
8 from schainpy.utils import log
9 # libreria wradlib
9
10 #import wradlib as wrl
10 import wradlib.georef as georef
11
11
12 EARTH_RADIUS = 6.3710e3
12 EARTH_RADIUS = 6.3710e3
13
13
@@ -372,7 +372,7 class PolarMapPlot(Plot):
372 class WeatherParamsPlot(Plot):
372 class WeatherParamsPlot(Plot):
373 #CODE = 'RHI'
373 #CODE = 'RHI'
374 #plot_name = 'RHI'
374 #plot_name = 'RHI'
375 #plot_type = 'rhistyle'
375 plot_type = 'scattermap'
376 buffering = False
376 buffering = False
377
377
378 def setup(self):
378 def setup(self):
@@ -418,10 +418,20 class WeatherParamsPlot(Plot):
418
418
419 if 'pow' in self.attr_data[0].lower():
419 if 'pow' in self.attr_data[0].lower():
420 # data['data'] = 10*numpy.log10(getattr(dataOut, self.attr_data[0])/(factor))
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 else:
422 else:
423 data['data'] = numpy.ma.masked_array(getattr(dataOut, self.attr_data[0]), mask=mask)
423 tmp = numpy.ma.masked_array(getattr(dataOut, self.attr_data[0]), mask=mask)
424 # data['data'] = getattr(dataOut, self.attr_data[0])
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 if dataOut.mode_op == 'PPI':
436 if dataOut.mode_op == 'PPI':
427 self.CODE = 'PPI'
437 self.CODE = 'PPI'
@@ -430,25 +440,22 class WeatherParamsPlot(Plot):
430 self.CODE = 'RHI'
440 self.CODE = 'RHI'
431 self.title = self.CODE
441 self.title = self.CODE
432
442
433 data['azi'] = dataOut.data_azi
443 data['azi'] = dataOut.data_azi
434 data['ele'] = dataOut.data_ele
444 data['ele'] = dataOut.data_ele
435 data['mode_op'] = dataOut.mode_op
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 return data, meta
453 return data, meta
438
454
439 def plot(self):
455 def plot(self):
440 data = self.data[-1]
456 data = self.data[-1]
441 r = self.data.yrange
457 z = data['data']
442 delta_height = r[1]-r[0]
458 r = data['r']
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
452 self.titles = []
459 self.titles = []
453
460
454 self.ymax = self.ymax if self.ymax else numpy.nanmax(r)
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