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 convert2CartoCSS(self, layer): renderer = layer.rendererV2() cartoCSS = '' labelCSS = '' labelSettings = QgsPalLayerSettings() labelSettings.readFromLayer(layer) if labelSettings.enabled: d = { 'layername': '#' + layer.tableName(), 'field': labelSettings.getLabelExpression().dump(), # TODO Get font size 'size': 11, 'color': labelSettings.textColor.name() } filein = open(QgisCartoDB.CartoDBPlugin.PLUGIN_DIR + '/templates/labels.less') labelCSS = Template(filein.read()) labelCSS = labelCSS.substitute(d) # qDebug('Label CSS: ' + labelCSS) # CSS for single symbols if renderer.type() == 'singleSymbol': symbol = renderer.symbol() cartoCSS = self.symbol2CartoCSS(layer, symbol, '#' + layer.tableName()) # CSS for categorized symbols elif renderer.type() == 'categorizedSymbol': # qDebug('Categorized: ' + renderer.classAttribute()) for cat in renderer.categories(): symbol = cat.symbol() # qDebug("%s: %s type: %s" % (str(cat.value()), cat.label(), str(cat.value()))) if cat.value() is not None and cat.value( ) != '' and not isinstance(cat.value(), QPyNullVariant): if isinstance( cat.value(), (int, float, long)) or (isinstance(cat.value(), str) and cat.value().isdecimal()): value = unicode(cat.value()) else: value = unicode('"' + cat.value() + '"') value = str(value.encode('utf8', 'ignore')) # qDebug('Value {}'.format(value)) styleName = '#{}[{}={}]'.format(layer.tableName(), renderer.classAttribute(), value).decode('utf8') cartoCSS = cartoCSS + \ self.symbol2CartoCSS(layer, symbol, styleName) else: cartoCSS = self.symbol2CartoCSS( layer, symbol, '#' + layer.tableName()) + cartoCSS # CSS for graduated symbols elif renderer.type() == 'graduatedSymbol': # qDebug('Graduated') def upperValue(ran): return ran.upperValue() ranges = sorted(renderer.ranges(), key=upperValue, reverse=True) for ran in ranges: symbol = ran.symbol() ''' qDebug("%f - %f: %s" % ( ran.lowerValue(), ran.upperValue(), ran.label() )) ''' cartoCSS = cartoCSS + \ self.symbol2CartoCSS(layer, symbol, '#' + layer.tableName() + '[' + renderer.classAttribute() + '<=' + str(ran.upperValue()) + ']') # qDebug('CartoCSS: ' + cartoCSS) return '/** Styles designed from QGISCartoDB Plugin */\n\n' + cartoCSS + '\n' + labelCSS
def convert2CartoCSS(self, layer): """Convert layer symbology to CartoCSS""" renderer = layer.rendererV2() carto_css = '' label_css = '' label_settings = QgsPalLayerSettings() label_settings.readFromLayer(layer) if label_settings.enabled: d = { 'layername': '#' + layer.tableName(), 'field': label_settings.getLabelExpression().dump(), # TODO Get font size 'size': 11, 'color': label_settings.textColor.name() } filein = open(QgisCartoDB.CartoDBPlugin.PLUGIN_DIR + '/templates/labels.less') label_css = Template(filein.read()) label_css = label_css.substitute(d) # qDebug('Label CSS: ' + label_css) # CSS for single symbols if renderer.type() == 'singleSymbol': symbol = renderer.symbol() carto_css = self.symbol2CartoCSS(layer, symbol, '#' + layer.tableName()) # CSS for categorized symbols elif renderer.type() == 'categorizedSymbol': # qDebug('Categorized: ' + renderer.classAttribute()) for cat in renderer.categories(): symbol = cat.symbol() # qDebug("%s: %s type: %s" % (str(cat.value()), cat.label(), type(cat.value()))) if cat.value() is not None and cat.value() != '' and not isinstance(cat.value(), QPyNullVariant): if isinstance(cat.value(), (int, float, long)) or (isinstance(cat.value(), str) and cat.value().isdecimal()): value = unicode(cat.value()) else: value = unicode('"' + cat.value() + '"') value = str(value.encode('utf8', 'ignore')) # qDebug('Value {}'.format(value)) style_name = '#{}[{}={}]'.format(layer.tableName(), renderer.classAttribute(), value).decode('utf8') carto_css = carto_css + \ self.symbol2CartoCSS(layer, symbol, style_name) else: carto_css = self.symbol2CartoCSS(layer, symbol, '#' + layer.tableName()) + carto_css # CSS for graduated symbols elif renderer.type() == 'graduatedSymbol': # qDebug('Graduated') def upperValue(ran): """Get upper value from range""" return ran.upperValue() ranges = sorted(renderer.ranges(), key=upperValue, reverse=True) for ran in ranges: symbol = ran.symbol() ''' qDebug("%f - %f: %s" % ( ran.lowerValue(), ran.upperValue(), ran.label() )) ''' carto_css = carto_css + \ self.symbol2CartoCSS(layer, symbol, '#' + layer.tableName() + \ '[' + renderer.classAttribute() + '<=' + str(ran.upperValue()) + ']') return '/** Styles designed from QGISCartoDB Plugin */\n\n' + carto_css + '\n' + label_css
def getLabels(layer, safeLayerName, outputProjectFileName, vts, vtLabels): 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: 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 = "" return labeltext, vtLabels