def makesymbolspec(geometry, *args, **kwargs): ''' Make a legend. :param geometry: (*string*) Geometry type. [point | line | polygon]. :param levels: (*array_like*) Value levels. Default is ``None``, not used. :param colors: (*list*) Colors. Defaul is ``None``, not used. :param legend break parameter maps: (*map*) Legend breaks. :param field: (*string*) The field to be used in the legend. :returns: Created legend. ''' shapetype = ShapeTypes.Image if geometry == 'point': shapetype = ShapeTypes.Point elif geometry == 'line': shapetype = ShapeTypes.Polyline elif geometry == 'polygon': shapetype = ShapeTypes.Polygon else: shapetype = ShapeTypes.Image levels = kwargs.pop('levels', None) cols = kwargs.pop('colors', None) field = kwargs.pop('field', '') if not levels is None and not cols is None: if isinstance(levels, MIArray): levels = levels.aslist() colors = [] for cobj in cols: colors.append(getcolor(cobj)) ls = LegendManage.createLegendScheme(shapetype, levels, colors) setlegendscheme(ls, **kwargs) ls.setFieldName(field) values = kwargs.pop('values', None) if values is None: return ls else: nls = LegendScheme(ls.getShapeType()) for v in values: nls.addLegendBreak(ls.findLegendBreak(v)) return nls n = len(args) isunique = True if n == 0: ls = LegendManage.createSingleSymbolLegendScheme(shapetype) setlegendscheme(ls, **kwargs) elif n == 1 and isinstance(args[0], int): ls = LegendManage.createUniqValueLegendScheme(args[0], shapetype) setlegendscheme(ls, **kwargs) else: ls = LegendScheme(shapetype) for arg in args: if isinstance(arg, (list, tuple)): for argi in arg: lb, isu = getlegendbreak(geometry, **argi) if isunique and not isu: isunique = False ls.addLegendBreak(lb) else: lb, isu = getlegendbreak(geometry, **arg) if isunique and not isu: isunique = False ls.addLegendBreak(lb) ls.setFieldName(field) if ls.getBreakNum() > 1: if isunique: ls.setLegendType(LegendType.UniqueValue) else: ls.setLegendType(LegendType.GraduatedColor) return ls
sdata = mdi.getStationData('Precipitation6h') else: sdata = sdata.add(mdi.getStationData('Precipitation6h')) atime = atime + timedelta(hours=6) #---- Interpolate station data to grid data print 'Interpolate station data to grid data...' interpSet = InterpolationSetting(60,140,-20,60,160,160,"IDW_Radius",2,1) #radList = [10.0, 8.0, 6.0, 4.0] #interpSet = InterpolationSetting(60,140,-20,60,160,160,"Cressman",radList) gdata = sdata.interpolateData(interpSet) #---- Set legend scheme ls = LegendScheme(ShapeTypes.Polygon) ls.setLegendType(LegendType.GraduatedColor) values = [0,0.1,1,2,5,10,20,25,50,100,1000] colors = [Color(255,255,255),Color(170,240,255),Color(120,230,240),Color(200,220,50),Color(240,220,20), Color(255,120,10),Color(255,90,10),Color(240,40,0),Color(180,10,0),Color(120,10,0)] lbs = ls.getLegendBreaks() for i in range(0, len(colors)): lb = PolygonBreak() lb.setColor(colors[i]) lb.setStartValue(values[i]) lb.setEndValue(values[i + 1]) if i == 0: lb.setCaption('< ' + str(values[i + 1])) elif i == len(colors) - 1: lb.setCaption('> ' + str(values[i])) else: lb.setCaption(str(values[i]) + ' - ' + str(values[i + 1]))
#---- Open GrADS data print 'Open GrADS data...' mdi = MeteoDataInfo() mdi.openGrADSData(os.path.join(dataDir, 'model.ctl')) #---- Set time index mdi.setTimeIndex(2) #---- Get pressure grid data gdata = mdi.getGridData('PS') gdata.extendToGlobal() #---- Create layer print 'Create layer...' ls = LegendScheme(ShapeTypes.Polyline) ls.setLegendType(LegendType.UniqueValue) values = [500, 550, 600, 650, 700, 750, 800, 850, 900, 950,1000] colors = [Color(110,0,220),Color(30,60,255),Color(0,160,255),Color(0,200,200),Color(0,220,0), Color(160,230,50),Color(230,220,50),Color(230,175,45),Color(240,130,40),Color(250,60,60),Color(240,0,130)] lbs = ls.getLegendBreaks() for i in range(0, len(colors)): lb = PolylineBreak() lb.setColor(colors[i]) lb.setStartValue(values[i]) lb.setEndValue(values[i]) lb.setCaption(str(values[i])) lbs.add(lb) layer = DrawMeteoData.createContourLayer(gdata, ls, 'Pressure_contour', 'PS', True) #---- Add layer
lb.setOutlineColor(Color.blue) mapFrame.addLayer(countryLayer) #---- Create MeteoDataInfo object mdi = MeteoDataInfo() #---- Open a MICAPS data file fn = os.path.join(dataDir, 'MICAPS/10101414.000') mdi.openMICAPSData(fn) #---- Get station info data sidata = mdi.getStationInfoData() #---- Create station info layer from the station info data ls = LegendScheme(ShapeTypes.Point) ls.setLegendType(LegendType.SingleSymbol) lbs = ls.getLegendBreaks() lb = PointBreak() lb.setSize(16) lb.setColor(Color.blue) lb.setOutlineColor(Color.red) lb.setStyle(PointStyle.Star) lbs.add(lb) layer = DrawMeteoData.createSTInfoLayer(sidata, ls, 'StationInfo') layer.setAvoidCollision(True) #---- Add layer mapFrame.addLayer(layer) mapFrame.moveLayer(layer, 0)
#---- Open GrADS data print 'Open GrADS data...' mdi = MeteoDataInfo() mdi.openGrADSData(os.path.join(dataDir, 'model.ctl')) #---- Set time index mdi.setTimeIndex(2) #---- Get pressure grid data gdata = mdi.getGridData('PS') gdata.extendToGlobal() #---- Create layer print 'Create layer...' ls = LegendScheme(ShapeTypes.Polygon) ls.setLegendType(LegendType.GraduatedColor) values = [450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950,1000, 1050] colors = [Color(160,0,200),Color(110,0,220),Color(30,60,255),Color(0,160,255),Color(0,200,200),Color(0,220,0), Color(160,230,50),Color(230,220,50),Color(230,175,45),Color(240,130,40),Color(250,60,60),Color(240,0,130)] lbs = ls.getLegendBreaks() for i in range(0, len(colors)): lb = PolygonBreak() lb.setColor(colors[i]) lb.setStartValue(values[i]) lb.setEndValue(values[i + 1]) lb.setCaption(str(values[i]) + ' ' + str(values[i + 1])) lb.setDrawOutline(False) lbs.add(lb) layer = DrawMeteoData.createShadedLayer(gdata, ls, 'Pressure_Shaded', 'PS', True)