def startConvert(self, layer: QgsMapLayer): layerName = layer.name() nodeCoorDict = OrderedDict() graph = nx.Graph() if layerName: features = layer.getFeatures() count = 0 for feature in features: if count > 10: break geom = feature.geometry() geomSingleType = QgsWkbTypes.isSingleType(geom.wkbType()) if geom.type() == QgsWkbTypes.PolygonGeometry: if geomSingleType: polygon = geom.asPolygon() else: multiPolygon = geom.asMultiPolygon() for polygon in multiPolygon: nodeCoorDict = self.parsePolygon2Network( polygon, nodeCoorDict, graph) count = count + 1 ''' plt.subplot(121) nx.draw(graph, with_labels=True, font_weight='bold') plt.show() ''' return nodeCoorDict
def _set_output_layer_style(layerName: str, layer: QgsMapLayer, alg: QgsProcessingAlgorithm, details: 'QgsProcessingContext::LayerDetails', context: QgsProcessingContext, parameters) -> None: """ Set layer style Original code is from python/plugins/processing/gui/Postprocessing.py """ '''If running a model, the execution will arrive here when an algorithm that is part of that model is executed. We check if its output is a final otuput of the model, and adapt the output name accordingly''' outputName = details.outputName if parameters: expcontext = QgsExpressionContext() scope = QgsExpressionContextScope() expcontext.appendScope(scope) for out in alg.outputDefinitions(): if out.name() not in parameters: continue outValue = parameters[out.name()] if hasattr(outValue, "sink"): outValue = outValue.sink.valueAsString(expcontext)[0] else: outValue = str(outValue) if outValue == layerName: outputName = out.name() break style = None if outputName: # If a style with the same name as the outputName exists # in workdir then use it style = os.path.join(context.workdir, outputName + '.qml') if not os.path.exists(style): style = RenderingStyles.getStyle(alg.id(), outputName) LOGGER.debug("Getting style for %s: %s <%s>", alg.id(), outputName, style) # Get defaults styles if style is None: if layer.type() == QgsMapLayer.RasterLayer: style = ProcessingConfig.getSetting(ProcessingConfig.RASTER_STYLE) else: if layer.geometryType() == QgsWkbTypes.PointGeometry: style = ProcessingConfig.getSetting( ProcessingConfig.VECTOR_POINT_STYLE) elif layer.geometryType() == QgsWkbTypes.LineGeometry: style = ProcessingConfig.getSetting( ProcessingConfig.VECTOR_LINE_STYLE) else: style = ProcessingConfig.getSetting( ProcessingConfig.VECTOR_POLYGON_STYLE) if style: LOGGER.debug("Adding style '%s' to layer %s (outputName %s)", style, details.name, outputName) layer.loadNamedStyle(style) LOGGER.debug("Layer name set to %s <details name: %s>", layer.name(), details.name)
def print_layer_name(self, layer: QgsMapLayer): try: LOGGER.info(tr("Printing layer name"), extra=bar_msg(tr("Layer name is {}", layer.name()))) except: raise QgsPluginException("Error occured", bar_msg("Select layer first!"))
def __init__(self, level: Level, feedback_result: FeedbackResult, layer: QgsMapLayer = None) -> None: self.level = level self.message = feedback_result.message self.layer_id = layer.id() if layer else None self.layer_name = layer.name() if layer else None
def layer_summary(layer_id: str, layer: QgsMapLayer): return dict( id=layer_id, name=layer.name(), source=layer.publicSource(), crs=layer.crs().userFriendlyIdentifier(), valid=layer.isValid(), spatial=layer.isSpatial(), )
def layer_name_source(layer: QgsMapLayer) -> Tuple[str, str]: """ Returns the name and the source path of the layer. :param layer: the layer from which to extract name and source. :type layer: QgsMapLayer. :return: the layer name and source. :rtype: tuple of two strings. Examples: """ return layer.name(), layer.source()
def startConvert(self,layer:QgsMapLayer): layerName = layer.name() nodeCoorDict = OrderedDict() graph = nx.Graph() if layerName: features_forCounts = layer.getFeatures() # type:QgsFeatureIterator # 记录当前处理的polygon id编号 plyId = 0 count = 0 feaNums = sum(1 for _ in features_forCounts) #此时已经迭代过了 features = layer.getFeatures() # type:QgsFeatureIterator pbar = self.dlg.progressBar # type:QProgressBar pbar.setRange(0, feaNums) print(feaNums) for feature in features: #if count >= 10: # break geom = feature.geometry() geomSingleType = QgsWkbTypes.isSingleType(geom.wkbType()) if geom.type() == QgsWkbTypes.PolygonGeometry: if geomSingleType: polygon = geom.asPolygon() nodeCoorDict, graph = self.parsePolygon2Network(polygon, nodeCoorDict, graph, plyId=plyId) plyId = plyId + 1 else: multiPolygon = geom.asMultiPolygon() for polygon in multiPolygon: nodeCoorDict,graph = self.parsePolygon2Network(polygon,nodeCoorDict,graph,plyId=plyId) plyId = plyId + 1 pbar.setValue(count) count = count + 1 #print("complete!") #plt.subplot(121) #print(nodeCoorDict) ''' # 每个节点坐标,绘制带坐标的图 pos = list(nodeCoorDict.values()) #nx.draw(graph,pos, with_labels=True) nx.draw(graph, pos,node_size=20) nx.fruchterman_reingold_layout(graph) plt.show() ''' print('all complete') pbar.setValue(feaNums) return nodeCoorDict,graph,True
def _allowed_layer(lyr: QgsMapLayer) -> bool: return AllowedValue(value=lyr.name(), allowed_type=ALLOWEDVALUETYPE.LAYER)
def add_layer_to_project(layer: QgsMapLayer): project = QgsProject.instance() layer_candidates = project.mapLayersByName(layer.name()) if len(layer_candidates) > 0: project.removeMapLayers(layer_candidates) project.addMapLayer(layer)