def getSymbolAsStyle(symbol, markerFolder, layer_transparency, sln, sl, useMapUnits, feedback): markerType = None pattern = "" # styles = [] if layer_transparency == 0: alpha = symbol.alpha() else: alpha = layer_transparency slc = sl sl = symbol.symbolLayer(sl) try: props = sl.properties() except Exception: props = {} if isinstance(sl, QgsSimpleMarkerSymbolLayer): 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 Exception: try: shape = sl.name() except Exception: pass style, useMapUnits = getMarker(color, borderColor, borderWidth, borderUnits, size, sizeUnits, props, lineStyle, shape, feedback) try: if shape == 8 or shape == "circle": markerType = "circleMarker" else: markerType = "shapeMarker" except Exception: markerType = "circleMarker" elif isinstance(sl, QgsSvgMarkerSymbolLayer): 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 = str(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, QgsSimpleLineSymbolLayer): 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, useMapUnits, feedback) style += """ fillOpacity: 0,""" elif isinstance(sl, QgsSimpleFillSymbolLayer): 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 Exception: lineCap = 0 lineJoin = 0 strokeStyle, useMapUnits = getStrokeStyle(borderColor, borderStyle, borderWidth, line_units, lineCap, lineJoin, useMapUnits, feedback) 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 = new L.StripePattern({ weight: %s, spaceWeight: %s, color: '%s', opacity: %s, spaceOpacity: 0, angle: %d }); pattern_%s_%d.addTo(map);""" % (sln, slc, weight, spaceWeight, color, alpha, angle, sln, slc) style = """ stroke: false, fillOpacity: 1, fillPattern: pattern_%s_%d""" % (sln, slc) else: feedback.showFeedback("""replacing symbol layer {} with circle""".format(sl.layerType())) markerType = "circleMarker" style = "" useMapUnits = False return ("""{ pane: 'pane_%s',%s }""" % (sln, style), markerType, useMapUnits, pattern)
def getSymbolAsStyle(symbol, stylesFolder, layer_transparency, renderer, sln, layer): styles = {} useMapUnits = False if layer_transparency == 0: alpha = symbol.alpha() else: alpha = layer_transparency for i in range(symbol.symbolLayerCount()): sl = symbol.symbolLayer(i) props = sl.properties() pattern = "" setPattern = "" if isinstance(sl, QgsSimpleMarkerSymbolLayer): 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, QgsSvgMarkerSymbolLayer): 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, QgsFontMarkerSymbolLayer): char = sl.character() color = getRGBAColor(props["color"], alpha) style = """text: new ol.style.Text({ text: '%s', %s})""" % (char, getFillStyle(color, props)) elif isinstance(sl, QgsSimpleLineSymbolLayer): 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, QgsSimpleFillSymbolLayer): 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 style += getFillStyle(fillColor, props) 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_source") 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.keys())), pattern, setPattern, useMapUnits)
def getSymbolAsStyle(symbol, markerFolder, layer_transparency, sln, sl, useMapUnits): markerType = None pattern = "" styles = [] if layer_transparency == 0: alpha = symbol.alpha() else: alpha = layer_transparency slc = sl sl = symbol.symbolLayer(sl) try: props = sl.properties() except: props = {} if isinstance(sl, QgsSimpleMarkerSymbolLayer): 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, QgsSvgMarkerSymbolLayer): 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, QgsSimpleLineSymbolLayer): 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, useMapUnits) style += """ fillOpacity: 0,""" elif isinstance(sl, QgsSimpleFillSymbolLayer): 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, useMapUnits) 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 = new L.StripePattern({ weight: %s, spaceWeight: %s, color: '%s', opacity: %s, spaceOpacity: 0, angle: %d }); pattern_%s_%d.addTo(map);""" % (sln, slc, weight, spaceWeight, color, alpha, angle, sln, slc) style = """ stroke: false, fillOpacity: 1, fillPattern: pattern_%s_%d""" % (sln, slc) else: markerType = "circleMarker" style = "" useMapUnits = False return ("""{ pane: 'pane_%s',%s }""" % (sln, style), markerType, useMapUnits, pattern)
def getSymbolAsStyle(symbol, stylesFolder, layer_transparency, renderer, sln, layer): styles = {} useMapUnits = False if layer_transparency == 0: alpha = symbol.alpha() else: alpha = layer_transparency for i in range(symbol.symbolLayerCount()): sl = symbol.symbolLayer(i) props = sl.properties() pattern = "" setPattern = "" if isinstance(sl, QgsSimpleMarkerSymbolLayer): 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, QgsSvgMarkerSymbolLayer): 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, QgsFontMarkerSymbolLayer): char = sl.character() color = getRGBAColor(props["color"], alpha) style = """text: new ol.style.Text({ text: '%s', %s})""" % (char, getFillStyle(color, props)) elif isinstance(sl, QgsSimpleLineSymbolLayer): 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, QgsSimpleFillSymbolLayer): 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 style += getFillStyle(fillColor, props) 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.keys())), pattern, setPattern, useMapUnits)