2 votos

Puntos a segmentos de ruta

Tengo una figura de puntos (ID, valor) que he convertido en un camino (puntos a camino). ¿Es posible obtener las líneas entre cada punto? La imagen a continuación muestra a lo que me refiero. El camino de colores es lo que quiero obtener.

¿Hay alguna herramienta o solución alternativa?

introducir descripción de la imagen aquí

2voto

Mue Puntos 2469

Existe un script en la colección de scripts en línea para el complemento Processing llamado "Líneas de distancia entre puntos", que utiliza una capa de puntos de entrada y crea una capa de líneas de salida. Las líneas en la capa de salida se dividen entre los puntos y contienen solo un campo de distancia.

Puedes acceder a esto desde:

Processing Toolbox > Scripts > Tools > Obtener scripts de la colección de scripts en línea

Un problema con el script es que crea líneas desde cada punto a cada otro punto lo que puede causar superposiciones. He editado ligeramente el código reemplazando la declaración de if existente (que evita duplicados):

if feature1.id() < feature2.id():

con

if feature2.id() == feature1.id() + 1:

ya que esto solo crea líneas desde una característica al anterior, evitando así duplicados o superposiciones:

Líneas de distancia entre puntos

Nota: Esto solo funcionará eficientemente si el id() de cada punto está ordenado correctamente.


Aquí está el código completo:

##Líneas de distancia entre puntos=nombre
##Vector=grupo
##CapaDePuntos=vector
##CapaDeSalida=vector de salida

from qgis.core import *
from PyQt4.QtCore import *
from processing.tools.vector import VectorWriter

inputLayer = processing.getObject(pointLayer)
# crear nueva capa para la salida:
fields = [QgsField('distance', QVariant.Double)]
writer = VectorWriter(outputLayer, None, fields, QGis.WKBLineString, inputLayer.crs())
# recorrer todos los puntos:
iter1 = inputLayer.getFeatures()
for feature1 in iter1:
    p1 = feature1.geometry().asPoint()
    # recorrer todos los puntos nuevamente:
    iter2 = inputLayer.getFeatures()
    for feature2 in iter2:
        # la siguiente línea crea líneas desde una característica al anterior:
        if feature2.id() == feature1.id() + 1:
            # crear una nueva característica de línea:
            p2 = feature2.geometry().asPoint()
            l = QgsGeometry.fromPolyline([p1,p2])
            feat = QgsFeature()
            feat.setGeometry(l)
            feat.setAttributes([l.length()])
            writer.addFeature(feat)
del writer

1voto

ArMoraer Puntos 338

Hay una herramienta llamada v.split.vert en la sección GRASS de la caja de herramientas de procesamiento.

enter image description here

En el campo Número máximo de vértices en el segmento, simplemente coloque 2. Esto debería crear una nueva capa de línea con todos sus segmentos como entidades separadas.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X