def getLabels(layer, folder, sln): labelling = layer.labeling() if labelling is not None: palyr = labelling.settings() if palyr and palyr.fieldName and palyr.fieldName != "": labelField = palyr.fieldName if labelField != "": if unicode(layer.customProperty( "labeling/isExpression")).lower() == "true": exprFilename = os.path.join(folder, "resources", "qgis2web_expressions.js") fieldName = layer.customProperty("labeling/fieldName") name = compile_to_file(fieldName, "label_%s" % sln, "OpenLayers3", exprFilename) js = "%s(context)" % (name) js = js.strip() labelText = js else: fieldIndex = layer.fields().indexFromName(labelField) editFormConfig = layer.editFormConfig() editorWidget = layer.editorWidgetSetup(fieldIndex).type() if (editorWidget == 'Hidden'): labelField = "q2wHide_" + labelField labelText = ('feature.get("%s")' % labelField.replace('"', '\\"')) else: labelText = '""' else: labelText = '""' else: labelText = '""' return labelText
def getLabels(layer, folder, sln): labelling = layer.labeling() if labelling is not None: palyr = labelling.settings() if palyr and palyr.fieldName and palyr.fieldName != "": labelField = palyr.fieldName if labelField != "": if unicode(layer.customProperty( "labeling/isExpression")).lower() == "true": exprFilename = os.path.join(folder, "resources", "qgis2web_expressions.js") fieldName = layer.customProperty("labeling/fieldName") name = compile_to_file(fieldName, "label_%s" % sln, "OpenLayers3", exprFilename) js = "%s(context)" % (name) js = js.strip() labelText = js else: fieldIndex = layer.fields().indexFromName( labelField) editFormConfig = layer.editFormConfig() editorWidget = layer.editorWidgetSetup(fieldIndex).type() if (editorWidget == 'Hidden'): labelField = "q2wHide_" + labelField labelText = ('feature.get("%s")' % labelField.replace('"', '\\"')) else: labelText = '""' else: labelText = '""' else: labelText = '""' return labelText
def ruleBased(renderer, folder, stylesFolder, layer_alpha, sln, layer): cluster = False template = """ function rules_%s(feature, value) { var context = { feature: feature, variables: {} }; // Start of if blocks and style check logic %s else { return %s; } } var style = rules_%s(feature, value); """ elsejs = "[]" js = "" root_rule = renderer.rootRule() rules = root_rule.children() expFile = os.path.join(folder, "resources", "qgis2web_expressions.js") ifelse = "if" useAnyMapUnits = False for count, rule in enumerate(rules): symbol = rule.symbol() (styleCode, pattern, setPattern, useMapUnits) = getSymbolAsStyle(symbol, stylesFolder, layer_alpha, renderer, sln, layer) name = "".join((sln, "rule", unicode(count))) exp = rule.filterExpression() if rule.isElse(): elsejs = styleCode continue name = compile_to_file(exp, name, "OpenLayers3", expFile) js += """ %s (%s(context)) { return %s; } """ % (ifelse, name, styleCode) js = js.strip() ifelse = "else if" if useMapUnits: useAnyMapUnits = True value = ("var value = '';") style = template % (sln, js, elsejs, sln) return (style, pattern, setPattern, value, useAnyMapUnits)
def getLabels(layer, safeLayerName, outputProjectFileName, vts, vtLabels): label_exp = '' labeltext = "" f = '' labelling = layer.labeling() if labelling is not None: palyr = labelling.settings() if palyr and palyr.fieldName and palyr.fieldName != "": props = palyr.dataDefinedProperties() text = palyr.format() bgColor = props.property(palyr.ShapeFillColor).staticValue() borderWidth = props.property(palyr.ShapeStrokeWidth).staticValue() borderColor = props.property(palyr.ShapeStrokeColor).staticValue() x = props.property(palyr.ShapeSizeX).staticValue() y = props.property(palyr.ShapeSizeY).staticValue() font = text.font() fontSize = font.pointSize() fontFamily = font.family() fontItalic = font.italic() fontBold = font.bold() fontColor = text.color().name() fontUnderline = font.underline() xOffset = palyr.xOffset yOffset = palyr.yOffset styleStart = "'<div style=\"color: %s; font-size: %dpt; " % ( fontColor, fontSize) if props.property(palyr.ShapeDraw).staticValue(): styleStart += "background-color: %s; " % bgColor styleStart += "border: %dpx solid %s; " % (borderWidth, borderColor) if props.property(palyr.ShapeSizeType).staticValue() == 0: styleStart += "padding: %dpx %dpx; " % (y, x) if props.property(palyr.ShapeSizeType).staticValue() == 1: styleStart += "width: %dpx; " % x styleStart += "height: %dpx; " % y if fontBold: styleStart += "font-weight: bold; " if fontItalic: styleStart += "font-style: italic; " styleStart += "font-family: \\'%s\\', sans-serif;\">' + " % ( fontFamily) styleEnd = " + '</div>'" if palyr.isExpression and palyr.enabled: exprFilename = os.path.join(outputProjectFileName, "js", "qgis2web_expressions.js") name = compile_to_file(palyr.getLabelExpression(), "label_%s" % safeLayerName, "Leaflet", exprFilename) js = "%s(context)" % (name) js = js.strip() f = js else: fn = palyr.fieldName f = "layer.feature.properties['%s']" % handleHiddenField( layer, fn) labeltext = ".bindTooltip((" + unicode(f) labeltext += " !== null?String(%s%s)%s:'')" % ( styleStart, unicode(f), styleEnd) labeltext += ", {permanent: true, offset: [-0, -16], " labeltext += "className: 'css_%s'}" % safeLayerName labeltext += ");" if vts is None: labeltext = """ var i = 0; layer_%s.eachLayer(function(layer) { var context = { feature: layer.feature, variables: {} }; layer%s labels.push(layer); totalMarkers += 1; layer.added = true; addLabel(layer, i); i++; });""" % (safeLayerName, labeltext) else: if palyr.isExpression and palyr.enabled: labelVal = f else: labelVal = "feature.properties['%s']" % palyr.fieldName labeltext = """ if (vtLayer.name === '%s') { var latlng = this.vtGeometryToLatLng(feature.geometry[0], vtLayer, tileCoords) marker = new L.CircleMarker(latlng, {stroke: false, fill: false}); marker.bindTooltip(%s, {permanent: true, direction: 'center'}).openTooltip(); this.addUserLayer(marker, tileCoords); }""" % (layer.name(), labelVal) if vts not in vtLabels: vtLabels[vts] = labeltext else: vtLabels[vts] = vtLabels[vts] + labeltext labeltext = "" else: labeltext = "" else: labeltext = "" return labeltext, vtLabels
def getLabels(layer, safeLayerName, outputProjectFileName, vts, vtLabels): label_exp = '' labeltext = "" f = '' labelling = layer.labeling() if labelling is not None: palyr = labelling.settings() if palyr and palyr.fieldName and palyr.fieldName != "": props = palyr.dataDefinedProperties() text = palyr.format() bgColor = props.property(palyr.ShapeFillColor).staticValue() borderWidth = props.property(palyr.ShapeStrokeWidth).staticValue() borderColor = props.property(palyr.ShapeStrokeColor).staticValue() x = props.property(palyr.ShapeSizeX).staticValue() y = props.property(palyr.ShapeSizeY).staticValue() font = text.font() fontSize = font.pointSize() fontFamily = font.family() fontItalic = font.italic() fontBold = font.bold() fontColor = text.color().name() fontUnderline = font.underline() xOffset = palyr.xOffset yOffset = palyr.yOffset styleStart = "'<div style=\"color: %s; font-size: %dpt; " % ( fontColor, fontSize) if props.property(palyr.ShapeDraw).staticValue(): styleStart += "background-color: %s; " % bgColor styleStart += "border: %dpx solid %s; " % (borderWidth, borderColor) if props.property(palyr.ShapeSizeType).staticValue() == 0: styleStart += "padding: %dpx %dpx; " % (y, x) if props.property(palyr.ShapeSizeType).staticValue() == 1: styleStart += "width: %dpx; " % x styleStart += "height: %dpx; " % y if fontBold: styleStart += "font-weight: bold; " if fontItalic: styleStart += "font-style: italic; " styleStart += "font-family: \\'%s\\', sans-serif;\">' + " % ( fontFamily) styleEnd = " + '</div>'" if palyr.isExpression and palyr.enabled: exprFilename = os.path.join(outputProjectFileName, "js", "qgis2web_expressions.js") name = compile_to_file(palyr.getLabelExpression(), "label_%s" % safeLayerName, "Leaflet", exprFilename) js = "%s(context)" % (name) js = js.strip() f = js else: fn = palyr.fieldName f = "layer.feature.properties['%s']" % handleHiddenField(layer, fn) labeltext = ".bindTooltip((" + unicode(f) labeltext += " !== null?String(%s%s)%s:'')" % (styleStart, unicode(f), styleEnd) labeltext += ", {permanent: true, offset: [-0, -16], " labeltext += "className: 'css_%s'}" % safeLayerName labeltext += ");" if vts is None: labeltext = """ var i = 0; layer_%s.eachLayer(function(layer) { var context = { feature: layer.feature, variables: {} }; layer%s labels.push(layer); totalMarkers += 1; layer.added = true; addLabel(layer, i); i++; });""" % (safeLayerName, labeltext) else: if palyr.isExpression and palyr.enabled: labelVal = f else: labelVal = "feature.properties['%s']" % palyr.fieldName labeltext = """ if (vtLayer.name === '%s') { var latlng = this.vtGeometryToLatLng(feature.geometry[0], vtLayer, tileCoords) marker = new L.CircleMarker(latlng, {stroke: false, fill: false}); marker.bindTooltip(%s, {permanent: true, direction: 'center'}).openTooltip(); this.addUserLayer(marker, tileCoords); }""" % (layer.name(), labelVal) if vts not in vtLabels: vtLabels[vts] = labeltext else: vtLabels[vts] = vtLabels[vts] + labeltext labeltext = "" else: labeltext = "" else: labeltext = "" return labeltext, vtLabels
def getLayerStyle(layer, sln, markerFolder, outputProjectFilename, useShapes, feedback): markerType = None useMapUnits = False renderer = layer.renderer() layer_alpha = layer.opacity() style = "" if isinstance(renderer, QgsSingleSymbolRenderer): symbol = renderer.symbol() slCount = symbol.symbolLayerCount() if slCount < 1: slCount = 1 for sl in range(slCount): (styleCode, markerType, useMapUnits, pattern) = getSymbolAsStyle(symbol, markerFolder, layer_alpha, sln, sl, useMapUnits, feedback) style += pattern style += """ function style_%s_%s() { return %s }""" % (sln, sl, styleCode) elif isinstance(renderer, QgsCategorizedSymbolRenderer): classAttr = handleHiddenField(layer, renderer.classAttribute()) symbol = renderer.categories()[0].symbol() slCount = symbol.symbolLayerCount() patterns = "" if slCount < 1: slCount = 1 for sl in range(slCount): style += """ function style_%s_%s(feature) { switch(String(feature.properties['%s'])) {""" % (sln, sl, classAttr) for cat in renderer.categories(): (styleCode, markerType, useMapUnits, pattern) = getSymbolAsStyle(cat.symbol(), markerFolder, layer_alpha, sln, sl, useMapUnits, feedback) patterns += pattern if (cat.value() is not None and cat.value() != ""): style += """ case '%s':""" % str(cat.value()).replace("'", "\\'") else: style += """ default:""" style += """ return %s break;""" % styleCode style = patterns + style + """ } }""" elif isinstance(renderer, QgsGraduatedSymbolRenderer): classAttr = handleHiddenField(layer, renderer.classAttribute()) symbol = renderer.ranges()[0].symbol() slCount = symbol.symbolLayerCount() patterns = "" if slCount < 1: slCount = 1 for sl in range(slCount): style += """ function style_%s_%s(feature) {""" % (sln, sl) for ran in renderer.ranges(): (styleCode, markerType, useMapUnits, pattern) = getSymbolAsStyle(ran.symbol(), markerFolder, layer_alpha, sln, sl, useMapUnits, feedback) patterns += pattern style += """ if (feature.properties['%(a)s'] >= %(l)f """ style += """&& feature.properties['%(a)s'] <= %(u)f ) { return %(s)s }""" style = style % { "a": classAttr, "l": ran.lowerValue(), "u": ran.upperValue(), "s": styleCode } style = patterns + style + """ }""" elif isinstance(renderer, QgsRuleBasedRenderer): symbol = renderer.rootRule().children()[0].symbol() slCount = symbol.symbolLayerCount() patterns = "" if slCount < 1: slCount = 1 for sl in range(slCount): template = """ %s function style_%s_{sl}(feature) {{ var context = {{ feature: feature, variables: {{}} }}; // Start of if blocks and style check logic %s else {{ return %s; }} }} """.format(sl=sl) elsejs = "{fill: false, stroke: false}" js = "" root_rule = renderer.rootRule() rules = root_rule.children() expFile = os.path.join(outputProjectFilename, "js", "qgis2web_expressions.js") ifelse = "if" for count, rule in enumerate(rules): if rule.symbol().symbolLayer(sl) is not None: (styleCode, markerType, useMapUnits, pattern) = getSymbolAsStyle(rule.symbol(), markerFolder, layer_alpha, sln, sl, useMapUnits, feedback) patterns += pattern name = "".join((sln, "rule", str(count))) exp = rule.filterExpression() if rule.isElse(): elsejs = styleCode continue name = compile_to_file(exp, name, "Leaflet", expFile) js += """ %s (%s(context)) { return %s; } """ % (ifelse, name, styleCode) js = js.strip() ifelse = "else if" if js == "": js = """ if (false) {}""" style += template % (patterns, sln, js, elsejs) else: useMapUnits = False style = "" if markerType == "shapeMarker": useShapes = True return style, markerType, useMapUnits, useShapes
def getLayerStyle(layer, sln, markerFolder, outputProjectFilename, useShapes): markerType = None useMapUnits = False renderer = layer.renderer() layer_alpha = layer.opacity() style = "" if isinstance(renderer, QgsSingleSymbolRenderer): symbol = renderer.symbol() slCount = symbol.symbolLayerCount() if slCount < 1: slCount = 1 for sl in range(slCount): (styleCode, markerType, useMapUnits, pattern) = getSymbolAsStyle(symbol, markerFolder, layer_alpha, sln, sl, useMapUnits) style += pattern style += """ function style_%s_%s() { return %s }""" % (sln, sl, styleCode) elif isinstance(renderer, QgsCategorizedSymbolRenderer): classAttr = handleHiddenField(layer, renderer.classAttribute()) symbol = renderer.categories()[0].symbol() slCount = symbol.symbolLayerCount() patterns = "" if slCount < 1: slCount = 1 for sl in range(slCount): style += """ function style_%s_%s(feature) { switch(String(feature.properties['%s'])) {""" % (sln, sl, classAttr) for cat in renderer.categories(): (styleCode, markerType, useMapUnits, pattern) = getSymbolAsStyle(cat.symbol(), markerFolder, layer_alpha, sln, sl, useMapUnits) patterns += pattern if (cat.value() is not None and cat.value() != ""): style += """ case '%s':""" % unicode(cat.value()).replace("'", "\\'") else: style += """ default:""" style += """ return %s break;""" % styleCode style = patterns + style + """ } }""" elif isinstance(renderer, QgsGraduatedSymbolRenderer): classAttr = handleHiddenField(layer, renderer.classAttribute()) symbol = renderer.ranges()[0].symbol() slCount = symbol.symbolLayerCount() patterns = "" if slCount < 1: slCount = 1 for sl in range(slCount): style += """ function style_%s_%s(feature) {""" % (sln, sl) for ran in renderer.ranges(): (styleCode, markerType, useMapUnits, pattern) = getSymbolAsStyle(ran.symbol(), markerFolder, layer_alpha, sln, sl, useMapUnits) patterns += pattern style += """ if (feature.properties['%(a)s'] >= %(l)f """ style += """&& feature.properties['%(a)s'] <= %(u)f ) { return %(s)s }""" style = style % {"a": classAttr, "l": ran.lowerValue(), "u": ran.upperValue(), "s": styleCode} style = patterns + style + """ }""" elif isinstance(renderer, QgsRuleBasedRenderer): symbol = renderer.rootRule().children()[0].symbol() slCount = symbol.symbolLayerCount() patterns = "" if slCount < 1: slCount = 1 for sl in range(slCount): template = """ %s function style_%s_{sl}(feature) {{ var context = {{ feature: feature, variables: {{}} }}; // Start of if blocks and style check logic %s else {{ return %s; }} }} """.format(sl=sl) elsejs = "{fill: false, stroke: false}" js = "" root_rule = renderer.rootRule() rules = root_rule.children() expFile = os.path.join(outputProjectFilename, "js", "qgis2web_expressions.js") ifelse = "if" for count, rule in enumerate(rules): if rule.symbol().symbolLayer(sl) is not None: (styleCode, markerType, useMapUnits, pattern) = getSymbolAsStyle(rule.symbol(), markerFolder, layer_alpha, sln, sl, useMapUnits) patterns += pattern name = "".join((sln, "rule", unicode(count))) exp = rule.filterExpression() if rule.isElse(): elsejs = styleCode continue name = compile_to_file(exp, name, "Leaflet", expFile) js += """ %s (%s(context)) { return %s; } """ % (ifelse, name, styleCode) js = js.strip() ifelse = "else if" if js == "": js = """ if (false) {}""" style += template % (patterns, sln, js, elsejs) else: useMapUnits = False style = "" if markerType == "shapeMarker": useShapes = True return style, markerType, useMapUnits, useShapes