Distancia mínima desde el centroide hasta los lados de un vectorial tipo polígono (irregular) mediante PyQGIS

En los posts precedentes se han explorado varios métodos de la clase QgsGeometry para realizar geoproceso o caracterización de geometrías (punto, línea, polígono). En este artículo se va a considerar 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.

Este método, aplicado a la geometría tipo polígono, requiere que se le pase como parámetro un QgsPoint, en este caso el centroide, para devolver una tupla con la distancia mínima (al cuadrado) hasta el segmento (lado) de esa geometría, el punto de intersección con ese segmento más próximo y, finalmente, el índice del vértice siguiente al referido segmento en la geometría tipo polígono.

El código probado se encuentra a continuación:

layer = iface.activeLayer()

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

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

n = len(features)

close_points = [features[i].geometry().closestSegmentWithContext(QgsPoint(centroids[i]))[1] 
                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)

Al ejecutarlo en la Python Console de QGIS para la situación que se encuentra a continuación:

minimum1

el resultado es satisfactorio y se observa que en la tabla atributiva de la memory layer se incluye, además del id, la referida distancia mínima.

Si el vectorial es simétrico y con más de una distancia mínima, como el de la imagen siguiente, sólo se determina la primera que “encuentra”.

minimum2

Habría que modificar el código para que haga la evaluación para el lado siguiente (porque la tupla devuelve, como tercer elemento, el índice del último vértice de ese primer segmento que encuentra).

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

Una respuesta a Distancia mínima desde el centroide hasta los lados de un vectorial tipo polígono (irregular) mediante PyQGIS

  1. Pingback: Distancia mínima desde el centroide hasta los vértices de un vectorial tipo polígono mediante PyQGIS | El Blog de José Guerrero

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