def _set_rubber_band(self):
        transform = self.canvas.getCoordinateTransform()

        rb_center = transform.toMapCoordinates(self.center)
        rb_tangent = transform.toMapCoordinates(self.tangent_point)
        rb_circle = QgsCircle(
            QgsPoint(rb_center.x(), rb_center.y()),
            rb_center.distance(rb_tangent.x(), rb_tangent.y()))
        circle_geom = QgsGeometry(rb_circle.toPolygon())

        if self.rubber_band:
            self.rubber_band.reset(QgsWkbTypes.PolygonGeometry)
            self.rubber_band.addGeometry(circle_geom)
            self.circle = circle_geom
Ejemplo n.º 2
0
    def handleRequest(self, context):
        """Simple Circle"""

        values = self.values(context)
        x = values['x']
        y = values['y']
        r = values['r']
        f = QgsFeature()
        f.setAttributes([x, y, r])
        f.setGeometry(QgsCircle(QgsPoint(x, y), r).toCircularString())
        exporter = QgsJsonExporter()
        self.write(json.loads(exporter.exportFeature(f)), context)
Ejemplo n.º 3
0
 def testQgsCircleRepr(self):
     c = QgsCircle(QgsPoint(1, 1), 2.0)
     self.assertEqual(
         c.__repr__(),
         '<QgsCircle: Circle (Center: Point (1 1), Radius: 2, Azimuth: 0)>')
def geomFromType(points, parameters, geomtype, layerType):
    """
    Returns the geometry from a points list, with parameters for the specific
    geometry type to the layer type

    Parameters
    ----------

    points: list of coordinates
        Contains at least one point
    parameters: list
        Can be empty, else it's a string needed for some geometry type
    geomtype: int
        Identifiant of the type of geometry
        (Circle from 2 points, Circle from center and diameter, etc.)
    layerType: int
        QGIS identifiant of the layer type
        (0: Point, 1: LineString, 2: Polygon)
    """
    if (geomtype == "Circle2Points"):
        try:
            geom = QgsCircle.from2Points(QgsPoint(*[float(f) for
                                                    f in points[0]]),
                                         QgsPoint(*[float(f) for
                                                    f in points[1]]))
            if layerType == 0:
                return QgsGeometry(geom.center())
            elif layerType == 1:
                return QgsGeometry(geom.toLineString())
            else:
                return QgsGeometry(geom.toPolygon())
        except:
            return None

    elif (geomtype == "Circle3Points"):
        try:
            geom = QgsCircle.from3Points(QgsPoint(*[float(f) for
                                                    f in points[0]]),
                                         QgsPoint(*[float(f) for
                                                    f in points[1]]),
                                         QgsPoint(*[float(f) for
                                                    f in points[2]]))
            if layerType == 0:
                return QgsGeometry(geom.center())
            elif layerType == 1:
                return QgsGeometry(geom.toLineString())
            else:
                return QgsGeometry(geom.toPolygon())
        except:
            return None

    elif (geomtype == "CircleCenterRadius"):
        try:
            geom = QgsCircle.fromCenterDiameter(QgsPoint(*[float(f) for
                                                           f in points[0]]),
                                                float(parameters[0]) * 2.0)
            if layerType == 0:
                return QgsGeometry(geom.center())
            elif layerType == 1:
                return QgsGeometry(geom.toLineString())
            else:
                return QgsGeometry(geom.toPolygon())
        except:
            return None
    
    elif (geomtype == "CircleCenterDiameter"):
        try:
            geom = QgsCircle.fromCenterDiameter(QgsPoint(*[float(f) for
                                                           f in points[0]]),
                                                float(parameters[0]))
            if layerType == 0:
                return QgsGeometry(geom.center())
            elif layerType == 1:
                return QgsGeometry(geom.toLineString())
            else:
                return QgsGeometry(geom.toPolygon())
        except:
            return None
    
    elif (geomtype == "Square2Points"):
        try:
            geom = QgsRegularPolygon(QgsPoint(*[float(f) for f in points[0]]),
                                     QgsPoint(*[float(f) for f in points[1]]),
                                     4)
            if layerType == 0:
                return QgsGeometry(geom.center())
            elif layerType == 1:
                return QgsGeometry(geom.toLineString())
            else:
                return QgsGeometry(geom.toPolygon())
        except:
            return None
    elif (geomtype == "Square2Diagonal"):
        # TODO: QgsRegularPolygon?
        return None
    elif (geomtype == "Rectangle2PointsHeight"):
        # TODO: projection des points suivant azimuth entre
        # points[0] et points[1]?
        return None
    elif (geomtype == "Rectangle3PointsDistance"):
        # TODO: voir code maptools
        return None
    elif (geomtype == "Rectangle3PointsProjected"):
        # TODO: voir code maptools
        return None
    elif (geomtype == "Line"):
        if layerType == 0:
            return None
        nb = len(points)

        if nb < 2:
            return None

        line = []
        for p in points:
            line.append(QgsPoint(*[float(f) for f in p]))
        if layerType == 1:
            return QgsGeometry.fromPolyline(line)
        else:
            if line[0] != line[nb - 1]:
                line.append(line[0])
            p = QgsPolygon()
            p.setExteriorRing(QgsLineString(line))
            return QgsGeometry(p)
        return None
    elif (geomtype == "Point"):
        try:
            if layerType == 0:
                return QgsGeometry(QgsPoint(*[float(f) for f in points[0]]))
            else:
                return None
        except:
            return None

    return None
Ejemplo n.º 5
0
 def testQgsCircleRepr(self):
     c = QgsCircle(QgsPoint(1, 1), 2.0)
     self.assertEqual(c.__repr__(), '<QgsCircle: Circle (Center: Point (1 1), Radius: 2, Azimuth: 0)>')