def _create_geometry_class(color_name, background_color_name=None, fill_opacity=None): cls_obj = ms.classObj() outline_style_obj = ms.styleObj() try: color = ms.colorObj(*BASE_COLORS[color_name]) except KeyError: raise # TODO outline_style_obj.outlinecolor = color cls_obj.insertStyle(outline_style_obj) if fill_opacity is not None: fill_style_obj = ms.styleObj() fill_style_obj.color = ms.colorObj( color.red, color.green, color.blue, int(255 * fill_opacity) ) cls_obj.insertStyle(fill_style_obj) if background_color_name: outline_style_obj.backgroundcolor = ms.colorObj( *BASE_COLORS[background_color_name] ) cls_obj.group = color_name return cls_obj
def _create_mask_polygon_layer(name): mask_layer = ms.layerObj() mask_layer.name = name mask_layer.type = ms.MS_LAYER_POLYGON mask_layer.setMetaData("eoxs_geometry_reversed", "true") cls = ms.classObj(mask_layer) style = ms.styleObj(cls) style.color.setRGB(0, 0, 0) return mask_layer
def apply_styles(self, layer, fill=False, default=None): """ Add style metadata. """ for name, r, g, b in self.STYLES: cls = ms.classObj() style = ms.styleObj() style.outlinecolor = ms.colorObj(r, g, b) if fill: style.color = ms.colorObj(r, g, b) style.opacity = 50 cls.insertStyle(style) cls.group = name layer.insertClass(cls) layer.classgroup = (default or self.DEFAULT_STYLE)
def apply_styles(self, layer, fill=False): # add style info for name, r, g, b in self.STYLES: cls = ms.classObj() style = ms.styleObj() style.outlinecolor = ms.colorObj(r, g, b) if fill: style.color = ms.colorObj(r, g, b) cls.insertStyle(style) cls.group = name layer.insertClass(cls) layer.classgroup = self.DEFAULT_STYLE
def _polygon_masking_layer(cov, name, mask, group=None): layer = ms.layerObj() layer.name = name layer.type = ms.MS_LAYER_POLYGON #layer.setMetaData("eoxs_geometry_reversed", "true") if group: layer.setMetaData("wms_layer_group", group) cls = ms.classObj(layer) style = ms.styleObj(cls) style.color.setRGB(0, 0, 0) shape = ms.shapeObj.fromWKT(mask.wkt) shape.initValues(1) shape.setValue(0, cov.identifier) # add feature to the layer layer.addFeature(shape) return layer
def _create_raster_style(name, layer, minvalue=0, maxvalue=255, nil_values=None): colors = COLOR_SCALES[name] nil_values = [float(nil_value) for nil_value in nil_values or []] if nil_values: offsite = ms.colorObj(*OFFSITE_COLORS.get(name, (0, 0, 0))) layer.offsite = offsite for nil_value in nil_values: cls = ms.classObj() cls.setExpression("([pixel] = %s)" % nil_value) cls.group = name style = ms.styleObj() style.color = offsite style.opacity = 0 style.rangeitem = "" cls.insertStyle(style) layer.insertClass(cls) low_nil_values = [ nil_value for nil_value in nil_values if nil_value <= minvalue ] high_nil_values = [ nil_value for nil_value in nil_values if nil_value >= maxvalue ] # Create style for values below range, but make sure to not collide # with nil-values if low_nil_values: low_nil = max(low_nil_values) cls = ms.classObj() cls.setExpression( "([pixel] <= %s AND [pixel] > %s)" % (minvalue, low_nil) ) cls.group = name style = ms.styleObj() style.color = ms.colorObj(*colors[0][1]) cls.insertStyle(style) layer.insertClass(cls) else: cls = ms.classObj() cls.setExpression("([pixel] <= %s)" % (minvalue)) cls.group = name style = ms.styleObj() style.color = ms.colorObj(*colors[0][1]) cls.insertStyle(style) layer.insertClass(cls) interval = (maxvalue - minvalue) for prev_item, next_item in pairwise_iterative(colors): prev_perc, prev_color = prev_item next_perc, next_color = next_item cls = ms.classObj() cls.setExpression("([pixel] >= %s AND [pixel] < %s)" % ( (minvalue + prev_perc * interval), (minvalue + next_perc * interval) )) cls.group = name style = ms.styleObj() style.mincolor = ms.colorObj(*prev_color) style.maxcolor = ms.colorObj(*next_color) style.minvalue = minvalue + prev_perc * interval style.maxvalue = minvalue + next_perc * interval style.rangeitem = "" cls.insertStyle(style) layer.insertClass(cls) # Create style for values above range, but make sure to not collide with # nil-values if high_nil_values: high_nil = min(high_nil_values) cls = ms.classObj() cls.setExpression( "([pixel] > %s AND [pixel] < %s)" % (maxvalue, high_nil) ) cls.group = name style = ms.styleObj() style.color = ms.colorObj(*colors[0][1]) cls.insertStyle(style) layer.insertClass(cls) else: cls = ms.classObj() cls.setExpression("([pixel] > %s)" % (maxvalue)) cls.group = name style = ms.styleObj() style.color = ms.colorObj(*colors[-1][1]) cls.insertStyle(style) layer.insertClass(cls)