Segmento de línea más corto desde un vectorial de puntos a otro de línea o polígono mediante PyQGIS

El código propuesto de esta respuesta en gis.stackexchange.com fue adaptado, pensando en un posible plugin, para determinar el segmento de línea más corto desde un vectorial de puntos a otro de línea mediante la Python Console de QGIS. El código adaptado es el siguiente:

mapcanvas = iface.mapCanvas()

layers = mapcanvas.layers()

p_lyr = layers[0]
l_lyr = layers[1]

epsg = p_lyr.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()

points_features = [point_feature for point_feature in p_lyr.getFeatures()]

feats = []

for p in points_features:
    minDistPoint = min([l.geometry().closestSegmentWithContext( p.geometry().asPoint() ) for l in lines_features])[1]
    feat = QgsFeature()
    feat.setGeometry(QgsGeometry.fromPolyline([p.geometry().asPoint(), minDistPoint]))
    feat.setAttributes([points_features.index(p),feat.geometry().length()])
    feats.append(feat)

prov.addFeatures(feats)

Fue probado para esta situación (vectoriales de líneas que representan curvas cerradas) en el Map Canvas de QGIS:

segments1

cuyo resultado fue el siguiente:

segments2

También se probó con el vectorial de línea de la imagen a continuación:

segments3

para el cual también se obtuvo un resultado satisfactorio.

segments4

No obstante, también se me ocurrió probar el código con vectoriales tipo polígono y funcionó; tal como se observa en la imagen siguiente:

segments5

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

2 respuestas a Segmento de línea más corto desde un vectorial de puntos a otro de línea o polígono mediante PyQGIS

  1. luis3176 dijo:

    Excelente una ayuda estupenda para un análisis de redes, transporte o servicios. Como conectar las redes de abastecimiento a casas, entre otras. Aprovecho para traer otra consulta esta vez sobre MDE en estudios hidrológicos, actualmente existen MDE libres descarga ASTER y SRTM, ademas podemos crear uno de la cartografía disponible, pero como puedo corregir o adecuar los MDE ASTER o SRTM para estudios hidrológicos, delimitación de cuencas, morfología en general. Vi que se puede hacer en ArcGis pero como lo haría con software libre?
    Sabias que podemos ya descargar MDE de resolución 12,5 metros sin costos! yo apenas me entere voy a revisarlos

  2. Pingback: Próximos post sobre segmentos al punto más cercano (replicando los post de Jose Guerrero en gvSIG) | másquesig

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