Distancia mínima desde el centroide hasta los vértices de un vectorial tipo polígono mediante PyQGIS

En el post anterior se consideró el método ‘closestSegmentWithContext’ para determinar y expresar mediante un segmento de línea la distancia mínima desde el centroide hasta los lados de un vectorial tipo polígono usando la Python Console de QGIS. En este, el método a emplear es ‘closestVertexWithContext’ y también se le pasa como parámetro el centroide de la geometría.

El resultado de aplicación del referido método devuelve una tupla con la distancia mínima (al cuadrado) desde el centroide al vértice (que como verificación imprimeremos como distancia) y el índice del vértice correspondiente a esa geometría para el que ocurre la distancia mínima. El código empleado es el siguiente:

from math import sqrt

layer = iface.activeLayer()

features = [feat for feat in layer.getFeatures()]

centroids = [feat.geometry().centroid().asPoint() for feat in features]

n = len(features)

idx_close_points = [features[i].geometry().closestVertexWithContext(QgsPoint(centroids[i]))[1] 
                    for i in range(n)]

dtc_close_points = [sqrt(features[i].geometry().closestVertexWithContext(QgsPoint(centroids[i]))[0]) 
                    for i in range(n)]

polygons = [ feat.geometry().asPolygon() for feat in features ]

close_points = [ polygons[i][0][idx_close_points[i]] for i in range(n) ]

crs = layer.crs()

epsg = crs.postgisSrid()

uri = "LineString?crs=epsg:" + str(epsg) + "&field=id:integer""&field=distance&index=yes"

dist = QgsVectorLayer(uri, 
                      'dist', 
                      'memory')

QgsMapLayerRegistry.instance().addMapLayer(dist)

prov = dist.dataProvider()

feats = [QgsFeature() for i in range(n)]

for i in range(n):
    feats[i].setGeometry(QgsGeometry.fromPolyline([centroids[i], close_points[i]]))
    feats[i].setAttributes([i, feats[i].geometry().length()])

prov.addFeatures(feats)

print dtc_close_points

Se ejecutó en la Python Console para el vectorial tipo polígono de la imagen siguiente:

vertex1

Como puede observarse en la imagen, los valores de distancia (provenientes de la tupla que devuelve ‘closestVertexWithContext’) impresos en la Python Console coinciden con los introducidos en la tabla atributiva del vectorial y que fueron determinados por el método ‘length’ de QgsGeometry.

Esta entrada fue publicada en PyQGIS, QGIS, SIG, Software Libre. Guarda el enlace permanente.

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s