def setUp(self): myShpFile = os.path.join(TEST_DATA_DIR, 'rectangles.shp') layer = QgsVectorLayer(myShpFile, 'Points', 'ogr') QgsMapLayerRegistry.instance().addMapLayer(layer) # Create rulebased style sym1 = QgsFillSymbolV2.createSimple({'color': '#fdbf6f'}) sym2 = QgsFillSymbolV2.createSimple({'color': '#71bd6c'}) sym3 = QgsFillSymbolV2.createSimple({'color': '#1f78b4'}) self.r1 = QgsRuleBasedRendererV2.Rule(sym1, 0, 0, '"id" = 1') self.r2 = QgsRuleBasedRendererV2.Rule(sym2, 0, 0, '"id" = 2') self.r3 = QgsRuleBasedRendererV2.Rule(sym3, 0, 0, 'ELSE') self.rootrule = QgsRuleBasedRendererV2.Rule(None) self.rootrule.appendChild(self.r1) self.rootrule.appendChild(self.r2) self.rootrule.appendChild(self.r3) self.renderer = QgsRuleBasedRendererV2(self.rootrule) layer.setRendererV2(self.renderer) self.mapsettings = CANVAS.mapSettings() self.mapsettings.setOutputSize(QSize(400, 400)) self.mapsettings.setOutputDpi(96) self.mapsettings.setExtent(QgsRectangle(-163, 22, -70, 52)) rendered_layers = [layer.id()] self.mapsettings.setLayers(rendered_layers)
def __getRuleBasedRenderer(self): """docstring for __getRuleBasedRenderer""" root_rule = QgsRuleBasedRendererV2.Rule(None) n = (len(self.expressions) - 1) i = 0 for exp, msclass in zip(self.expressions[::-1], self.mslayer["classes"][::-1]): Symbol = SymbolImport(msclass, self.qgslayer, self.geom_type, self.sizeunits, \ self.mssymbols, self.symbolsetpath, self.fontset) symbol = Symbol.getSymbol() scalemindenom = self.__getScaledenom(msclass, 'minscaledenom', 'styles') scalemaxdenom = self.__getScaledenom(msclass, 'maxscaledenom', 'styles') label = msclass.get("name", exp[1]) state = False if msclass.get("status", 'on').lower() == 'off' else True filterexp = '' if exp[0] == Expression.TYPE_STRING and self.has_classitem: filterexp = "\"{}\" = '{}'".format(self.has_classitem, exp[1]) elif exp[0] == Expression.TYPE_LIST or exp[ 0] == Expression.TYPE_BETWEEN or exp[ 0] == Expression.TYPE_LOGICAL: filterexp = exp[1] description = '' #Si no tiene expresion y si es la ultima regla setear a True, tener en cuenta que se puede declarar al reves #elserule = True if exp[0] == 'unknown' and exp[1] == '' and i == n else False elserule = False rule = QgsRuleBasedRendererV2.Rule(symbol, scalemindenom, scalemaxdenom, filterexp, label, description, elserule) rule.setActive(state) root_rule.appendChild(rule) i += 1 return QgsRuleBasedRendererV2(root_rule)
{ "color": "#000000", "color_border": "#000000", "width_border": "0.25", "style": "no", } ) highlight_style = QgsFillSymbolV2().createSimple( { "color": "#000000", "color_border": "#ff0000", "width_border": "0.85", "style": "no", } ) highlight_rule = QgsRuleBasedRendererV2.Rule(highlight_style) highlight_rule.setFilterExpression("$id = @atlas_featureid") highlight_renderer = QgsRuleBasedRendererV2(normal_style) highlight_renderer.rootRule().appendChild(highlight_rule) original_renderer = vector_layer.rendererV2() vector_layer.setRendererV2(highlight_renderer) vector_layer.triggerRepaint() # Produce the reports atlas.beginRender() for i in range(atlas.numFeatures()): atlas.prepareForFeature(i) region_id = str(atlas.feature().attribute("aoi_id")) if region_id not in report_tables.keys(): continue styled_df = report_tables[region_id].style.format("{:.2f}")