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


Python FToolsUtils.extractPoints方法代码示例

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


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

示例1: processAlgorithm

# 需要导入模块: from sextante.algs.ftools import FToolsUtils [as 别名]
# 或者: from sextante.algs.ftools.FToolsUtils import extractPoints [as 别名]
    def processAlgorithm(self, progress):
        layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.POINTS))
        weightField = self.getParameterValue(self.WEIGHT)
        uniqueField = self.getParameterValue(self.UID)

        weightIndex = layer.fieldNameIndex(weightField)
        uniqueIndex = layer.fieldNameIndex(uniqueField)

        fieldList = [QgsField("MEAN_X", QVariant.Double, "", 24, 15),
                     QgsField("MEAN_Y", QVariant.Double, "", 24, 15),
                     QgsField("UID", QVariant.String, "", 255)
                    ]

        writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fieldList,
                     QGis.WKBPoint, layer.crs())

        current = 0
        features = QGisLayers.features(layer)
        total = 100.0 / float(len(features))

        means = {}
        for feat in features:
            current += 1
            progress.setPercentage(current * total)
            clazz = str(feat.attributes()[uniqueIndex]).strip()
            if weightIndex == -1:
                weight = 1.00
            else:
                try:
                    weight = float(feat.attributes()[weightIndex])
                except:
                    weight = 1.00
            if clazz not in means:
                means[clazz] = (0,0,0)

            cx,cy, totalweight = means[clazz]
            geom = QgsGeometry(feat.geometry())
            geom = utils.extractPoints(geom)
            for i in geom:
                cx += i.x() * weight
                cy += i.y() * weight
                totalweight += weight
            means[clazz] = (cx, cy, totalweight)

        for clazz, values in means.iteritems():
            outFeat = QgsFeature()
            cx = values[0] / values[2]
            cy = values[1] / values[2]
            meanPoint = QgsPoint(cx, cy)

            outFeat.setGeometry(QgsGeometry.fromPoint(meanPoint))
            outFeat.setAttributes([cx, cy, clazz])
            writer.addFeature(outFeat)


        del writer
开发者ID:Adam-Brown,项目名称:Quantum-GIS,代码行数:58,代码来源:MeanCoords.py

示例2: processAlgorithm

# 需要导入模块: from sextante.algs.ftools import FToolsUtils [as 别名]
# 或者: from sextante.algs.ftools.FToolsUtils import extractPoints [as 别名]
    def processAlgorithm(self, progress):
        layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.POINTS))
        weightField = self.getParameterValue(self.WEIGHT)
        uniqueField = self.getParameterValue(self.UID)

        provider = layer.dataProvider()
        weightIndex = layer.fieldNameIndex(weightField)
        uniqueIndex = layer.fieldNameIndex(uniqueField)

        if uniqueIndex <> -1:
            uniqueValues = utils.getUniqueValues(layer, uniqueIndex)
            single = False
        else:
            uniqueValues = [QVariant(1)]
            single = True

        fieldList = [QgsField("MEAN_X", QVariant.Double, "", 24, 15),
                     QgsField("MEAN_Y", QVariant.Double, "", 24, 15),
                     QgsField("UID", QVariant.String, "", 255)
                    ]

        writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fieldList,
                     QGis.WKBPoint, layer.crs())

        current = 0
        total = 100.0 / float(provider.featureCount() * len(uniqueValues))

        outFeat = QgsFeature()

        for j in uniqueValues:
            cx = 0.00
            cy = 0.00
            points = []
            weights = []
            features = QGisLayers.features(layer)
            for feat in features:
                current += 1
                progress.setPercentage(current * total)

                if single:
                    check = j.toString().trimmed()
                else:
                    check = feat.attributes()[uniqueIndex].toString().trimmed()

                if check == j.toString().trimmed():
                    cx = 0.00
                    cy = 0.00
                    if weightIndex == -1:
                        weight = 1.00
                    else:
                        try:
                            weight = float(feat.attributes()[weightIndex].toDouble()[0])
                        except:
                            weight = 1.00

                    geom = QgsGeometry(feat.geometry())
                    geom = utils.extractPoints(geom)
                    for i in geom:
                        cx += i.x()
                        cy += i.y()
                    points.append(QgsPoint((cx / len(geom)), (cy / len(geom))))
                    weights.append(weight)

            sumWeight = sum(weights)
            cx = 0.00
            cy = 0.00
            item = 0
            for item, i in enumerate(points):
                cx += i.x() * weights[item]
                cy += i.y() * weights[item]

            cx = cx / sumWeight
            cy = cy / sumWeight
            meanPoint = QgsPoint(cx, cy)

            outFeat.setGeometry(QgsGeometry.fromPoint(meanPoint))
            outFeat.setAttributes([QVariant(cx), QVariant(cy), QVariant(j)])
            writer.addFeature(outFeat)

            if single:
                break

        del writer
开发者ID:geonux,项目名称:Quantum-GIS,代码行数:85,代码来源:MeanCoords.py

示例3: processAlgorithm

# 需要导入模块: from sextante.algs.ftools import FToolsUtils [as 别名]
# 或者: from sextante.algs.ftools.FToolsUtils import extractPoints [as 别名]
    def processAlgorithm(self, progress):
        useField = (self.getParameterValue(ConvexHull.METHOD) == 1)
        fieldName = self.getParameterValue(ConvexHull.FIELD)
        layer = QGisLayers.getObjectFromUri(self.getParameterValue(ConvexHull.INPUT))

        f = QgsField("value")
        f.setType(QVariant.String)
        f.setLength(255)
        if useField:
            index = layer.fieldNameIndex(fieldName)
            fType = layer.pendingFields()[index].type()
            if fType == QVariant.Int:
                f.setType(QVariant.Int)
                f.setLength(20)
            elif fType == QVariant.Double:
                f.setType(QVariant.Double)
                f.setLength(20)
                f.setPrecision(6)
            else:
                f.setType(QVariant.String)
                f.setLength(255)

        fields = [QgsField("id", QVariant.Int, "", 20),
                  f,
                  QgsField("area", QVariant.Double, "", 20, 6),
                  QgsField("perim", QVariant.Double, "", 20, 6)
                 ]

        writer = self.getOutputFromName(ConvexHull.OUTPUT).getVectorWriter(fields, QGis.WKBPolygon, layer.dataProvider().crs())

        outFeat = QgsFeature()
        inGeom = QgsGeometry()
        outGeom = QgsGeometry()

        current = 0

        fid = 0
        val = ""
        if useField:
            unique = layer.uniqueValues(index)
            total = 100.0 / float(layer.featureCount() * len (unique))

            for i in unique:
                hull = []
                first = True
                features = QGisLayers.features(layer)
                for f in features:
                    idVar = f[fieldName]
                    if unicode(idVar).strip() == unicode(i).strip:
                        if first:
                            val = idVar
                            first = False
                        inGeom = QgsGeometry(f.geometry())
                        points = utils.extractPoints(inGeom)
                        hull.extend(points)
                    current += 1
                    progress.setPercentage(int(current * total))

                if len(hull) >= 3:
                    tmpGeom = QgsGeometry(outGeom.fromMultiPoint(hull))
                    try:
                        outGeom = tmpGeom.convexHull()
                        (area, perim) = utils.simpleMeasure(outGeom)
                        outFeat.setGeometry(outGeom)
                        outFeat.setAttributes([fid,val,area,perim])
                        writer.addFeature(outFeat)
                    except:
                        raise GeoAlgorithmExecutionException("Exception while computing convex hull")
                fid += 1
        else:
          hull = []
          total = 100.0 / float(layer.featureCount())
          features = QGisLayers.features(layer)
          for f in features:
              inGeom = QgsGeometry(f.geometry())
              points = utils.extractPoints(inGeom)
              hull.extend(points)
              current += 1
              progress.setPercentage(int(current * total))

          tmpGeom = QgsGeometry(outGeom.fromMultiPoint(hull))
          try:
              outGeom = tmpGeom.convexHull()
              (area, perim) = utils.simpleMeasure(outGeom)
              outFeat.setGeometry(outGeom)
              outFeat.setAttributes([0, "all", area, perim])
              writer.addFeature(outFeat)
          except:
              raise GeoAlgorithmExecutionException("Exception while computing convex hull")

        del writer
开发者ID:Adam-Brown,项目名称:Quantum-GIS,代码行数:93,代码来源:ConvexHull.py

示例4: processAlgorithm

# 需要导入模块: from sextante.algs.ftools import FToolsUtils [as 别名]
# 或者: from sextante.algs.ftools.FToolsUtils import extractPoints [as 别名]
    def processAlgorithm(self, progress):
        useField = (self.getParameterValue(ConvexHull.METHOD) == 1)
        field = self.getParameterValue(ConvexHull.FIELD)
        vlayerA = QGisLayers.getObjectFromUri(self.getParameterValue(ConvexHull.INPUT))
        GEOS_EXCEPT = True
        FEATURE_EXCEPT = True
        vproviderA = vlayerA.dataProvider()
        #allAttrsA = vproviderA.attributeIndexes()
        #vproviderA.select(allAttrsA)
        fields = [QgsField("ID", QVariant.Int),
                    QgsField("Area", QVariant.Double),
                    QgsField("Perim", QVariant.Double)]
        writer = self.getOutputFromName(ConvexHull.OUTPUT).getVectorWriter(fields, QGis.WKBPolygon, vproviderA.crs())
        inFeat = QgsFeature()
        outFeat = QgsFeature()
        inGeom = QgsGeometry()
        outGeom = QgsGeometry()
        nElement = 0
        index = vproviderA.fieldNameIndex(field)

        features = QGisLayers.features(vlayerA)
        nFeat = len(features)

        if useField:
          unique = utils.getUniqueValues(vproviderA, index)
          nFeat = nFeat * len(unique)
          for i in unique:
            hull = []
            first = True
            outID = 0
            #vproviderA.select(allAttrsA)
            features = QGisLayers.features(vlayerA)
            for inFeat in features:
              atMap = inFeat.attributes()
              idVar = atMap[ index ]
              if idVar.toString().trimmed() == i.toString().trimmed():
                if first:
                  outID = idVar
                  first = False
                inGeom = QgsGeometry(inFeat.geometry())
                points = utils.extractPoints(inGeom)
                hull.extend(points)
              nElement += 1
              progress.setPercentage(int(nElement / nFeat * 100))
            if len(hull) >= 3:
              tmpGeom = QgsGeometry(outGeom.fromMultiPoint(hull))
              try:
                outGeom = tmpGeom.convexHull()
                outFeat.setGeometry(outGeom)
                (area, perim) = self.simpleMeasure(outGeom)
                outFeat.addAttribute(0, QVariant(outID))
                outFeat.addAttribute(1, QVariant(area))
                outFeat.addAttribute(2, QVariant(perim))
                writer.addFeature(outFeat)
              except:
                GEOS_EXCEPT = False
                continue
        else:
          hull = []
          #vproviderA.select(allAttrsA)
          features = QGisLayers.features(vlayerA)
          for inFeat in features:
            inGeom = QgsGeometry(inFeat.geometry())
            points = utils.extractPoints(inGeom)
            hull.extend(points)
            nElement += 1
            progress.setPercentage(int(nElement / nFeat * 100))
          tmpGeom = QgsGeometry(outGeom.fromMultiPoint(hull))
          try:
            outGeom = tmpGeom.convexHull()
            outFeat.setGeometry(outGeom)
            (area, perim) = self.simpleMeasure(outGeom)
            #outFeat.addAttribute(0, QVariant("1"))
            #outFeat.addAttribute(1, QVariant(area))
            #outFeat.addAttribute(2, QVariant(perim))
            writer.addFeature(outFeat)
          except:
            GEOS_EXCEPT = False

        del writer

        if not GEOS_EXCEPT:
            SextanteLog.addToLog(SextanteLog.LOG_WARNING, "Geometry exception while computing convex hull")
        if not FEATURE_EXCEPT:
            SextanteLog.addToLog(SextanteLog.LOG_WARNING, "Feature exception while computing convex hull")
开发者ID:geonux,项目名称:Quantum-GIS,代码行数:87,代码来源:ConvexHull.py


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