def mapnik_style(self, value_field=None): """Return a Mapnik style from Legend object. """ mapnik_style = mapnik.Style() if value_field is None: value_field = "value" # Default color: red. mapnik_rule = point_rule( self.icon, self.mask, self.default_color) mapnik_style.rules.append(mapnik_rule) # < min mapnik_filter = "[%s] <= %f" % (value_field, self.min_value) logger.debug('adding mapnik_filter: %s' % mapnik_filter) mapnik_rule = point_rule( self.icon, self.mask, self.too_low_color, mapnik_filter=mapnik_filter) mapnik_style.rules.append(mapnik_rule) # in boundaries for legend_value in self.legend_values(): mapnik_filter = "[%s] > %f and [%s] <= %f" % ( value_field, legend_value['low_value'], value_field, legend_value['high_value']) logger.debug('adding mapnik_filter: %s' % mapnik_filter) mapnik_rule = point_rule( self.icon, self.mask, legend_value['color'], mapnik_filter=mapnik_filter) mapnik_style.rules.append(mapnik_rule) # > max mapnik_filter = "[%s] > %f" % (value_field, self.max_value) logger.debug('adding mapnik_filter: %s' % mapnik_filter) mapnik_rule = point_rule( self.icon, self.mask, self.too_high_color, mapnik_filter=mapnik_filter) mapnik_style.rules.append(mapnik_rule) return mapnik_style
def mapnik_style(self, value_field=None): """ Generates mapnik style from this object. """ if value_field is None: value_field = 'value' style = mapnik.Style() classes = self.shapelegendsingleclass_set.all() # Add a rule for each class for c in classes: layout_rule = mapnik.Rule() if c.color_inside: area_looks = mapnik.PolygonSymbolizer( mapnik.Color('#' + c.color_inside)) area_looks.fill_opacity = 0.5 layout_rule.symbols.append(area_looks) logger.debug('adding polygon symbolizer') if c.color: line_looks = mapnik.LineSymbolizer( mapnik.Color('#' + c.color), c.size) layout_rule.symbols.append(line_looks) logger.debug('adding line symbolizer') mapnik_filter = None if c.is_exact or c.min_value and c.min_value == c.max_value: # Check if c.min_value is parsable as float. Yes: # compare like float. try: float(c.min_value) mapnik_filter = str("[%s] = %s" % ( value_field, c.min_value)) except ValueError: mapnik_filter = str("[%s] = '%s'" % ( value_field, c.min_value)) else: if c.min_value and c.max_value: mapnik_filter = str("[%s] >= %s and [%s] < %s" % (value_field, c.min_value, value_field, c.max_value)) elif c.min_value and not c.max_value: mapnik_filter = str("[%s] >= %s" % (value_field, c.min_value)) elif not c.min_value and c.max_value: mapnik_filter = str("[%s] < %s" % (value_field, c.max_value)) if mapnik_filter is not None: logger.debug('adding mapnik_filter: %s' % mapnik_filter) layout_rule.filter = mapnik.Filter(mapnik_filter) style.rules.append(layout_rule) # Add icon rule, if applicable. if c.icon: style.rules.append( point_rule(c.icon, c.mask, c.color, mapnik_filter)) return style