Exemple #1
0
    def control(self):
        self.ids = []
        self.polynum = self.ml.featureCount()
        feat = QgsFeature()
        provider = self.ml.dataProvider()
        feats = provider.getFeatures()
        self.emit(SIGNAL("runStatus(PyQt_PyObject)"), 0)
        self.emit(SIGNAL("runRange(PyQt_PyObject)"), (0, self.polynum))
        ne = 0
        while feats.nextFeature(feat):
            ne += 1
            self.emit(SIGNAL("runStatus(PyQt_PyObject)"), ne)
            geom = QgsGeometry(feat.geometry())
            if geom.isMultipart():
                multi_polygon = geom.asMultiPolygon()
                for polygon in multi_polygon:
                    for ring in polygon:
                        for v in ring:
                            self.cintlen(str(v.x()))
                            self.cintlen(str(v.y()))
            else:
                polygon = geom.asPolygon()
                for ring in polygon:
                    for v in ring:
                        self.cintlen(str(v.x()))
                        self.cintlen(str(v.y()))

            self.ids.append(feat.id())
Exemple #2
0
    def control(self):
        self.ids = []
        self.polynum = self.ml.featureCount()
        feat = QgsFeature()
        provider = self.ml.dataProvider()
        feats = provider.getFeatures()
        #self.emit(SIGNAL("runStatus(PyQt_PyObject)"), 0)
        #self.emit(SIGNAL("runRange(PyQt_PyObject)"), (0, self.polynum))
        ne = 0
        while feats.nextFeature(feat):
            ne += 1
            #self.emit(SIGNAL("runStatus(PyQt_PyObject)"), ne)
            geom = QgsGeometry(feat.geometry())
            if geom.isMultipart():
                multi_polygon = geom.asMultiPolygon()
                for polygon in multi_polygon:
                    for ring in polygon:
                        for v in ring:
                            self.cintlen(str(v.x()))
                            self.cintlen(str(v.y()))
            else:
                polygon = geom.asPolygon()
                for ring in polygon:
                    for v in ring:
                        self.cintlen(str(v.x()))
                        self.cintlen(str(v.y()))

            self.ids.append(feat.id())
Exemple #3
0
    def convSplus(self, prec):
        for i in range(0, self.polynum):
            j = i + 1
            self.plainTextEdit.appendPlainText("%s area%s" % (j, j))

        self.plainTextEdit.appendPlainText("")
        mod = min(self.ids)
        p = 1
        if mod == 1:
            p = 0

        for ne in range(mod, self.polynum + mod):
            pn = 1
            feat = QgsFeature()
            geom = QgsGeometry()

            fiter = self.ml.getFeatures(QgsFeatureRequest(ne))
            if fiter.nextFeature(feat):
                geom = QgsGeometry(feat.geometry())

            id = feat.id() + p

            if geom.isMultipart():
                multi_polygon = geom.asMultiPolygon()
                for polygon in multi_polygon:
                    for ring in polygon:
                        for v in ring:
                            self.plainTextEdit.appendPlainText(
                                "area%s %s %s" %
                                (id, round(v.x(), prec), round(v.y(), prec)))
                            pn += 1
                        self.plainTextEdit.appendPlainText("NA NA NA")
            else:
                polygon = geom.asPolygon()
                for ring in polygon:
                    for v in ring:
                        self.plainTextEdit.appendPlainText(
                            "area%s %s %s" %
                            (id, round(v.x(), prec), round(v.y(), prec)))
                        pn += 1
                    self.plainTextEdit.appendPlainText("NA NA NA")

            if pn >= 10000:
                QMessageBox.information(
                    self,
                    "Too many points",
                    "Polygon No. %s contains to many points to read into GeoBUGS.\nSimplifying of polygon can solve this problem."
                    % (id),
                    buttons=QMessageBox.Ok,
                    defaultButton=QMessageBox.NoButton)

            self.progressBar.setValue(100 * id / self.polynum)

        self.plainTextEdit.appendPlainText("END")
Exemple #4
0
    def convSplus(self, prec):
        for i in range(0, self.polynum):
            j = i + 1
            self.plainTextEdit.appendPlainText("%s area%s" % (j, j))

        self.plainTextEdit.appendPlainText("")
        mod = min(self.ids)
        p = 1
        if mod==1:
            p = 0

        for ne in range(mod, self.polynum + mod):
            pn = 1
            feat = QgsFeature()
            geom = QgsGeometry()

            fiter = self.ml.getFeatures(QgsFeatureRequest(ne))
            if fiter.nextFeature(feat):
                geom = QgsGeometry(feat.geometry())

            id = feat.id()+p

            if geom.isMultipart():
                multi_polygon = geom.asMultiPolygon()
                for polygon in multi_polygon:
                    for ring in polygon:
                        for v in ring:
                            self.plainTextEdit.appendPlainText(
                                "area%s %s %s" % (id, round(v.x(), prec), round(v.y(), prec)))
                            pn += 1
                        self.plainTextEdit.appendPlainText("NA NA NA")
            else:
                polygon = geom.asPolygon()
                for ring in polygon:
                    for v in ring:
                        self.plainTextEdit.appendPlainText(
                            "area%s %s %s" % (id, round(v.x(), prec), round(v.y(), prec)))
                        pn += 1
                    self.plainTextEdit.appendPlainText("NA NA NA")

            if pn >= 10000:
                QMessageBox.information(self,
                                        "Too many points",
                                        "Polygon No. %s contains to many points to read into GeoBUGS.\nSimplifying of polygon can solve this problem." % (id),
                                        buttons=QMessageBox.Ok, defaultButton=QMessageBox.NoButton)

            self.progressBar.setValue(100 * id / self.polynum)

        self.plainTextEdit.appendPlainText("END")
Exemple #5
0
    def getMatchingFeatures(self, geometry, contains, singleSelect):
        newFeatures = []
        if geometry.type() != QgsWkbTypes.PolygonGeometry:
            return newFeatures

        layer = self.canvas.currentLayer()
        if layer is None:
            return newFeatures

        selectGeomTrans = QgsGeometry(geometry)
        try:
            ct = QgsCoordinateTransform(self.canvas.mapSettings().destinationCrs(), layer.crs(), QgsProject.instance())
            if not ct.isShortCircuited() and selectGeomTrans.type() == QgsWkbTypes.PolygonGeometry:
                poly = selectGeomTrans.asPolygon()
                if len(poly) == 1 and len(poly[0]) == 5:
                    ringIn = poly[0]
                    ringOut = []
                    ringOut.append(ringIn[0])
                    i = 1
                    for j in range(1, 5):
                        v = QgsVector((ringIn[j] - ringIn[j - 1]) / 10.0)
                        for k in range(9):
                            ringOut.append(ringOut[i - 1] + v)
                            i += 1
                        ringOut.append(ringIn[j])
                        i += 1
                    selectGeomTrans = QgsGeometry.fromPolygonXY([ringOut])

            selectGeomTrans.transform(ct)
        except QgsCsException as e:
            QgsMessageLog.logMessage("Selection extends beyond layer's coordinate system")
            return newFeatures

        context = QgsRenderContext.fromMapSettings(self.canvas.mapSettings())
        context.expressionContext().appendScope(QgsExpressionContextUtils.layerScope(layer))

        r = None
        if layer.renderer():
            r = layer.renderer().clone()
            r.startRender(context, layer.fields())

        request = QgsFeatureRequest()
        request.setFilterRect(selectGeomTrans.boundingBox())
        request.setFlags(QgsFeatureRequest.ExactIntersect)

        if r:
            request.setSubsetOfAttributes(r.usedAttributes(context), layer.fields())
        else:
            request.setSubsetOfAttributes([])

        closestFeatureId = 0
        foundSingleFeature = False
        closestFeatureDist = sys.float_info.max
        for f in layer.getFeatures(request):
            context.expressionContext().setFeature(f)
            if r and  not r.willRenderFeature(f, context):
                continue

            g = f.geometry()
            if contains:
                if not selectGeomTrans.contains(g):
                    continue

            else:
                if not selectGeomTrans.intersects(g):
                    continue

            if singleSelect:
                foundSingleFeature = True
                distance = g.distance(selectGeomTrans)
                if distance <= closestFeatureDist:
                    closestFeatureDist = distance
                    closestFeatureId = f.id()
            else:
                newFeatures.append(f.id())

        if singleSelect and foundSingleFeature:
            newFeatures.append(closestFeatureId)

        if r:
            r.stopRender(context)

        return newFeatures
Exemple #6
0
    def btnConstruct_Click(self):
        flag = FlightPlanBaseSimpleDlg.btnConstruct_Click(self)
        if not flag:
            return

        # mapUnits = define._canvas.mapUnits()
        constructionLayer = None
        if self.parametersPanel.cmbConstructionType.currentText() == "2D":
            constructionLayer = AcadHelper.createVectorLayer(SurfaceTypes.DmeUpdateArea)
        #     if define._mapCrs == None:
        #         if mapUnits == QGis.Meters:
        #             constructionLayer = QgsVectorLayer("linestring?crs=EPSG:32633", SurfaceTypes.DmeUpdateArea, "memory")
        #         else:
        #             constructionLayer = QgsVectorLayer("linestring?crs=EPSG:4326", SurfaceTypes.DmeUpdateArea, "memory")
        #     else:
        #         constructionLayer = QgsVectorLayer("linestring?crs=%s"%define._mapCrs.authid (), SurfaceTypes.DmeUpdateArea, "memory")
        #     shpPath = ""
        #     if define.obstaclePath != None:
        #         shpPath = define.obstaclePath
        #     elif define.xmlPath != None:
        #         shpPath = define.xmlPath
        #     else:
        #         shpPath = define.appPath
        #     er = QgsVectorFileWriter.writeAsVectorFormat(constructionLayer, shpPath + "/" + QString(SurfaceTypes.DmeUpdateArea).replace(" ", "") + ".shp", "utf-8", constructionLayer.crs())
        #     constructionLayer = QgsVectorLayer(shpPath + "/" + QString(SurfaceTypes.DmeUpdateArea).replace(" ", "") + ".shp", SurfaceTypes.DmeUpdateArea, "ogr")

            point3d = self.parametersPanel.pnlDme1.Point3d
            point3d1 = self.parametersPanel.pnlDme2.Point3d
            num = MathHelper.calcDistance(point3d, point3d1)
            num1 = num * 0.5
            num2 = math.sqrt(num * num - num1 * num1)
            num3 = MathHelper.getBearing(point3d, point3d1)
            point3d2 = MathHelper.distanceBearingPoint(point3d, num3, 0.5 * num)
            point3d3 = MathHelper.distanceBearingPoint(point3d2, num3 - 1.5707963267949, num2)
            point3d4 = MathHelper.distanceBearingPoint(point3d2, num3 + 1.5707963267949, num2)
            distance = Distance(float(self.parametersPanel.txtDoc1.text()), DistanceUnits.NM)
            metres = distance.Metres
            distance1 = Distance(float(self.parametersPanel.txtDoc2.text()), DistanceUnits.NM)
            metres1 = distance1.Metres
            
            circlePointList = MathHelper.constructCircle(point3d, metres, 100)
            circlePointList1 = MathHelper.constructCircle(point3d1, metres1, 100)
            
            
            circlePointList2 = MathHelper.constructCircle(point3d3, num, 100)
            circlePointList3 = MathHelper.constructCircle(point3d4, num, 100)
            circlePointList4 = MathHelper.constructCircle(point3d, 1900, 100)
            circlePointList5 = MathHelper.constructCircle(point3d1, 1900, 100)
            
            # constructionLayer.startEditing()
            
            polygon = QgsGeometry.fromPolygon([circlePointList])
    #         feature0 = QgsFeature()
    #         feature0.setGeometry(polygon)
    #         constructionLayer.addFeature(feature0)
            polygon = QgsGeometry.fromPolygon([circlePointList])
            polygon1 = QgsGeometry.fromPolygon([circlePointList1])
            polygon2 = QgsGeometry.fromPolygon([circlePointList2])
            polygon3 = QgsGeometry.fromPolygon([circlePointList3])
            polygon4 = QgsGeometry.fromPolygon([circlePointList4])
            polygon5 = QgsGeometry.fromPolygon([circlePointList5])
            
            polygon0 = polygon.intersection(polygon1)
            polygon0 = polygon0.intersection(polygon2)
            polygon0 = polygon0.difference(polygon3)
            polygon0 = polygon0.difference(polygon4)
            polygon0 = polygon0.difference(polygon5)
            
            pointArray = QgsGeometry.asPolygon(polygon0)
            
            # feature1 = QgsFeature()
            # feature1.setGeometry(QgsGeometry.fromPolyline(pointArray[0]))
            # constructionLayer.addFeature(feature1)
            AcadHelper.setGeometryAndAttributesInLayer(constructionLayer, pointArray[0])

            
            polygon0 = polygon.intersection(polygon1)
            polygon0 = polygon0.intersection(polygon3)
            polygon0 = polygon0.difference(polygon2)
            polygon0 = polygon0.difference(polygon4)
            polygon0 = polygon0.difference(polygon5)
            
            pointArray = QgsGeometry.asPolygon(polygon0)
            
            # feature1 = QgsFeature()
            # feature1.setGeometry(QgsGeometry.fromPolyline(pointArray[0]))
            #
            # constructionLayer.addFeature(feature1)
            AcadHelper.setGeometryAndAttributesInLayer(constructionLayer, pointArray[0])

            
            
            
            # constructionLayer.commitChanges()
        else:
            constructionLayer = AcadHelper.createVectorLayer(SurfaceTypes.DmeUpdateArea, QGis.Polygon)
            # if define._mapCrs == None:
            #     if mapUnits == QGis.Meters:
            #         constructionLayer = QgsVectorLayer("polygon?crs=EPSG:32633", SurfaceTypes.DmeUpdateArea, "memory")
            #     else:
            #         constructionLayer = QgsVectorLayer("polygon?crs=EPSG:4326", SurfaceTypes.DmeUpdateArea, "memory")
            # else:
            #     constructionLayer = QgsVectorLayer("polygon?crs=%s"%define._mapCrs.authid (), SurfaceTypes.DmeUpdateArea, "memory")
            # shpPath = ""
            # if define.obstaclePath != None:
            #     shpPath = define.obstaclePath
            # elif define.xmlPath != None:
            #     shpPath = define.xmlPath
            # else:
            #     shpPath = define.appPath
            # er = QgsVectorFileWriter.writeAsVectorFormat(constructionLayer, shpPath + "/" + QString(SurfaceTypes.DmeUpdateArea).replace(" ", "") + ".shp", "utf-8", constructionLayer.crs())
            # constructionLayer = QgsVectorLayer(shpPath + "/" + QString(SurfaceTypes.DmeUpdateArea).replace(" ", "") + ".shp", SurfaceTypes.DmeUpdateArea, "ogr")

            point3d = self.parametersPanel.pnlDme1.Point3d
            point3d1 = self.parametersPanel.pnlDme2.Point3d
            num = MathHelper.calcDistance(point3d, point3d1)
            num1 = num * 0.5
            num2 = math.sqrt(num * num - num1 * num1)
            num3 = MathHelper.getBearing(point3d, point3d1)
            point3d2 = MathHelper.distanceBearingPoint(point3d, num3, 0.5 * num)
            point3d3 = MathHelper.distanceBearingPoint(point3d2, num3 - 1.5707963267949, num2)
            point3d4 = MathHelper.distanceBearingPoint(point3d2, num3 + 1.5707963267949, num2)
            distance = Distance(float(self.parametersPanel.txtDoc1.text()), DistanceUnits.NM)
            metres = distance.Metres
            distance1 = Distance(float(self.parametersPanel.txtDoc2.text()), DistanceUnits.NM)
            metres1 = distance1.Metres
            
            circlePointList = MathHelper.constructCircle(point3d, metres, 100)
            circlePointList1 = MathHelper.constructCircle(point3d1, metres1, 100)
            
            
            circlePointList2 = MathHelper.constructCircle(point3d3, num, 100)
            circlePointList3 = MathHelper.constructCircle(point3d4, num, 100)
            circlePointList4 = MathHelper.constructCircle(point3d, 1900, 100)
            circlePointList5 = MathHelper.constructCircle(point3d1, 1900, 100)
            
            # constructionLayer.startEditing()
            
            polygon = QgsGeometry.fromPolygon([circlePointList])
    #         feature0 = QgsFeature()
    #         feature0.setGeometry(polygon)
    #         constructionLayer.addFeature(feature0)
            polygon = QgsGeometry.fromPolygon([circlePointList])
            polygon1 = QgsGeometry.fromPolygon([circlePointList1])
            polygon2 = QgsGeometry.fromPolygon([circlePointList2])
            polygon3 = QgsGeometry.fromPolygon([circlePointList3])
            polygon4 = QgsGeometry.fromPolygon([circlePointList4])
            polygon5 = QgsGeometry.fromPolygon([circlePointList5])
            
            polygon0 = polygon.intersection(polygon1)
            polygon0 = polygon0.intersection(polygon2)
            polygon0 = polygon0.difference(polygon3)
            polygon0 = polygon0.difference(polygon4)
            polygon0 = polygon0.difference(polygon5)
            # feature1 = QgsFeature()
            # feature1.setGeometry(polygon0)
            # constructionLayer.addFeature(feature1)
            AcadHelper.setGeometryAndAttributesInLayer(constructionLayer, polygon0.asPolygon()[0])

            
            polygon0 = polygon.intersection(polygon1)
            polygon0 = polygon0.intersection(polygon3)
            polygon0 = polygon0.difference(polygon2)
            polygon0 = polygon0.difference(polygon4)
            polygon0 = polygon0.difference(polygon5)
            # feature2 = QgsFeature()
            # feature2.setGeometry(polygon0)
            # constructionLayer.addFeature(feature2)

            AcadHelper.setGeometryAndAttributesInLayer(constructionLayer, polygon0.asPolygon()[0])
            
            
            
            # constructionLayer.commitChanges()
        
        QgisHelper.appendToCanvas(define._canvas, [constructionLayer], SurfaceTypes.DmeUpdateArea)
        self.resultLayerList = [constructionLayer]
        QgisHelper.zoomToLayers([constructionLayer])
    def load_complex_gml(self, xml_uri, is_remote, attributes = {}, geometry_mapping = None, logger = None, swap_xy = False):
        """
        :param xml_uri: the XML URI
        :param is_remote: True if it has to be fetched by http
        :param attributes: { 'attr1' : ( '//xpath/expression', QVariant.Int ) }
        :param geometry_mapping: XPath expression to a gml geometry node
        :param swap_xy: True if X/Y coordinates must be swapped
        :returns: the created layer
        """
        if is_remote:
            xml = remote_open_from_qgis(xml_uri)
        else:
            # Open the file in binary mode, this means returning bytes
            # instead of a string whose encoding would have to be interpreted
            # it is up to the XML parser to determine which encoding it is
            xml = open(xml_uri, 'rb')
        src = ComplexFeatureSource(xml, attributes, geometry_mapping, logger)

        attr_list = [ (k, v[1]) for k, v in attributes.items() ]
        
        # first feature
        id, fid, g, xml, attrs = next(src.getFeatures())
        qgsgeom = None
        if g is None:
            layer = self._create_layer('none', None, attr_list, src.title)
        else:
            wkb, srid = g
            qgsgeom = QgsGeometry()
            qgsgeom.fromWkb(wkb)
            if qgsgeom and qgsgeom.type() == QgsWkbTypes.PointGeometry:
                layer = self._create_layer('point', srid, attr_list, src.title + " (points)")
            elif qgsgeom and qgsgeom.type() == QgsWkbTypes.LineGeometry:
                layer = self._create_layer('linestring', srid, attr_list, src.title + " (lines)")
            elif qgsgeom and qgsgeom.type() == QgsWkbTypes.PolygonGeometry:
                layer = self._create_layer('polygon', srid, attr_list, src.title + " (polygons)")

        # add metadata
        self._add_properties_to_layer(layer, xml_uri, is_remote, attributes, geometry_mapping)

        # collect features
        features = []
        for id, fid, g, xml, attrs in src.getFeatures():
            qgsgeom = None
            wkb, srid = g
            qgsgeom = QgsGeometry()
            qgsgeom.fromWkb(wkb)
            if qgsgeom and qgsgeom.type() == QgsWkbTypes.PointGeometry:
                if swap_xy:
                    p = qgsgeom.asPoint()
                    qgsgeom = QgsGeometry.fromPoint(QgsPointXY(p[1], p[0]))
            elif qgsgeom and qgsgeom.type() == QgsWkbTypes.LineGeometry:
                if swap_xy:
                    pl = qgsgeom.asPolyline()
                    qgsgeom = QgsGeometry.fromPolyline([QgsPointXY(p[1],p[0]) for p in pl])
            elif qgsgeom and qgsgeom.type() == QgsWkbTypes.PolygonGeometry:
                if swap_xy:
                    pl = qgsgeom.asPolygon()
                    qgsgeom = QgsGeometry.fromPolygon([[QgsPointXY(p[1],p[0]) for p in r] for r in pl])

            f = QgsFeature(layer.dataProvider().fields(), id)
            if qgsgeom:
                f.setGeometry(qgsgeom)
            f.setAttribute("id", str(id))
            f.setAttribute("fid", fid)
            f.setAttribute("_xml_", ET.tostring(xml).decode('utf8'))
            for k, v in attrs.items():
                r = f.setAttribute(k, v)
            features.append(f)

        # write features
        if len(features) > 0:
            layer.dataProvider().addFeatures(features)

        return layer
Exemple #8
0
class GeometryHighlight(QgsMapCanvasItem):

    _mapCanvas = None  # QgsMapCanvas
    _geometry = None  # QgsGeometry()
    _brush = QBrush()
    _pen = QPen()

    def __init__(self, mapCanvas, geometry, layer):
        super(GeometryHighlight, self).__init__(mapCanvas)
        self._mapCanvas = mapCanvas
        if not geometry or not isinstance(geometry, QgsGeometry) or geometry.isEmpty() or not geometry.isGeosValid():
            return
        self._geometry = QgsGeometry(geometry) # Force deep copy
        self.setLineColor(Project.highlightLineColor())
        self.setFillColor(Project.highlightFillColor())
        if (layer and self._mapCanvas.mapSettings().hasCrsTransformEnabled()):
            ct = self._mapCanvas.mapSettings().layerTransform(layer)
            if ct:
                self._geometry.transform(ct)
        self.updateRect()
        self.update()

    def remove(self):
        self._mapCanvas.scene().removeItem(self)

    def setLineWidth(self, width):
        self._pen.setWidth(width)

    def setLineColor(self, color):
        lineColor = QColor(color)
        lineColor.setAlpha(255)
        self._pen.setColor(lineColor)

    def setFillColor(self, fillColor):
        self._brush.setColor(fillColor)
        self._brush.setStyle(Qt.SolidPattern)

    def updatePosition(self):
        pass

    # protected:
    def paint(self, painter, option=None, widget=None): # Override
        if not self._geometry:
            return

        painter.setPen(self._pen)
        painter.setBrush(self._brush)

        wkbType = self._geometry.wkbType()
        if wkbType == QGis.WKBPoint or wkbType == QGis.WKBPoint25D:
            self._paintPoint(painter, self._geometry.asPoint())
        elif wkbType == QGis.WKBMultiPoint or wkbType == QGis.WKBMultiPoint25D:
            for point in self._geometry.asMultiPoint():
                self._paintPoint(painter, point)
        elif wkbType == QGis.WKBLineString or wkbType == QGis.WKBLineString25D:
            self._paintLine(painter, self._geometry.asPolyline())
        elif wkbType == QGis.WKBMultiLineString or wkbType == QGis.WKBMultiLineString25D:
            for line in self._geometry.asMultiPolyline():
                self._paintLine(painter, line)
        elif wkbType == QGis.WKBPolygon or wkbType == QGis.WKBPolygon25D:
            self._paintPolygon(painter, self._geometry.asPolygon())
        elif wkbType == QGis.WKBMultiPolygon or wkbType == QGis.WKBMultiPolygon25D:
            for polygon in self._geometry.asMultiPolygon():
                self._paintPolygon(painter, polygon)

    def updateRect(self):
        if self._geometry:
            r = self._geometry.boundingBox()
            if r.isEmpty():
                d = self._mapCanvas.extent().width() * 0.005
                r.setXMinimum(r.xMinimum() - d)
                r.setYMinimum(r.yMinimum() - d)
                r.setXMaximum(r.xMaximum() + d)
                r.setYMaximum(r.yMaximum() + d)
            self.setRect(r)
            self.setVisible(True)
        else:
            self.setRect(QgsRectangle())

    # private:

    def _paintPoint(self, painter, point):
        painter.drawEllipse(self.toCanvasCoordinates(point) - self.pos(), 2, 2)

    def _paintLine(self, painter, line):
        polyline = QPolygonF()
        for point in line:
            polyline.append(self.toCanvasCoordinates(point) - self.pos())
        painter.drawPolyline(polyline)

    def _paintPolygon(self, painter, polygon):
        path = QPainterPath()
        for line in polygon:
            ring = QPolygonF()
            for point in line:
                cur = self.toCanvasCoordinates(point) - self.pos()
                ring.append(cur)
            ring.append(ring[0])
            path.addPolygon(ring)
        painter.drawPath(path)
 def smethod_0(region_0):
     return PolylineArea(QgsGeometry.asPolygon(region_0)[0])