def getSymbolAsStyle(symbol, stylesFolder, layer_transparency, renderer, sln, layer): styles = {} useMapUnits = False if layer_transparency == 0: alpha = symbol.alpha() else: alpha = 1 - (layer_transparency / float(100)) for i in xrange(symbol.symbolLayerCount()): sl = symbol.symbolLayer(i) props = sl.properties() pattern = "" setPattern = "" if isinstance(sl, QgsSimpleMarkerSymbolLayerV2): color = getRGBAColor(props["color"], alpha) borderColor = getRGBAColor(props["outline_color"], alpha) borderWidth = props["outline_width"] sizeUnits = props["size_unit"] if sizeUnits != "MapUnit": size = sl.size() * 2 try: shape = sl.shape() except: shape = sl.name() try: if shape == 0 or shape == "square": style, useMapUnits = getSquare(color, borderColor, borderWidth, size, props) style = "image: %s" % style elif shape == 1 or shape == "diamond": style, useMapUnits = getDiamond(color, borderColor, borderWidth, size, props) style = "image: %s" % style elif shape == 2 or shape == "pentagon": style, useMapUnits = getPentagon(color, borderColor, borderWidth, size, props) style = "image: %s" % style elif shape == 3 or shape == "hexagon": style, useMapUnits = getHexagon(color, borderColor, borderWidth, size, props) style = "image: %s" % style elif shape == 4 or shape == 5 or shape == "triangle": style, useMapUnits = getTriangle(color, borderColor, borderWidth, size, props) style = "image: %s" % style elif shape == 6 or shape == "star": style, useMapUnits = getStar(color, borderColor, borderWidth, size, props) style = "image: %s" % style elif shape == 9 or shape == "cross": style, useMapUnits = getCross(color, borderColor, borderWidth, size, props) style = "image: %s" % style elif shape == 11 or shape == "cross2": style, useMapUnits = getCross2(color, borderColor, borderWidth, size, props) style = "image: %s" % style elif shape == 12 or shape == "line": style, useMapUnits = getLine(color, borderColor, borderWidth, size, props) style = "text: %s" % style else: style, useMapUnits = getCircle(color, borderColor, borderWidth, size, props) style = "image: %s" % style except: style, useMapUnits = getCircle(color, borderColor, borderWidth, size, props) style = "image: %s" % style elif isinstance(sl, QgsSvgMarkerSymbolLayerV2): path = os.path.join(stylesFolder, os.path.basename(sl.path())) svg = xml.etree.ElementTree.parse(sl.path()).getroot() svgWidth = svg.attrib["width"] svgWidth = re.sub("px", "", svgWidth) svgWidth = re.sub("mm", "", svgWidth) svgHeight = svg.attrib["height"] svgHeight = re.sub("px", "", svgHeight) svgHeight = re.sub("mm", "", svgHeight) if symbol.dataDefinedAngle().isActive(): if symbol.dataDefinedAngle().useExpression(): rot = "0" else: rot = "feature.get(" rot += symbol.dataDefinedAngle().expressionOrField() rot += ") * 0.0174533" else: rot = unicode(sl.angle() * 0.0174533) shutil.copy(sl.path(), path) style = ("image: %s" % getIcon("styles/" + os.path.basename(sl.path()), sl.size(), svgWidth, svgHeight, rot)) elif isinstance(sl, QgsFontMarkerSymbolLayerV2): char = sl.character() color = getRGBAColor(props["color"], alpha) style = """text: new ol.style.Text({ text: '%s', %s})""" % (char, getFillStyle(color, props)) elif isinstance(sl, QgsSimpleLineSymbolLayerV2): color = getRGBAColor(props["line_color"], alpha) line_width = props["line_width"] line_style = props["line_style"] line_units = props["line_width_unit"] lineCap = sl.penCapStyle() lineJoin = sl.penJoinStyle() style, useMapUnits = getStrokeStyle(color, line_style, line_width, line_units, lineCap, lineJoin) elif isinstance(sl, QgsSimpleFillSymbolLayerV2): fillColor = getRGBAColor(props["color"], alpha) borderColor = getRGBAColor(props["outline_color"], alpha) borderStyle = props["outline_style"] borderWidth = props["outline_width"] line_units = props["outline_width_unit"] try: lineCap = sl.penCapStyle() lineJoin = sl.penJoinStyle() except: lineCap = 0 lineJoin = 0 style = "" (stroke, useMapUnits) = getStrokeStyle(borderColor, borderStyle, borderWidth, line_units, lineCap, lineJoin) if stroke != "": style = "%s" % stroke fill = getFillStyle(fillColor, props) if fill != "": style += ", %s" % fill elif isinstance(sl, QgsLinePatternFillSymbolLayer): weight = sl.subSymbol().width() spaceWeight = sl.distance() color = sl.color().name() angle = 360 - sl.lineAngle() pattern = """ var fill_%s = new ol.style.Fill();""" % sln style = """ fill: fill_%s""" % sln setPattern = """ fill_%s.setColor(stripe(%s, %s, %s, '%s'));""" % (sln, weight, spaceWeight, angle, color) else: style = "" if renderer.usingSymbolLevels(): k = sl.renderingPass() else: k = i if style != "": style += "," ts = "" vts = layer.customProperty("VectorTilesReader/vector_tile_url") if vts is None: ts = """ text: createTextStyle(feature, resolution, labelText, labelFont, labelFill, placement)""" styles[k] = '''new ol.style.Style({ %s%s })''' % (style, ts) return ("[ %s]" % ",".join(styles[s] for s in sorted(styles.iterkeys())), pattern, setPattern, useMapUnits)
def getSymbolAsStyle(symbol, markerFolder, layer_transparency, sln): markerType = None styles = [] if layer_transparency == 0: alpha = symbol.alpha() else: alpha = 1-(layer_transparency / float(100)) sl = symbol.symbolLayer(0) props = sl.properties() if isinstance(sl, QgsSimpleMarkerSymbolLayerV2): color = getRGBAColor(props["color"], alpha) borderColor = getRGBAColor(props["outline_color"], alpha) borderWidth = props["outline_width"] lineStyle = props["outline_style"] size = symbol.size() * 2 style = getCircle(color, borderColor, borderWidth, size, props, lineStyle) markerType = "circleMarker" elif isinstance(sl, QgsSvgMarkerSymbolLayerV2): path = os.path.join(markerFolder, os.path.basename(sl.path())) svgSize = sl.size() * 3.8 if symbol.dataDefinedAngle().isActive(): if symbol.dataDefinedAngle().useExpression(): rot = "0" else: rot = "feature.get(" rot += symbol.dataDefinedAngle().expressionOrField() rot += ") * 0.0174533" else: rot = unicode(sl.angle() * 0.0174533) shutil.copy(sl.path(), path) style = """ rotationAngle: %s, rotationOrigin: 'center center', icon: %s""" % (rot, getIcon("markers/" + os.path.basename(sl.path()), svgSize)) markerType = "marker" elif isinstance(sl, QgsSimpleLineSymbolLayerV2): # Check for old version if 'color' in props: color = getRGBAColor(props["color"], alpha) else: color = getRGBAColor(props["line_color"], alpha) if 'width' in props: line_width = props["width"] else: line_width = props["line_width"] if 'penstyle' in props: line_style = props["penstyle"] else: line_style = props["line_style"] lineCap = sl.penCapStyle() lineJoin = sl.penJoinStyle() style = getStrokeStyle(color, line_style, line_width, lineCap, lineJoin) elif isinstance(sl, QgsSimpleFillSymbolLayerV2): fillColor = getRGBAColor(props["color"], alpha) # for old version if 'color_border' in props: borderColor = getRGBAColor(props["color_border"], alpha) else: borderColor = getRGBAColor(props["outline_color"], alpha) if 'style_border' in props: borderStyle = props["style_border"] else: borderStyle = props["outline_style"] if 'width_border' in props: borderWidth = props["width_border"] else: borderWidth = props["outline_width"] try: lineCap = sl.penCapStyle() lineJoin = sl.penJoinStyle() except: lineCap = 0 lineJoin = 0 style = ('''%s %s''' % (getStrokeStyle(borderColor, borderStyle, borderWidth, lineCap, lineJoin), getFillStyle(fillColor, props))) else: style = "" return ("""{ pane: 'pane_%s',%s }""" % (sln, style), markerType)
def getSymbolAsStyle(symbol, markerFolder, layer_transparency, sln, sl): markerType = None styles = [] if layer_transparency == 0: alpha = symbol.alpha() else: alpha = 1 - (layer_transparency / float(100)) sl = symbol.symbolLayer(sl) try: props = sl.properties() except: props = {} if isinstance(sl, QgsSimpleMarkerSymbolLayerV2): color = getRGBAColor(props["color"], alpha) borderColor = getRGBAColor(props["outline_color"], alpha) borderWidth = props["outline_width"] lineStyle = props["outline_style"] size = sl.size() * 2 shape = 8 try: shape = sl.shape() except: pass style = getMarker(color, borderColor, borderWidth, size, props, lineStyle, shape) try: if shape == 8: markerType = "circleMarker" else: markerType = "shapeMarker" except: markerType = "circleMarker" elif isinstance(sl, QgsSvgMarkerSymbolLayerV2): path = os.path.join(markerFolder, os.path.basename(sl.path())) svgSize = sl.size() * 3.8 if symbol.dataDefinedAngle().isActive(): if symbol.dataDefinedAngle().useExpression(): rot = "0" else: rot = "feature.get(" rot += symbol.dataDefinedAngle().expressionOrField() rot += ") * 0.0174533" else: rot = unicode(sl.angle() * 0.0174533) shutil.copy(sl.path(), path) style = """ rotationAngle: %s, rotationOrigin: 'center center', icon: %s""" % ( rot, getIcon("markers/" + os.path.basename(sl.path()), svgSize)) markerType = "marker" elif isinstance(sl, QgsSimpleLineSymbolLayerV2): # Check for old version if 'color' in props: color = getRGBAColor(props["color"], alpha) else: color = getRGBAColor(props["line_color"], alpha) if 'width' in props: line_width = props["width"] else: line_width = props["line_width"] if 'penstyle' in props: line_style = props["penstyle"] else: line_style = props["line_style"] lineCap = sl.penCapStyle() lineJoin = sl.penJoinStyle() style = getStrokeStyle(color, line_style, line_width, lineCap, lineJoin) style += """ fillOpacity: 0,""" elif isinstance(sl, QgsSimpleFillSymbolLayerV2): fillColor = getRGBAColor(props["color"], alpha) # for old version if 'color_border' in props: borderColor = getRGBAColor(props["color_border"], alpha) else: borderColor = getRGBAColor(props["outline_color"], alpha) if 'style_border' in props: borderStyle = props["style_border"] else: borderStyle = props["outline_style"] if 'width_border' in props: borderWidth = props["width_border"] else: borderWidth = props["outline_width"] try: lineCap = sl.penCapStyle() lineJoin = sl.penJoinStyle() except: lineCap = 0 lineJoin = 0 style = ( '''%s %s''' % (getStrokeStyle(borderColor, borderStyle, borderWidth, lineCap, lineJoin), getFillStyle(fillColor, props))) else: markerType = "circleMarker" style = "" return ("""{ pane: 'pane_%s',%s }""" % (sln, style), markerType)
def getSymbolAsStyle(symbol, markerFolder, layer_transparency, sln, sl, cat): markerType = None pattern = "" styles = [] if layer_transparency == 0: alpha = symbol.alpha() else: alpha = 1 - (layer_transparency / float(100)) slc = sl sl = symbol.symbolLayer(sl) try: props = sl.properties() except: props = {} if isinstance(sl, QgsSimpleMarkerSymbolLayerV2): color = getRGBAColor(props["color"], alpha) borderColor = getRGBAColor(props["outline_color"], alpha) borderWidth = props["outline_width"] borderUnits = props["outline_width_unit"] lineStyle = props["outline_style"] sizeUnits = props["size_unit"] size = sl.size() if sizeUnits != "MapUnit": size = size * 2 shape = 8 try: shape = sl.shape() except: try: shape = sl.name() except: pass style, useMapUnits = getMarker(color, borderColor, borderWidth, borderUnits, size, sizeUnits, props, lineStyle, shape) try: if shape == 8 or shape == "circle": markerType = "circleMarker" else: markerType = "shapeMarker" except: markerType = "circleMarker" elif isinstance(sl, QgsSvgMarkerSymbolLayerV2): path = os.path.join(markerFolder, os.path.basename(sl.path())) svgSize = sl.size() * 3.8 if symbol.dataDefinedAngle().isActive(): if symbol.dataDefinedAngle().useExpression(): rot = "0" else: rot = "feature.get(" rot += symbol.dataDefinedAngle().expressionOrField() rot += ") * 0.0174533" else: rot = unicode(sl.angle() * 0.0174533) shutil.copy(sl.path(), path) style = """ rotationAngle: %s, rotationOrigin: 'center center', icon: %s""" % ( rot, getIcon("markers/" + os.path.basename(sl.path()), svgSize)) markerType = "marker" useMapUnits = False elif isinstance(sl, QgsSimpleLineSymbolLayerV2): color = getRGBAColor(props["line_color"], alpha) line_width = props["line_width"] line_style = props["line_style"] line_units = props["line_width_unit"] lineCap = sl.penCapStyle() lineJoin = sl.penJoinStyle() style, useMapUnits = getStrokeStyle(color, line_style, line_width, line_units, lineCap, lineJoin) style += """ fillOpacity: 0,""" elif isinstance(sl, QgsSimpleFillSymbolLayerV2): fillColor = getRGBAColor(props["color"], alpha) borderColor = getRGBAColor(props["outline_color"], alpha) borderStyle = props["outline_style"] borderWidth = props["outline_width"] line_units = props["outline_width_unit"] try: lineCap = sl.penCapStyle() lineJoin = sl.penJoinStyle() except: lineCap = 0 lineJoin = 0 strokeStyle, useMapUnits = getStrokeStyle(borderColor, borderStyle, borderWidth, line_units, lineCap, lineJoin) style = ('''%s %s''' % (strokeStyle, getFillStyle(fillColor, props))) elif isinstance(sl, QgsLinePatternFillSymbolLayer): weight = sl.subSymbol().width() spaceWeight = sl.distance() color = sl.color().name() angle = 360 - sl.lineAngle() pattern = """ var pattern_%s_%d_%d = new L.StripePattern({ weight: %s, spaceWeight: %s, color: '%s', opacity: %s, spaceOpacity: 0, angle: %d }); pattern_%s_%d_%d.addTo(map);""" % (sln, slc, cat, weight, spaceWeight, color, alpha, angle, sln, slc, cat) style = """ stroke: false, fillOpacity: 1, fillPattern: pattern_%s_%d_%d""" % (sln, slc, cat) useMapUnits = False else: markerType = "circleMarker" style = "" useMapUnits = False return ("""{ pane: 'pane_%s',%s }""" % (sln, style), markerType, useMapUnits, pattern)
def getSymbolAsStyle(symbol, stylesFolder, layer_transparency): styles = [] if layer_transparency == 0: alpha = symbol.alpha() else: alpha = 1 - (layer_transparency / float(100)) for i in xrange(symbol.symbolLayerCount()): sl = symbol.symbolLayer(i) props = sl.properties() if isinstance(sl, QgsSimpleMarkerSymbolLayerV2): color = getRGBAColor(props["color"], alpha) borderColor = getRGBAColor(props["outline_color"], alpha) borderWidth = props["outline_width"] size = symbol.size() * 2 style = "image: %s" % getCircle(color, borderColor, borderWidth, size, props) elif isinstance(sl, QgsSvgMarkerSymbolLayerV2): path = os.path.join(stylesFolder, os.path.basename(sl.path())) svg = xml.etree.ElementTree.parse(sl.path()).getroot() svgWidth = svg.attrib["width"] svgWidth = re.sub("px", "", svgWidth) svgHeight = svg.attrib["height"] svgHeight = re.sub("px", "", svgHeight) if symbol.dataDefinedAngle().isActive(): if symbol.dataDefinedAngle().useExpression(): rot = "0" else: rot = "feature.get(" rot += symbol.dataDefinedAngle().expressionOrField() rot += ") * 0.0174533" else: rot = unicode(sl.angle() * 0.0174533) shutil.copy(sl.path(), path) style = ("image: %s" % getIcon("styles/" + os.path.basename(sl.path()), sl.size(), svgWidth, svgHeight, rot)) elif isinstance(sl, QgsSimpleLineSymbolLayerV2): # Check for old version if 'color' in props: color = getRGBAColor(props["color"], alpha) else: color = getRGBAColor(props["line_color"], alpha) if 'width' in props: line_width = props["width"] else: line_width = props["line_width"] if 'penstyle' in props: line_style = props["penstyle"] else: line_style = props["line_style"] lineCap = sl.penCapStyle() lineJoin = sl.penJoinStyle() style = getStrokeStyle(color, line_style, line_width, lineCap, lineJoin) elif isinstance(sl, QgsSimpleFillSymbolLayerV2): fillColor = getRGBAColor(props["color"], alpha) # for old version if 'color_border' in props: borderColor = getRGBAColor(props["color_border"], alpha) else: borderColor = getRGBAColor(props["outline_color"], alpha) if 'style_border' in props: borderStyle = props["style_border"] else: borderStyle = props["outline_style"] if 'width_border' in props: borderWidth = props["width_border"] else: borderWidth = props["outline_width"] try: lineCap = sl.penCapStyle() lineJoin = sl.penJoinStyle() except: lineCap = 0 lineJoin = 0 style = ( '''%s %s''' % (getStrokeStyle(borderColor, borderStyle, borderWidth, lineCap, lineJoin), getFillStyle(fillColor, props))) else: style = "" styles.append('''new ol.style.Style({ %s })''' % style) return "[ %s]" % ",".join(styles)
def getSymbolAsStyle(symbol, stylesFolder, layer_transparency, renderer): styles = {} if layer_transparency == 0: alpha = symbol.alpha() else: alpha = 1 - (layer_transparency / float(100)) for i in xrange(symbol.symbolLayerCount()): sl = symbol.symbolLayer(i) props = sl.properties() if isinstance(sl, QgsSimpleMarkerSymbolLayerV2): color = getRGBAColor(props["color"], alpha) borderColor = getRGBAColor(props["outline_color"], alpha) borderWidth = props["outline_width"] size = sl.size() * 2 try: if sl.shape() == 0: style = "image: %s" % getSquare(color, borderColor, borderWidth, size, props) elif sl.shape() == 1: style = "image: %s" % getDiamond(color, borderColor, borderWidth, size, props) elif sl.shape() == 2: style = "image: %s" % getPentagon(color, borderColor, borderWidth, size, props) elif sl.shape() == 3: style = "image: %s" % getHexagon(color, borderColor, borderWidth, size, props) elif sl.shape() == 4 or sl.shape() == 5: style = "image: %s" % getTriangle(color, borderColor, borderWidth, size, props) elif sl.shape() == 6: style = "image: %s" % getStar(color, borderColor, borderWidth, size, props) elif sl.shape() == 9: style = "image: %s" % getCross(color, borderColor, borderWidth, size, props) elif sl.shape() == 11: style = "image: %s" % getCross2(color, borderColor, borderWidth, size, props) elif sl.shape() == 12: style = "text: %s" % getLine(color, borderColor, borderWidth, size, props) else: style = "image: %s" % getCircle(color, borderColor, borderWidth, size, props) except: style = "image: %s" % getCircle(color, borderColor, borderWidth, size, props) elif isinstance(sl, QgsSvgMarkerSymbolLayerV2): path = os.path.join(stylesFolder, os.path.basename(sl.path())) svg = xml.etree.ElementTree.parse(sl.path()).getroot() svgWidth = svg.attrib["width"] svgWidth = re.sub("px", "", svgWidth) svgWidth = re.sub("mm", "", svgWidth) svgHeight = svg.attrib["height"] svgHeight = re.sub("px", "", svgHeight) svgHeight = re.sub("mm", "", svgHeight) if symbol.dataDefinedAngle().isActive(): if symbol.dataDefinedAngle().useExpression(): rot = "0" else: rot = "feature.get(" rot += symbol.dataDefinedAngle().expressionOrField() rot += ") * 0.0174533" else: rot = unicode(sl.angle() * 0.0174533) shutil.copy(sl.path(), path) style = ("image: %s" % getIcon("styles/" + os.path.basename(sl.path()), sl.size(), svgWidth, svgHeight, rot)) elif isinstance(sl, QgsFontMarkerSymbolLayerV2): char = sl.character() color = getRGBAColor(props["color"], alpha) style = """text: new ol.style.Text({ text: '%s', %s})""" % (char, getFillStyle(color, props)) elif isinstance(sl, QgsSimpleLineSymbolLayerV2): # Check for old version if 'color' in props: color = getRGBAColor(props["color"], alpha) else: color = getRGBAColor(props["line_color"], alpha) if 'width' in props: line_width = props["width"] else: line_width = props["line_width"] if 'penstyle' in props: line_style = props["penstyle"] else: line_style = props["line_style"] lineCap = sl.penCapStyle() lineJoin = sl.penJoinStyle() style = getStrokeStyle(color, line_style, line_width, lineCap, lineJoin) elif isinstance(sl, QgsSimpleFillSymbolLayerV2): fillColor = getRGBAColor(props["color"], alpha) # for old version if 'color_border' in props: borderColor = getRGBAColor(props["color_border"], alpha) else: borderColor = getRGBAColor(props["outline_color"], alpha) if 'style_border' in props: borderStyle = props["style_border"] else: borderStyle = props["outline_style"] if 'width_border' in props: borderWidth = props["width_border"] else: borderWidth = props["outline_width"] try: lineCap = sl.penCapStyle() lineJoin = sl.penJoinStyle() except: lineCap = 0 lineJoin = 0 style = ( '''%s %s''' % (getStrokeStyle(borderColor, borderStyle, borderWidth, lineCap, lineJoin), getFillStyle(fillColor, props))) else: style = "" if renderer.usingSymbolLevels(): k = sl.renderingPass() else: k = i styles[k] = '''new ol.style.Style({ %s })''' % style return "[ %s]" % ",".join(styles[s] for s in sorted(styles.iterkeys()))