コード例 #1
0
def categorized(defs, sln, layer, renderer, legendFolder, stylesFolder,
                layer_alpha):
    cluster = False
    defs += """
function categories_%s(feature, value, size, resolution, labelText,
                       labelFont, labelFill) {
                switch(value.toString()) {""" % sln
    cats = []
    useAnyMapUnits = False
    for cnt, cat in enumerate(renderer.categories()):
        legendIcon = QgsSymbolLayerV2Utils.symbolPreviewPixmap(
            cat.symbol(), QSize(16, 16))
        legendIcon.save(
            os.path.join(legendFolder, sln + "_" + unicode(cnt) + ".png"))
        if (cat.value() is not None and cat.value() != ""
                and not isinstance(cat.value(), QPyNullVariant)):
            categoryStr = "case '%s':" % unicode(cat.value()).replace(
                "'", "\\'")
        else:
            categoryStr = "default:"
        (style, pattern, setPattern,
         useMapUnits) = (getSymbolAsStyle(cat.symbol(), stylesFolder,
                                          layer_alpha, renderer, sln, layer))
        if useMapUnits:
            useAnyMapUnits = True
        categoryStr += '''
                    return %s;
                    break;''' % style
        cats.append(categoryStr)
    defs += "\n".join(cats) + "}};"
    style = """
var style = categories_%s(feature, value, size, resolution, labelText,
                          labelFont, labelFill)""" % sln
    value = getValue(layer, renderer)
    return (style, pattern, setPattern, value, defs, useAnyMapUnits)
コード例 #2
0
def singleSymbol(renderer, stylesFolder, layer_alpha, sln, legendFolder):
    symbol = renderer.symbol()
    (style, pattern, setPattern) = getSymbolAsStyle(symbol, stylesFolder,
                                                    layer_alpha, renderer, sln)
    style = "var style = " + style
    legendIcon = QgsSymbolLayerV2Utils.symbolPreviewPixmap(
        symbol, QSize(16, 16))
    legendIcon.save(os.path.join(legendFolder, sln + ".png"))
    value = 'var value = ""'
    return (style, pattern, setPattern, value)
コード例 #3
0
def iconLegend(symbol, catr, outputProjectFileName, layerName, catLegend, cnt):
    try:
        iconSize = (symbol.size() * 4) + 5
    except:
        iconSize = 16
    legendIcon = QgsSymbolLayerV2Utils.symbolPreviewPixmap(symbol,
                                                           QSize(iconSize,
                                                                 iconSize))
    safeLabel = re.sub('[\W_]+', '', catr.label()) + unicode(cnt)
    legendIcon.save(os.path.join(outputProjectFileName, "legend",
                                 layerName + "_" + safeLabel + ".png"))
    catLegend += """<tr><td style="text-align: center;"><img src="legend/"""
    catLegend += layerName + "_" + safeLabel + """.png" /></td><td>"""
    catLegend += catr.label().replace("'", "\\'") + "</td></tr>"
    return catLegend
コード例 #4
0
def singleLayer(renderer, outputProjectFileName, safeLayerName, wfsLayers,
                layer, labeltext, cluster, json, usedFields, legends,
                markerType):
    symbol = renderer.symbol()
    legendIcon = QgsSymbolLayerV2Utils.symbolPreviewPixmap(
        symbol, QSize(16, 16))
    legendIcon.save(
        os.path.join(outputProjectFileName, "legend", safeLayerName + ".png"))
    legends[safeLayerName] = '<img src="legend/' + safeLayerName + '.png" /> '
    legends[safeLayerName] += layer.name()
    if layer.geometryType() == QGis.Point:
        (new_obj, wfsLayers) = pointLayer(layer, safeLayerName, labeltext,
                                          cluster, usedFields, json, wfsLayers,
                                          markerType, renderer.symbol())
    else:
        new_obj, wfsLayers = nonPointLayer(layer, safeLayerName, usedFields,
                                           json, wfsLayers)
    return new_obj, legends, wfsLayers
コード例 #5
0
def graduated(layer, renderer, legendFolder, sln, stylesFolder, layer_alpha):
    cluster = False
    ranges = []
    elseif = ""
    for cnt, ran in enumerate(renderer.ranges()):
        legendIcon = QgsSymbolLayerV2Utils.symbolPreviewPixmap(
            ran.symbol(), QSize(16, 16))
        legendIcon.save(
            os.path.join(legendFolder, sln + "_" + unicode(cnt) + ".png"))
        (symbolstyle, pattern,
         setPattern) = getSymbolAsStyle(ran.symbol(), stylesFolder,
                                        layer_alpha, renderer, sln)
        ranges.append(
            """%sif (value > %f && value <= %f) {
            style = %s
                    }""" %
            (elseif, ran.lowerValue(), ran.upperValue(), symbolstyle))
        elseif = " else "
    style = "".join(ranges)
    value = getValue(layer, renderer)
    return (style, pattern, setPattern, value)
コード例 #6
0
ファイル: olStyleScripts.py プロジェクト: arjan22/qgis2web
def exportStyles(layers, folder, clustered):
    stylesFolder = os.path.join(folder, "styles")
    QDir().mkpath(stylesFolder)
    legendFolder = os.path.join(stylesFolder, "legend")
    QDir().mkpath(legendFolder)
    for count, (layer, cluster) in enumerate(zip(layers, clustered)):
        sln = safeName(layer.name()) + unicode(count)
        if layer.type() != layer.VectorLayer:
            continue
        labelsEnabled = unicode(
            layer.customProperty("labeling/enabled")).lower() == "true"
        if (labelsEnabled):
            labelField = layer.customProperty("labeling/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.pendingFields().indexFromName(
                        labelField)
                    editFormConfig = layer.editFormConfig()
                    editorWidget = editFormConfig.widgetType(fieldIndex)
                    if (editorWidget == QgsVectorLayer.Hidden
                            or editorWidget == 'Hidden'):
                        labelField = "q2wHide_" + labelField
                    labelText = ('feature.get("%s")' %
                                 labelField.replace('"', '\\"'))
            else:
                labelText = '""'
        else:
            labelText = '""'
        defs = "var size = 0;\n"
        try:
            renderer = layer.rendererV2()
            layer_alpha = layer.layerTransparency()
            if isinstance(renderer, QgsSingleSymbolRendererV2):
                symbol = renderer.symbol()
                style = "var style = " + getSymbolAsStyle(
                    symbol, stylesFolder, layer_alpha, renderer)
                legendIcon = QgsSymbolLayerV2Utils.symbolPreviewPixmap(
                    symbol, QSize(16, 16))
                legendIcon.save(os.path.join(legendFolder, sln + ".png"))
                value = 'var value = ""'
            elif isinstance(renderer, QgsCategorizedSymbolRendererV2):
                cluster = False
                defs += """function categories_%s(feature, value, size) {
                switch(value.toString()) {""" % sln
                cats = []
                for cnt, cat in enumerate(renderer.categories()):
                    legendIcon = QgsSymbolLayerV2Utils.symbolPreviewPixmap(
                        cat.symbol(), QSize(16, 16))
                    legendIcon.save(
                        os.path.join(legendFolder,
                                     sln + "_" + unicode(cnt) + ".png"))
                    if (cat.value() is not None and cat.value() != ""
                            and not isinstance(cat.value(), QPyNullVariant)):
                        categoryStr = "case '%s':" % unicode(
                            cat.value()).replace("'", "\\'")
                    else:
                        categoryStr = "default:"
                    categoryStr += '''
                    return %s;
                    break;''' % (getSymbolAsStyle(cat.symbol(), stylesFolder,
                                                  layer_alpha, renderer))
                    cats.append(categoryStr)
                defs += "\n".join(cats) + "}};"
                classAttr = renderer.classAttribute()
                fieldIndex = layer.pendingFields().indexFromName(classAttr)
                editFormConfig = layer.editFormConfig()
                editorWidget = editFormConfig.widgetType(fieldIndex)
                if (editorWidget == QgsVectorLayer.Hidden
                        or editorWidget == 'Hidden'):
                    classAttr = "q2wHide_" + classAttr
                value = ('var value = feature.get("%s");' % classAttr)
                style = ('var style = categories_%s(feature, value, size)' %
                         sln)
            elif isinstance(renderer, QgsGraduatedSymbolRendererV2):
                cluster = False
                varName = "ranges_" + sln
                defs += "var %s = [" % varName
                ranges = []
                for cnt, ran in enumerate(renderer.ranges()):
                    legendIcon = QgsSymbolLayerV2Utils.symbolPreviewPixmap(
                        ran.symbol(), QSize(16, 16))
                    legendIcon.save(
                        os.path.join(legendFolder,
                                     sln + "_" + unicode(cnt) + ".png"))
                    symbolstyle = getSymbolAsStyle(ran.symbol(), stylesFolder,
                                                   layer_alpha, renderer)
                    ranges.append(
                        '[%f, %f, %s]' %
                        (ran.lowerValue(), ran.upperValue(), symbolstyle))
                defs += ",\n".join(ranges) + "];"
                classAttr = renderer.classAttribute()
                fieldIndex = layer.pendingFields().indexFromName(classAttr)
                editFormConfig = layer.editFormConfig()
                editorWidget = editFormConfig.widgetType(fieldIndex)
                if (editorWidget == QgsVectorLayer.Hidden
                        or editorWidget == 'Hidden'):
                    classAttr = "q2wHide_" + classAttr
                value = ('var value = feature.get("%s");' % classAttr)
                style = '''var style = %(v)s[0][2];
    for (i = 0; i < %(v)s.length; i++){
        var range = %(v)s[i];
        if (value > range[0] && value<=range[1]){
            style =  range[2];
        }
    }''' % {
                    "v": varName
                }
            elif isinstance(renderer, QgsRuleBasedRendererV2):
                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"
                for count, rule in enumerate(rules):
                    symbol = rule.symbol()
                    styleCode = getSymbolAsStyle(symbol, stylesFolder,
                                                 layer_alpha, renderer)
                    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"
                value = ("var value = '';")
                style = template % (sln, js, elsejs, sln)
            else:
                style = ""
            if layer.customProperty("labeling/fontSize"):
                size = float(layer.customProperty("labeling/fontSize")) * 1.3
            else:
                size = 10
            italic = layer.customProperty("labeling/fontItalic")
            bold = layer.customProperty("labeling/fontWeight")
            r = layer.customProperty("labeling/textColorR")
            g = layer.customProperty("labeling/textColorG")
            b = layer.customProperty("labeling/textColorB")
            if (r or g or b) is None:
                color = "rgba(0, 0, 0, 1)"
            else:
                color = "rgba(%s, %s, %s, 1)" % (r, g, b)
            face = layer.customProperty("labeling/fontFamily")
            if face is None:
                face = ","
            else:
                face = " \\'%s\\'," % face
            palyr = QgsPalLayerSettings()
            palyr.readFromLayer(layer)
            sv = palyr.scaleVisibility
            if sv:
                min = float(palyr.scaleMin)
                max = float(palyr.scaleMax)
                if min != 0:
                    min = 1 / ((1 / min) * 39.37 * 90.7)
                max = 1 / ((1 / max) * 39.37 * 90.7)
                labelRes = " && resolution > %(min)d " % {"min": min}
                labelRes += "&& resolution < %(max)d" % {"max": max}
            else:
                labelRes = ""
            buffer = palyr.bufferDraw
            if buffer:
                bufferColor = palyr.bufferColor.name()
                bufferWidth = palyr.bufferSize
                stroke = """
              stroke: new ol.style.Stroke({
                color: "%s",
                width: %d
              }),""" % (bufferColor, bufferWidth)
            else:
                stroke = ""
            if style != "":
                style = getStyle(style, cluster, labelRes, labelText, sln,
                                 size, face, color, value)
            else:
                style = "''"
        except Exception, e:
            style = """{
            /* """ + traceback.format_exc() + " */}"
            QgsMessageLog.logMessage(traceback.format_exc(),
                                     "qgis2web",
                                     level=QgsMessageLog.CRITICAL)

        path = os.path.join(stylesFolder, sln + "_style.js")

        with codecs.open(path, "w", "utf-8") as f:
            f.write('''%(defs)s
var styleCache_%(name)s={}
var style_%(name)s = %(style)s;''' % {
                "defs": defs,
                "name": sln,
                "style": style
            })