9 votos

¿Creando una capa de la línea une varios puntos en la capa a un punto en otra capa?

Vamos a decir que hay punto A capa con 300 puntos y punto capa B con un punto

¿Cómo crear una capa de línea que conecta todos los puntos en la capa A un punto en la capa B?

Usar QGIS o PostGIS.

4voto

Mue Puntos 2469

En QGIS, puede utilizar los Puntos de conexión plugin que se puede descargar desde:

Plugins > Manage and Install Plugins...

Ejemplo:

  1. Aquí hay un par de capas, layer_A tiene un montón de puntos; layer_B tiene uno. Asegúrese de que ambas capas contienen un campo de entero donde los valores son exactamente los mismos (por ejemplo, mis dos capas tienen un id campo donde todos los valores son 1). El plugin utiliza para conectar los puntos. Cuando el plugin está activado, ir a su configuración:

    Interface


  1. Seleccione las opciones:

    Settings


  1. Resultado:

    Result

3voto

Saad Puntos 57

Si las capas son puntos esta debajo de consulta debe trabajar justo clavija en sus propios datos. Hice una prueba con la creación de líneas de 1 capa con 150 filas de punto y otra con 1 punto

drop table if exists line;
create table line as
select layer1.id ,st_makeline(layer1.geom,point.geom) as geom from layer1,point

enter image description here

3voto

Geoffrey Puntos 228

Suponiendo que a partir de esta situación (una capa de puntos con una característica y una capa de puntos con 300 características):

enter image description here

puede ejecutar este código en la Consola de Python (después de haber cargado las dos capas de interés en QGIS):

from qgis.core import *
from qgis.PyQt.QtCore import QVariant

layer1 = QgsMapLayerRegistry.instance().mapLayersByName('1point')[0]
crs = layer1.crs().toWkt()
layer2 = QgsMapLayerRegistry.instance().mapLayersByName('300points')[0]

outLayer = QgsVectorLayer('Linestring?crs='+ crs, 'line_output' , 'memory')
prov = outLayer.dataProvider()
fields = layer1.pendingFields()
for field in layer2.pendingFields():
    fields.append(field)
prov.addAttributes(fields)
outLayer.updateFields()

for feature in layer1.getFeatures():
    coords = feature.geometry().asPoint()
    attr1 = feature.attributes()

    for feat in layer2.getFeatures():
        seg_start = coords
        seg_end = feat.geometry().asPoint()
        attr2 = feat.attributes()
        attrs = attr1 + attr2
        outGeom = QgsFeature()
        outGeom.setGeometry(QgsGeometry.fromPolyline([seg_start, seg_end]))
        outGeom.setAttributes(attrs)
        prov.addFeatures([outGeom])

QgsMapLayerRegistry.instance().addMapLayer(outLayer)

para la obtención de este resultado:

enter image description here

Sólo la necesidad de adaptar los nombres de las capas ('1point' y '300points') a los nombres con los que se cargan en el Panel Capas.

Mi enfoque de trabajo independientemente de la cantidad de características de ambas capas.

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