def writeVectorLayer(layer, safeLayerName, usedFields, highlight, popupsOnHover, popup, outputProjectFileName, wfsLayers, cluster, visible, json, legends, new_src, canvas, zIndex, restrictToExtent, extent, feedback, labelCode, vtLabels, vtStyles, useMultiStyle, useHeat, useVT, useShapes, useOSMB): vts = layer.customProperty("VectorTilesReader/vector_tile_url") feedback.showFeedback("Writing %s as JSON..." % layer.name()) zIndex = zIndex + 400 markerFolder = os.path.join(outputProjectFileName, "markers") labeltext, vtLabels = getLabels(layer, safeLayerName, outputProjectFileName, vts, vtLabels) labelCode += labeltext (new_pop, popFuncs) = getPopups(layer, safeLayerName, highlight, popupsOnHover, popup, vts) renderer = layer.renderer() layer_transp = 1 - (float(layer.opacity()) / 100) style = "" useMapUnits = False if is25d(layer, canvas, restrictToExtent, extent): useOSMB = True shadows = "" renderer = layer.renderer() renderContext = QgsRenderContext.fromMapSettings(canvas.mapSettings()) fields = layer.fields() renderer.startRender(renderContext, fields) for feat in layer.getFeatures(): if isinstance(renderer, QgsCategorizedSymbolRenderer): classAttribute = renderer.classAttribute() attrValue = feat.attribute(classAttribute) catIndex = renderer.categoryIndexForValue(attrValue) categories = renderer.categories() symbol = categories[catIndex].symbol() elif isinstance(renderer, QgsGraduatedSymbolRenderer): classAttribute = renderer.classAttribute() attrValue = feat.attribute(classAttribute) ranges = renderer.ranges() for range in ranges: if (attrValue >= range.lowerValue() and attrValue <= range.upperValue()): symbol = range.symbol().clone() else: symbol = renderer.symbolForFeature(feat, renderContext) symbolLayer = symbol.symbolLayer(0) if not symbolLayer.paintEffect().effectList()[0].enabled(): shadows = "'2015-07-15 10:00:00'" renderer.stopRender(renderContext) new_obj = """ var osmb = new OSMBuildings(map).date(new Date({shadows})); osmb.set(json_{sln});""".format(shadows=shadows, sln=safeLayerName) elif isinstance(renderer, QgsHeatmapRenderer): useHeat = True new_obj = heatmapLayer(layer, safeLayerName, renderer) elif vts is not None: useVT = True if vts in vtStyles: new_obj = "" addVT = False else: new_obj = VTLayer(vts) vtStyles[vts] = {} addVT = True vtStyle = vtStyles[vts] (style, markerType, useMapUnits, useShapes) = getLayerStyle(layer, safeLayerName, markerFolder, outputProjectFileName, useShapes) style = style.replace("feature.properties['", "feature.['") if layer.name() not in vtStyle: vtStyle[layer.name()] = ["", "", ""] isLayer = False geom = TYPE_MAP[layer.wkbType()].replace("Multi", "") if geom == "Point": index = 0 isLayer = True if geom == "LineString": index = 1 isLayer = True if geom == "Polygon": index = 2 isLayer = True if isLayer: vtStyles[vts][layer.name()][index] = style style = "" else: (style, markerType, useMapUnits, useShapes) = getLayerStyle(layer, safeLayerName, markerFolder, outputProjectFileName, useShapes) (legend, symbol) = getLegend(layer, renderer, outputProjectFileName, safeLayerName) legends[safeLayerName] = legend (new_obj, legends, wfsLayers, useMultiStyle) = getLayer(layer, renderer, safeLayerName, outputProjectFileName, usedFields, legends, cluster, json, wfsLayers, markerType, useMultiStyle, symbol) blend = BLEND_MODES[layer.blendMode()] if vts is None: new_obj = u"""{style} map.createPane('pane_{sln}'); map.getPane('pane_{sln}').style.zIndex = {zIndex}; map.getPane('pane_{sln}').style['mix-blend-mode'] = '{blend}'; {new_obj}""".format(style=style, sln=safeLayerName, zIndex=zIndex, blend=blend, new_obj=new_obj) if usedFields != 0: new_src += new_pop new_src += """ """ + new_obj if is25d(layer, canvas, restrictToExtent, extent): pass elif vts is not None: if addVT: sln = safeName(vts) new_src += """ map.addLayer(layer_""" + sln + """);""" else: new_src += """ bounds_group.addLayer(layer_""" + safeLayerName + """);""" if visible: if cluster is False: new_src += """ map.addLayer(layer_""" + safeLayerName + """);""" else: new_src += """ cluster_""" + safeLayerName + """.addTo(map);""" feedback.completeStep() return (new_src, legends, wfsLayers, labelCode, vtLabels, vtStyles, useMapUnits, useMultiStyle, useHeat, useVT, useShapes, useOSMB)