当前位置: 首页>>代码示例>>Python>>正文


Python QgsFields.toList方法代码示例

本文整理汇总了Python中qgis.core.QgsFields.toList方法的典型用法代码示例。如果您正苦于以下问题:Python QgsFields.toList方法的具体用法?Python QgsFields.toList怎么用?Python QgsFields.toList使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在qgis.core.QgsFields的用法示例。


在下文中一共展示了QgsFields.toList方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: processAlgorithm

# 需要导入模块: from qgis.core import QgsFields [as 别名]
# 或者: from qgis.core.QgsFields import toList [as 别名]
    def processAlgorithm(self, progress):
        layer = dataobjects.getObjectFromUri(self.getParameterValue(self.INPUT_VECTOR))

        rasterPath = unicode(self.getParameterValue(self.INPUT_RASTER))

        rasterDS = gdal.Open(rasterPath, gdal.GA_ReadOnly)
        geoTransform = rasterDS.GetGeoTransform()
        rasterDS = None

        fields = QgsFields()
        fields.append(QgsField('id', QVariant.Int, '', 10, 0))
        fields.append(QgsField('line_id', QVariant.Int, '', 10, 0))
        fields.append(QgsField('point_id', QVariant.Int, '', 10, 0))

        writer = self.getOutputFromName(self.OUTPUT_LAYER).getVectorWriter(
            fields.toList(), QgsWkbTypes.Point, layer.crs())

        outFeature = QgsFeature()
        outFeature.setFields(fields)

        self.fid = 0
        self.lineId = 0
        self.pointId = 0

        features = vector.features(layer)
        total = 100.0 / len(features)
        for current, f in enumerate(features):
            geom = f.geometry()
            if geom.isMultipart():
                lines = geom.asMultiPolyline()
                for line in lines:
                    for i in xrange(len(line) - 1):
                        p1 = line[i]
                        p2 = line[i + 1]

                        (x1, y1) = raster.mapToPixel(p1.x(), p1.y(),
                                                     geoTransform)
                        (x2, y2) = raster.mapToPixel(p2.x(), p2.y(),
                                                     geoTransform)

                        self.buildLine(x1, y1, x2, y2, geoTransform,
                                       writer, outFeature)
            else:
                points = geom.asPolyline()
                for i in xrange(len(points) - 1):
                    p1 = points[i]
                    p2 = points[i + 1]

                    (x1, y1) = raster.mapToPixel(p1.x(), p1.y(), geoTransform)
                    (x2, y2) = raster.mapToPixel(p2.x(), p2.y(), geoTransform)

                    self.buildLine(x1, y1, x2, y2, geoTransform, writer,
                                   outFeature)

            self.pointId = 0
            self.lineId += 1

            progress.setPercentage(int(current * total))

        del writer
开发者ID:NyakudyaA,项目名称:QGIS,代码行数:62,代码来源:PointsFromLines.py

示例2: processAlgorithm

# 需要导入模块: from qgis.core import QgsFields [as 别名]
# 或者: from qgis.core.QgsFields import toList [as 别名]
    def processAlgorithm(self, progress):
        m = self.get_mesh(self.IN_CF_MESH)

        fld = QgsField("elem_id", QVariant.Int)
        fields = QgsFields()
        fields.append(fld)
        geomType = QGis.WKBPolygon
        writer = self.getOutputFromName(self.OUT_CF_SHP).getVectorWriter(fields.toList(), geomType, None)

        for elem in m.elements():
            if elem.is_valid():    # at least 2 nodes
                f = QgsFeature()
                f.setFields(fields)
                f.setGeometry(geom(elem, m))
                f[0] = elem.e_id()
                writer.addFeature(f)
开发者ID:aaschwanden,项目名称:qgis-crayfish-plugin,代码行数:18,代码来源:cf_export_elems.py

示例3: processAlgorithm

# 需要导入模块: from qgis.core import QgsFields [as 别名]
# 或者: from qgis.core.QgsFields import toList [as 别名]
    def processAlgorithm(self, progress):
        m = self.get_mesh(self.IN_CF_MESH)
        o = self.get_bed_elevation(m)

        fldId = QgsField("node_id", QVariant.Int)
        fldVal = QgsField("value", QVariant.Double)
        fields = QgsFields()
        fields.append(fldId)
        fields.append(fldVal)
        geomType = QGis.WKBPoint
        writer = self.getOutputFromName(self.OUT_CF_SHP).getVectorWriter(fields.toList(), geomType, None)

        for index, n in enumerate(m.nodes()):
            f = QgsFeature()
            f.setFields(fields)
            f.setGeometry(QgsGeometry.fromPoint(QgsPoint(n.x(), n.y())))
            f[0] = n.n_id()
            f[1] = o.value(index)
            writer.addFeature(f)
开发者ID:aaschwanden,项目名称:qgis-crayfish-plugin,代码行数:21,代码来源:cf_export_nodes.py

示例4: makePoints

# 需要导入模块: from qgis.core import QgsFields [as 别名]
# 或者: from qgis.core.QgsFields import toList [as 别名]
def makePoints(layer):
    authId = layer.crs().authid()
    nodes = QgsVectorLayer(
        'Point?crs={}'.format(authId), 'network_nodes', 'memory')

    fields = QgsFields()
    fields.append(QgsField('id', QVariant.Int, '', 10))
    fields.append(QgsField('downNodeId', QVariant.Int, '', 10))
    fields.append(QgsField('upNodeId', QVariant.Int, '', 10))

    provider = nodes.dataProvider()
    provider.addAttributes(fields.toList())
    nodes.updateFields()

    idx = 0
    points = []
    ft = QgsFeature()
    ft.setFields(fields)

    for f in layer.getFeatures():
        arc = f.geometry().asPolyline()
        if arc[0] not in points:
            ft.setGeometry(QgsGeometry.fromPoint(arc[0]))
            ft['id'] = idx
            provider.addFeatures([ft])
            points.append(arc[0])
            idx += 1

        if arc[-1] not in points:
            ft.setGeometry(QgsGeometry.fromPoint(arc[-1]))
            ft['id'] = idx
            provider.addFeatures([ft])
            points.append(arc[-1])
            idx += 1

    return nodes
开发者ID:faunalia,项目名称:QGeomorf,代码行数:38,代码来源:tools.py

示例5: processAlgorithm

# 需要导入模块: from qgis.core import QgsFields [as 别名]
# 或者: from qgis.core.QgsFields import toList [as 别名]
    def processAlgorithm(self, progress):
        layer = dataobjects.getObjectFromUri(self.getParameterValue(self.INPUT_VECTOR))

        rasterPath = str(self.getParameterValue(self.INPUT_RASTER))

        rasterDS = gdal.Open(rasterPath, gdal.GA_ReadOnly)
        geoTransform = rasterDS.GetGeoTransform()
        rasterDS = None

        fields = QgsFields()
        fields.append(QgsField('id', QVariant.Int, '', 10, 0))
        fields.append(QgsField('poly_id', QVariant.Int, '', 10, 0))
        fields.append(QgsField('point_id', QVariant.Int, '', 10, 0))

        writer = self.getOutputFromName(self.OUTPUT_LAYER).getVectorWriter(
            fields.toList(), QgsWkbTypes.Point, layer.crs())

        outFeature = QgsFeature()
        outFeature.setFields(fields)

        fid = 0
        polyId = 0
        pointId = 0

        features = vector.features(layer)
        total = 100.0 / len(features)
        for current, f in enumerate(features):
            geom = f.geometry()
            bbox = geom.boundingBox()

            xMin = bbox.xMinimum()
            xMax = bbox.xMaximum()
            yMin = bbox.yMinimum()
            yMax = bbox.yMaximum()

            (startRow, startColumn) = raster.mapToPixel(xMin, yMax, geoTransform)
            (endRow, endColumn) = raster.mapToPixel(xMax, yMin, geoTransform)

            # use prepared geometries for faster intersection tests
            engine = QgsGeometry.createGeometryEngine(geom.geometry())
            engine.prepareGeometry()

            for row in range(startRow, endRow + 1):
                for col in range(startColumn, endColumn + 1):
                    (x, y) = raster.pixelToMap(row, col, geoTransform)
                    point = QgsPointV2()
                    point.setX(x)
                    point.setY(y)

                    if engine.contains(point):
                        outFeature.setGeometry(QgsGeometry(point))
                        outFeature['id'] = fid
                        outFeature['poly_id'] = polyId
                        outFeature['point_id'] = pointId

                        fid += 1
                        pointId += 1

                        writer.addFeature(outFeature)

            pointId = 0
            polyId += 1

            progress.setPercentage(int(current * total))

        del writer
开发者ID:spono,项目名称:QGIS,代码行数:68,代码来源:PointsFromPolygons.py

示例6: processAlgorithm

# 需要导入模块: from qgis.core import QgsFields [as 别名]
# 或者: from qgis.core.QgsFields import toList [as 别名]
    def processAlgorithm(self, progress):
        inLayers = self.getParameterValue(self.LAYERS)
        paths = inLayers.split(";")

        layers = []
        fields = QgsFields()
        totalFeatureCount = 0
        for x in range(len(paths)):
            layer = QgsVectorLayer(paths[x], str(x), "ogr")

            if len(layers) > 0:
                if layer.wkbType() != layers[0].wkbType():
                    raise GeoAlgorithmExecutionException(self.tr("All layers must have same geometry type!"))

            layers.append(layer)
            totalFeatureCount += layer.featureCount()

            for sindex, sfield in enumerate(layer.fields()):
                found = None
                for dfield in fields:
                    if dfield.name().upper() == sfield.name().upper():
                        found = dfield
                        if dfield.type() != sfield.type():
                            raise GeoAlgorithmExecutionException(
                                self.tr("{} field in layer {} has different " "data type than in other layers.")
                            )

                if not found:
                    fields.append(sfield)

        total = 100.0 / totalFeatureCount
        writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
            fields.toList(), layers[0].wkbType(), layers[0].crs()
        )

        featureCount = 0
        for layer in layers:
            for feature in layer.getFeatures():
                sattributes = feature.attributes()
                dattributes = []
                for dindex, dfield in enumerate(fields):
                    if (dfield.type() == QVariant.Int, QVariant.UInt, QVariant.LongLong, QVariant.ULongLong):
                        dattribute = 0
                    elif dfield.type() == QVariant.Double:
                        dattribute = 0.0
                    else:
                        dattribute = ""

                    for sindex, sfield in enumerate(layer.fields()):
                        if sfield.name().upper() == dfield.name().upper():
                            if sfield.type() != dfield.type():
                                raise GeoAlgorithmExecutionException(self.tr("Attribute type mismatch"))
                            dattribute = sattributes[sindex]
                            break

                    dattributes.append(dattribute)

                feature.setAttributes(dattributes)
                writer.addFeature(feature)
                featureCount += 1
                progress.setPercentage(int(featureCount * total))

        del writer
开发者ID:spono,项目名称:QGIS,代码行数:65,代码来源:Merge.py

示例7: doLayer

# 需要导入模块: from qgis.core import QgsFields [as 别名]
# 或者: from qgis.core.QgsFields import toList [as 别名]
    def doLayer(self, item):
        ogrFeature = item.data(Qt.UserRole)
        geom = QgsGeometry.fromWkt(ogrFeature.GetGeometryRef().ExportToWkt())

        fields = QgsFields()
        fields.append(QgsField("id", QVariant.String))
        fields.append(QgsField("name",  QVariant.String))
        fet = QgsFeature()
        fet.initAttributes(2)
        fet.setFields(fields)
        fet.setGeometry(geom)
        fet.setAttribute("id", (ogrFeature.GetFieldAsString('id')))
        fet.setAttribute("name", (ogrFeature.GetFieldAsString('name')))

        vl = None
        if not self.plugin.singleLayer:
            if geom.type() == QgsWkbTypes.PolygonGeometry:
                layerName = "OSMPlaceSearch Polygon"
                layerId = self.MultiPolygonLayerId
            if geom.type() == QgsWkbTypes.LineGeometry:
                layerName = "OSMPlaceSearch Line"
                layerId = self.LineLayerId
            if geom.type() == QgsWkbTypes.PointGeometry:
                layerName = "OSMPlaceSearch Point"
                layerId = self.PointLayerId

            vl = QgsProject.instance().mapLayer(layerId)
            if vl is not None:
                pr = vl.dataProvider()
            else:
                if geom.type() == QgsWkbTypes.PolygonGeometry:
                    vl = QgsVectorLayer("MultiPolygon", layerName, "memory")
                    self.MultiPolygonLayerId = vl.id()
                if geom.type() == QgsWkbTypes.LineGeometry:
                    vl = QgsVectorLayer("MultiLineString", layerName, "memory")
                    self.LineLayerId = vl.id()
                if geom.type() == QgsWkbTypes.PointGeometry:
                    vl = QgsVectorLayer("Point", layerName, "memory")
                    self.PointLayerId = vl.id()

                if vl is not None:
                    pr = vl.dataProvider()
                    # ajout de champs
                    pr.addAttributes(fields.toList())

                QgsProject.instance().addMapLayer(vl)
        else:
            layerName = "OSM "+ogrFeature.GetFieldAsString('id')

            # creer une nouvelle couche si n'existe pas encore
            if geom.type() == QgsWkbTypes.PolygonGeometry:
                vl = QgsVectorLayer("MultiPolygon", layerName, "memory")
            if geom.type() == QgsWkbTypes.LineGeometry:
                vl = QgsVectorLayer("MultiLineString", layerName, "memory")
            if geom.type() == QgsWkbTypes.PointGeometry:
                vl = QgsVectorLayer("Point", layerName, "memory")

            if vl is not None:
                pr = vl.dataProvider()
                # ajout de champs
                pr.addAttributes(fields.toList())

            QgsProject.instance().addMapLayer(vl)

        if vl is not None:
            vl.setProviderEncoding('UTF-8')
            vl.startEditing()
            pr.addFeatures([fet])
            vl.commitChanges()

            # mise a jour etendue de la couche
            vl.updateExtents()

            layerTree = QgsProject.instance().layerTreeRoot().findLayer(vl)
            if layerTree:
                self.plugin.iface.layerTreeView()\
                    .layerTreeModel().refreshLayerLegend(layerTree)  # Refresh legend

            self.go(item, False)
开发者ID:xcaeag,项目名称:Nominatim-Qgis-Plugin,代码行数:81,代码来源:nominatim_dlg.py

示例8: doMask

# 需要导入模块: from qgis.core import QgsFields [as 别名]
# 或者: from qgis.core.QgsFields import toList [as 别名]
    def doMask(self, item):
        mapcrs = self.plugin.canvas.mapSettings().destinationCrs()

        ogrFeature = item.data(Qt.UserRole)
        layerName = "OSM "+ogrFeature.GetFieldAsString('id')
        geom = QgsGeometry.fromWkt(ogrFeature.GetGeometryRef().ExportToWkt())
        if (geom.type() == QgsWkbTypes.PolygonGeometry):
            try:
                try:
                    from mask import aeag_mask
                except:
                    from mask_plugin import aeag_mask

                aeag_mask.do(mapcrs, {geom}, "Mask "+layerName)

            except:
                geom = QgsGeometry.fromWkt(ogrFeature.GetGeometryRef().ExportToWkt())
                toCrs = self.plugin.canvas.mapSettings().destinationCrs()

                l = max(geom.boundingBox().width(), geom.boundingBox().height())
                x = geom.boundingBox().center().x()
                y = geom.boundingBox().center().y()
                rect = QgsRectangle(x-l, y-l, x+l, y+l)  # geom.boundingBox()
                rect.scale(4)
                mask = QgsGeometry.fromRect(rect)

                mask = mask.difference(geom)

                maskLayer = QgsVectorLayer("MultiPolygon", "Mask "+layerName, "memory")
                maskLayer.setCrs(toCrs)
                QgsProject.instance().addMapLayer(maskLayer)
                pr = maskLayer.dataProvider()

                fields = QgsFields()
                fields.append(QgsField("id", QVariant.String))
                fields.append(QgsField("name",  QVariant.String))
                fet = QgsFeature()
                fet.initAttributes(2)
                fet.setGeometry(mask)
                fet.setFields(fields)
                fet.setAttribute("id", (ogrFeature.GetFieldAsString('id')))
                fet.setAttribute("name", (ogrFeature.GetFieldAsString('name')))

                pr.addAttributes(fields.toList())

                maskLayer.startEditing()
                pr.addFeatures([fet])
                maskLayer.commitChanges()
                maskLayer.updateExtents()

                # transparence, epaisseur
                renderer = maskLayer.renderer()
                s = renderer.symbol()
                s.setOpacity(0.90)
                s.setColor(QColor(255, 255, 255))
                if isinstance(s, QgsLineSymbol):
                    s.setWidth(0)

                layerTree = QgsProject.instance().layerTreeRoot().findLayer(maskLayer)
                if layerTree:
                    self.plugin.iface.layerTreeView().layerTreeModel()\
                        .refreshLayerLegend(layerTree)  # Refresh legend

            self.go(item)
开发者ID:xcaeag,项目名称:Nominatim-Qgis-Plugin,代码行数:66,代码来源:nominatim_dlg.py

示例9: processAlgorithm

# 需要导入模块: from qgis.core import QgsFields [as 别名]
# 或者: from qgis.core.QgsFields import toList [as 别名]
    def processAlgorithm(self, feedback):
        inLayers = self.getParameterValue(self.LAYERS)

        layers = []
        fields = QgsFields()
        totalFeatureCount = 0
        for layerSource in inLayers.split(';'):
            layer = dataobjects.getObjectFromUri(layerSource)

            if (len(layers) > 0):
                if (layer.wkbType() != layers[0].wkbType()):
                    raise GeoAlgorithmExecutionException(
                        self.tr('All layers must have same geometry type!'))

            layers.append(layer)
            totalFeatureCount += layer.featureCount()

            for sindex, sfield in enumerate(layer.fields()):
                found = None
                for dfield in fields:
                    if (dfield.name().upper() == sfield.name().upper()):
                        found = dfield
                        if (dfield.type() != sfield.type()):
                            raise GeoAlgorithmExecutionException(
                                self.tr('{} field in layer {} has different '
                                        'data type than in other layers.'))

                if not found:
                    fields.append(sfield)

        total = 100.0 / totalFeatureCount
        writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
            fields.toList(), layers[0].wkbType(),
            layers[0].crs())

        featureCount = 0
        for layer in layers:
            for feature in layer.getFeatures():
                sattributes = feature.attributes()
                dattributes = []
                for dindex, dfield in enumerate(fields):
                    if (dfield.type() == QVariant.Int, QVariant.UInt, QVariant.LongLong, QVariant.ULongLong):
                        dattribute = 0
                    elif (dfield.type() == QVariant.Double):
                        dattribute = 0.0
                    else:
                        dattribute = ''

                    for sindex, sfield in enumerate(layer.fields()):
                        if (sfield.name().upper() == dfield.name().upper()):
                            if (sfield.type() != dfield.type()):
                                raise GeoAlgorithmExecutionException(
                                    self.tr('Attribute type mismatch'))
                            dattribute = sattributes[sindex]
                            break

                    dattributes.append(dattribute)

                feature.setAttributes(dattributes)
                writer.addFeature(feature)
                featureCount += 1
                feedback.setProgress(int(featureCount * total))

        del writer
开发者ID:wongjimsan,项目名称:QGIS,代码行数:66,代码来源:Merge.py

示例10: processAlgorithm

# 需要导入模块: from qgis.core import QgsFields [as 别名]
# 或者: from qgis.core.QgsFields import toList [as 别名]
    def processAlgorithm(self, progress):
        inLayers = self.getParameterValue(self.LAYERS)
        paths = inLayers.split(';')

        layers = []
        fields = QgsFields()
        totalFeatureCount = 0
        for x in xrange(0, len(paths)):
            layer = QgsVectorLayer(paths[x], unicode(x), 'ogr')

            if (len(layers) > 0):
                if (layer.dataProvider().geometryType() != layers[0].dataProvider().geometryType()):
                    raise GeoAlgorithmExecutionException(
                        self.tr('All layers must have same geometry type!'))

            layers.append(layer)
            totalFeatureCount += layer.featureCount()

            for sindex, sfield in enumerate(layer.dataProvider().fields()):
                found = None
                for dfield in fields:
                    if (dfield.name().upper() == sfield.name().upper()):
                        found = dfield
                        if (dfield.type() != sfield.type()):
                            raise GeoAlgorithmExecutionException(
                                self.tr('{} field in layer {} has different '
                                        'data type than in other layers.'))

                if not found:
                    fields.append(sfield)

        total = 100.0 / float(totalFeatureCount)
        writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
            fields.toList(), layers[0].dataProvider().geometryType(),
            layers[0].crs())

        featureCount = 0
        for layer in layers:
            for feature in layer.dataProvider().getFeatures():
                sattributes = feature.attributes()
                dattributes = []
                for dindex, dfield in enumerate(fields):
                    if (dfield.type() == QVariant.Int):
                        dattribute = 0
                    elif (dfield.type() == QVariant.Double):
                        dattribute = 0.0
                    else:
                        dattribute = ''

                    for sindex, sfield in enumerate(layer.dataProvider().fields()):
                        if (sfield.name().upper() == dfield.name().upper()):
                            if (sfield.type() != dfield.type()):
                                raise GeoAlgorithmExecutionException(
                                    self.tr('Attribute type mismatch'))
                            dattribute = sattributes[sindex]
                            break

                    dattributes.append(dattribute)

                feature.setAttributes(dattributes)
                writer.addFeature(feature)
                featureCount += 1
                progress.setPercentage(int(featureCount * total))

        del writer
开发者ID:avautour,项目名称:QGIS,代码行数:67,代码来源:Merge.py


注:本文中的qgis.core.QgsFields.toList方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。