def getLayerStyle(layer, sln, markerFolder): markerType = None renderer = layer.rendererV2() layer_alpha = layer.layerTransparency() style = "" if (isinstance(renderer, QgsSingleSymbolRendererV2) or isinstance(renderer, QgsRuleBasedRendererV2)): if isinstance(renderer, QgsRuleBasedRendererV2): symbol = renderer.rootRule().children()[0].symbol() else: symbol = renderer.symbol() (styleCode, markerType) = getSymbolAsStyle(symbol, markerFolder, layer_alpha, sln) style = """ function style_%s() { return %s }""" % (sln, styleCode) elif isinstance(renderer, QgsCategorizedSymbolRendererV2): classAttr = handleHiddenField(layer, renderer.classAttribute()) style = """ function style_%s(feature) { switch(feature.properties['%s']) {""" % (sln, classAttr) for cat in renderer.categories(): (styleCode, markerType) = getSymbolAsStyle(cat.symbol(), markerFolder, layer_alpha, sln) style += """ case '%s': return %s break;""" % (cat.value(), styleCode) style += """ } }""" elif isinstance(renderer, QgsGraduatedSymbolRendererV2): classAttr = handleHiddenField(layer, renderer.classAttribute()) style = """ function style_%s(feature) {""" % (sln) for ran in renderer.ranges(): (styleCode, markerType) = getSymbolAsStyle(ran.symbol(), markerFolder, layer_alpha, sln) 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 += """ }""" else: style = "" return style, markerType
def getLabels(layer, safeLayerName, outputProjectFileName): label_exp = '' labeltext = "" f = '' palyr = QgsPalLayerSettings() palyr.readFromLayer(layer) if palyr.enabled and palyr.fieldName and palyr.fieldName != "": bgColor = palyr.shapeFillColor.name() borderWidth = palyr.shapeBorderWidth borderColor = palyr.shapeBorderColor.name() x = palyr.shapeSize.x() y = palyr.shapeSize.y() font = palyr.textFont fontSize = font.pointSize() fontFamily = font.family() fontItalic = font.italic() fontBold = font.bold() fontColor = palyr.textColor.name() fontUnderline = font.underline() xOffset = palyr.xOffset yOffset = palyr.yOffset styleStart = "'<div style=\"color: %s; font-size: %dpt; " % (fontColor, fontSize) if palyr.shapeDraw: styleStart += "background-color: %s; " % bgColor styleStart += "border: %dpx solid %s; " % (borderWidth, borderColor) if palyr.shapeSizeType == 0: styleStart += "padding: %dpx %dpx; " % (y, x) if palyr.shapeSizeType == 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: f = "feature.properties['%s']" % handleHiddenField( layer, palyr.fieldName) 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 += ").openTooltip();" else: labeltext = "" return labeltext
def labelsAndPopups(layer, safeLayerName, highlight, popupsOnHover, popup): fields = layer.pendingFields() field_names = popup.keys() field_vals = popup.values() html_prov = False label_exp = '' labeltext = "" f = '' palyr = QgsPalLayerSettings() palyr.readFromLayer(layer) bgColor = palyr.shapeFillColor.name() borderWidth = palyr.shapeBorderWidth borderColor = palyr.shapeBorderColor.name() x = palyr.shapeSize.x() y = palyr.shapeSize.y() font = palyr.textFont fontSize = font.pointSize() fontFamily = font.family() fontItalic = font.italic() fontBold = font.bold() fontColor = palyr.textColor.name() fontUnderline = font.underline() xOffset = palyr.xOffset yOffset = palyr.yOffset styleStart = "'<div style=\"color: %s; font-size: %dpt; " % ( fontColor, fontSize) if palyr.shapeDraw: styleStart += "background-color: %s; " % bgColor styleStart += "border: %dpx solid %s; " % (borderWidth, borderColor) if palyr.shapeSizeType == 0: styleStart += "padding: %dpx %dpx; " % (y, x) if palyr.shapeSizeType == 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>'" f = handleHiddenField(layer, palyr.fieldName) label_exp = False labeltext = ".bindTooltip((feature.properties['" + unicode(f) labeltext += "'] !== null?String(%sfeature.properties['%s'])%s:'')" % ( styleStart, unicode(f), styleEnd) labeltext += ", {permanent: true, offset: [-0, -16], " labeltext += "className: 'css_%s'}" % safeLayerName labeltext += ").openTooltip();" f = palyr.fieldName table = "" for field in popup: if unicode(field) == 'html_exp': html_prov = True table = 'feature.properties.html_exp' if (unicode(f) != "" and f and palyr.enabled): label_exp = True if not html_prov: tablestart = "'<table>\\" row = "" for field, val in zip(field_names, field_vals): fieldIndex = fields.indexFromName(unicode(field)) try: formCfg = layer.editFormConfig() editorWidget = formCfg.widgetType(fieldIndex) except: editorWidget = layer.editorWidgetV2(fieldIndex) if (editorWidget == QgsVectorLayer.Hidden or editorWidget == 'Hidden'): continue row += """ <tr>\\""" if val == 'inline label': row += """ <th scope="row">""" row += layer.attributeDisplayName(fieldIndex) row += """</th>\\ <td>""" else: row += """ <td colspan="2">""" if val == "header label": row += '<strong>' row += layer.attributeDisplayName(fieldIndex) row += '</strong><br />' row += "' + " row += "(feature.properties[\'" + unicode(field) + "\'] " row += "!== null ? " if (editorWidget == QgsVectorLayer.Photo or editorWidget == 'Photo'): row += "'<img src=\"images/' + " row += "String(feature.properties['" + unicode(field) row += "']).replace(/[\\\/:]/g, '_').trim()" row += " + '\">' : '') + '" else: row += "Autolinker.link(" row += "String(feature.properties['" + unicode(field) row += "'])) : '') + '" row += """</td>\\ </tr>\\""" tableend = """ </table>'""" table = tablestart + row + tableend if not label_exp: labeltext = "" if popup != 0 and table != "": popFuncs = popFuncsScript(table) else: popFuncs = "" new_pop = popupScript(safeLayerName, popFuncs, highlight, popupsOnHover) return new_pop, labeltext, popFuncs
def getValue(layer, renderer): classAttr = handleHiddenField(layer, renderer.classAttribute()) value = ('var value = feature.get("%s");' % classAttr) return value
def getLayerStyle(layer, sln, markerFolder, outputProjectFilename): markerType = None renderer = layer.rendererV2() layer_alpha = layer.layerTransparency() style = "" if isinstance(renderer, QgsSingleSymbolRendererV2): symbol = renderer.symbol() (styleCode, markerType) = getSymbolAsStyle(symbol, markerFolder, layer_alpha, sln) style = """ function style_%s() { return %s }""" % (sln, styleCode) elif isinstance(renderer, QgsCategorizedSymbolRendererV2): classAttr = handleHiddenField(layer, renderer.classAttribute()) style = """ function style_%s(feature) { switch(feature.properties['%s']) {""" % (sln, classAttr) for cat in renderer.categories(): (styleCode, markerType) = getSymbolAsStyle(cat.symbol(), markerFolder, layer_alpha, sln) if cat.value() != "": style += """ case '%s':""" % cat.value() else: style += """ default:""" style += """ return %s break;""" % styleCode style += """ } }""" elif isinstance(renderer, QgsGraduatedSymbolRendererV2): classAttr = handleHiddenField(layer, renderer.classAttribute()) style = """ function style_%s(feature) {""" % (sln) for ran in renderer.ranges(): (styleCode, markerType) = getSymbolAsStyle(ran.symbol(), markerFolder, layer_alpha, sln) 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 += """ }""" elif isinstance(renderer, QgsRuleBasedRendererV2): template = """ function style_%s(feature) { var context = { feature: feature, variables: {} }; // Start of if blocks and style check logic %s else { return %s; } } """ 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): (styleCode, markerType) = getSymbolAsStyle(rule.symbol(), markerFolder, layer_alpha, sln) 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" style = template % (sln, js, elsejs) else: style = "" return style, markerType
def getLayerStyle(layer, sln, markerFolder, outputProjectFilename, useShapes): markerType = None renderer = layer.rendererV2() layer_alpha = layer.layerTransparency() style = "" if isinstance(renderer, QgsSingleSymbolRendererV2): symbol = renderer.symbol() for sl in xrange(symbol.symbolLayerCount()): (styleCode, markerType) = getSymbolAsStyle(symbol, markerFolder, layer_alpha, sln, sl) style += """ function style_%s_%s() { return %s }""" % (sln, sl, styleCode) elif isinstance(renderer, QgsCategorizedSymbolRendererV2): classAttr = handleHiddenField(layer, renderer.classAttribute()) symbol = renderer.categories()[0].symbol() for sl in xrange(symbol.symbolLayerCount()): style += """ function style_%s_%s(feature) { switch(feature.properties['%s'].toString()) {""" % (sln, sl, classAttr) for cat in renderer.categories(): (styleCode, markerType) = getSymbolAsStyle(cat.symbol(), markerFolder, layer_alpha, sln, sl) if (cat.value() is not None and cat.value() != "" and not isinstance(cat.value(), QPyNullVariant)): style += """ case '%s':""" % unicode(cat.value()).replace("'", "\\'") else: style += """ default:""" style += """ return %s break;""" % styleCode style += """ } }""" elif isinstance(renderer, QgsGraduatedSymbolRendererV2): classAttr = handleHiddenField(layer, renderer.classAttribute()) symbol = renderer.ranges()[0].symbol() for sl in xrange(symbol.symbolLayerCount()): style += """ function style_%s_%s(feature) {""" % (sln, sl) for ran in renderer.ranges(): (styleCode, markerType) = getSymbolAsStyle(ran.symbol(), markerFolder, layer_alpha, sln, sl) 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 += """ }""" elif isinstance(renderer, QgsRuleBasedRendererV2): symbol = renderer.rootRule().children()[0].symbol() for sl in xrange(symbol.symbolLayerCount()): template = """ 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) = getSymbolAsStyle(rule.symbol(), markerFolder, layer_alpha, sln, sl) 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" style += template % (sln, js, elsejs) else: style = "" if markerType == "shapeMarker": useShapes = True return style, markerType, useShapes
def labelsAndPopups(layer, safeLayerName, highlight, popupsOnHover, popup, outputProjectFileName): fields = layer.pendingFields() field_names = popup.keys() field_vals = popup.values() html_prov = False label_exp = '' labeltext = "" f = '' palyr = QgsPalLayerSettings() palyr.readFromLayer(layer) bgColor = palyr.shapeFillColor.name() borderWidth = palyr.shapeBorderWidth borderColor = palyr.shapeBorderColor.name() x = palyr.shapeSize.x() y = palyr.shapeSize.y() font = palyr.textFont fontSize = font.pointSize() fontFamily = font.family() fontItalic = font.italic() fontBold = font.bold() fontColor = palyr.textColor.name() fontUnderline = font.underline() xOffset = palyr.xOffset yOffset = palyr.yOffset styleStart = "'<div style=\"color: %s; font-size: %dpt; " % ( fontColor, fontSize) if palyr.shapeDraw: styleStart += "background-color: %s; " % bgColor styleStart += "border: %dpx solid %s; " % (borderWidth, borderColor) if palyr.shapeSizeType == 0: styleStart += "padding: %dpx %dpx; " % (y, x) if palyr.shapeSizeType == 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: f = "feature.properties['%s']" % handleHiddenField(layer, palyr.fieldName) label_exp = False 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 += ").openTooltip();" f = palyr.fieldName table = "" for field in popup: if unicode(field) == 'html_exp': html_prov = True table = 'feature.properties.html_exp' if (unicode(f) != "" and f and palyr.enabled): label_exp = True if not html_prov: tablestart = "'<table>\\" row = "" for field, val in zip(field_names, field_vals): fieldIndex = fields.indexFromName(unicode(field)) try: formCfg = layer.editFormConfig() editorWidget = formCfg.widgetType(fieldIndex) except: editorWidget = layer.editorWidgetV2(fieldIndex) if (editorWidget == QgsVectorLayer.Hidden or editorWidget == 'Hidden'): continue row += """ <tr>\\""" if val == 'inline label': row += """ <th scope="row">""" row += layer.attributeDisplayName(fieldIndex) row += """</th>\\ <td>""" else: row += """ <td colspan="2">""" if val == "header label": row += '<strong>' row += layer.attributeDisplayName(fieldIndex) row += '</strong><br />' row += "' + " row += "(feature.properties[\'" + unicode(field) + "\'] " row += "!== null ? " if (editorWidget == QgsVectorLayer.Photo or editorWidget == 'Photo'): row += "'<img src=\"images/' + " row += "String(feature.properties['" + unicode(field) row += "']).replace(/[\\\/:]/g, '_').trim()" row += " + '\">' : '') + '" else: row += "Autolinker.link(" row += "String(feature.properties['" + unicode(field) row += "'])) : '') + '" row += """</td>\\ </tr>\\""" tableend = """ </table>'""" table = tablestart + row + tableend if not label_exp: labeltext = "" if popup != 0 and table != "": popFuncs = popFuncsScript(table) else: popFuncs = "" new_pop = popupScript(safeLayerName, popFuncs, highlight, popupsOnHover) return new_pop, labeltext, popFuncs
def getLayerStyle(layer, sln, markerFolder): markerType = None renderer = layer.rendererV2() layer_alpha = layer.layerTransparency() style = "" if isinstance(renderer, QgsSingleSymbolRendererV2): symbol = renderer.symbol() (styleCode, markerType) = getSymbolAsStyle(symbol, markerFolder, layer_alpha, sln) style = """ function style_%s() { return %s }""" % (sln, styleCode) elif isinstance(renderer, QgsCategorizedSymbolRendererV2): classAttr = handleHiddenField(layer, renderer.classAttribute()) style = """ function style_%s(feature) { switch(feature.properties['%s']) {""" % (sln, classAttr) for cat in renderer.categories(): (styleCode, markerType) = getSymbolAsStyle(cat.symbol(), markerFolder, layer_alpha, sln) style += """ case '%s': return %s break;""" % (cat.value(), styleCode) style += """ } }""" elif isinstance(renderer, QgsGraduatedSymbolRendererV2): classAttr = handleHiddenField(layer, renderer.classAttribute()) style = """ function style_%s(feature) {""" % (sln) for ran in renderer.ranges(): (styleCode, markerType) = getSymbolAsStyle(ran.symbol(), markerFolder, layer_alpha, sln) 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 += """ }""" elif isinstance(renderer, QgsRuleBasedRendererV2): style = """ function style_%s(feature) {""" % (sln) root_rule = renderer.rootRule() rules = root_rule.children() elseif = "if (" elseClause = "" for rule in rules: (styleCode, markerType) = getSymbolAsStyle(rule.symbol(), markerFolder, layer_alpha, sln) if not rule.isElse(): style += elseif style += walkExpression(rule.filter().rootNode(), "Leaflet") style += ") {return %s}" % styleCode elseif = " else if (" else: elseClause += " else {" elseClause += "return " + styleCode elseClause += "}" style += elseClause style += """ }""" else: style = "" return style, markerType