Código fuente para geometry

# -*- coding: utf-8 -*-

"""Este módulo contiene utilidades geometricas, que se utilizan en la
clase CalidadCAR."""
from qgis.core import *
from math import sqrt

[documentos]def getSegments(layer): """Retorna los segmentos de layer. :param layer: Capa de la cual se van a obtener los segementos :type layer: QgsVectorLayer :returns: La lista de segmentos :rtype: Lista de Polylines """ segments = [] for f_seccion in layer.getFeatures(): segments.append(f_seccion.geometry().asPolyline()) return segments
[documentos]def distance(a, b): """Cálcula la distancia entre un punto a, y un punto b. :param a: Punto a :type a: QgsPoint :param b: Punto b :type b: QgsPoint :returns: Distancia entre a y b. :rtype: Double """ return sqrt(a.sqrDist(b))
[documentos]def buildConvexPolygon(segments): """Construye un polígono convexo a partir de un conjungo de segementos, tomando todos los puntos de los segmentos que estan al extremo inicial, y final, y solo el punto de inicio y el punto final de los segementos intermedios. :param segements: :type segements: Lista de Polylines :returns: Un polígono convexo que envuelve todos los puntos que se acabarón de describir. :rtype: QgsGeometry """ origins = [points[0] for points in segments[1 : -1]] ends = [points[-1] for points in segments[1: -1]] borders = segments[0] + segments[-1] points = borders + origins + ends return QgsGeometry.fromMultiPoint(points).convexHull()
[documentos]def intersectionPoints(layerA, layerB): """Obtiene los puntos de intersección entre dos capas. :param layerA: Capa que se va a intersectar con layerB. :type layerA: QgsVectorLayer :param layerB: Capa que se va a intersectar con layerA. :type layerB: QgsVectorLayer :returns: La lista de los puntos de intersección :rtype: Lista de QgsPoints """ points = [] for featA in layerA.getFeatures(): for featB in layerB.getFeatures(): inter = intersection(featA.geometry(), featB.geometry()) if inter is not None: points.append(inter) qgsPoints = [QgsPoint(point) for point in points] return qgsPoints
[documentos]def intersectionLayerGeometry(layer, geometry): """Obtiene la primera inresección entre una capa y una geometría. :param layer: Capa :type layer: QgsVectorLayer :param geometry: Geometría :type geometry: QgsGeometry :returns: El punto de insersección, en caso de que exita, returna None de otra forma. :rtype: QgsPointXY """ intersections = [] for feature in layer.getFeatures(): temp = intersection(feature.geometry(), geometry) if temp is not None: intersections.append(temp) if len(intersections) > 0: return intersections[0] return None
[documentos]def intersection(A, B): """Optiene el punto de insersección entre dos geometrías. :param A: Geometría A fsdfsdf :type A: QgsGeometry fsdfsd :param B: Geometría B :type B: QgsGeometry :returns: El punto de insersección, en caso de que exita, returna None de otra forma. :rtype: QgsPointXY """ if A.intersects(B): inter = A.intersection(B) if inter.wkbType() == QGis.WKBPoint: return inter.asPoint() return None