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
Exemple #2
0
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)
Exemple #3
0
    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!"))
Exemple #4
0
 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
Exemple #5
0
 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(),
     )
Exemple #6
0
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()
Exemple #7
0
    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
Exemple #8
0
 def _allowed_layer(lyr: QgsMapLayer) -> bool:
     return AllowedValue(value=lyr.name(),
                         allowed_type=ALLOWEDVALUETYPE.LAYER)
Exemple #9
0
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)