CÓMO

Colocar líneas desde puntos en una clase de entidad a un solo punto en otra clase de entidad usando ArcPy.

Last Published: March 8, 2023

Resumen

En ArcGIS Pro, las entidades de puntos se pueden conectar con entidades de línea mediante la herramienta De puntos a línea. En algunos casos, es necesario colocar líneas de conexión desde un grupo de entidades de puntos hasta un punto seleccionado en una clase de entidad de puntos diferente. Sin embargo, al utilizar la herramienta De puntos a línea, las líneas generadas solo se conectan a los puntos de la misma clase de entidad de puntos, como se muestra en la siguiente imagen.

La salida después de utilizar la herramienta De puntos a línea

El siguiente procedimiento describe cómo conectar mediante programación puntos en una clase de entidad a una entidad de un solo punto en otra clase de entidad con líneas utilizando ArcPy.

Procedimiento

  1. En ArcGIS Pro, abra el mapa que contiene las clases de entidad de punto y línea.
  2. En el mapa, seleccione una entidad de puntos. Consulte ArcGIS Pro: Seleccionar entidades de forma interactiva para obtener más información.
  3. Abra la ventana de Python. Consulte ArcGIS Pro: ventana de Python para obtener más información.
  4. Ejecute el siguiente script:
    1. Importe los módulos necesarios y defina los nombres de las capas de entidades de puntos y líneas necesarias.
import arcpy

<VariableName1> = "<PointName1>"
<VariableName2> = "<PointName2>"
<VariableName3> = "<LineName>"
  1. Seleccione un punto de <VariableName1> y uno o más puntos de <VariableName2> en el mapa.
assert arcpy.management.GetCount(points_layer1)[0] == "1", "select exactly 1 point from <VariableName1>"
assert int(arcpy.management.GetCount(points_layer1)[0]) > 0, "select > 0 point(s) from <VariableName2>"
  1. Obtenga las coordenadas del punto seleccionado en <VariableName1>.
with arcpy.da.SearchCursor(<VariableName1>, ["SHAPE@XY"]) as cursor:
  for row in cursor:
    end_x, end_y = row[0]
    end_point = arcpy.PointGeometry(arcpy.Point(float(end_x), float(end_y)))
  1. Si es necesario, cree una nueva clase de entidad para almacenar las líneas.
if not arcpy.Exists(VariableName3):
  arcpy.management.CreateFeatureclass(arcpy.env.workspace, "<LineName>", "POLYLINE")
  1. Cree una matriz para almacenar la geometría de la línea y ejecute la función arcpy.da.SearchCursor().
line_array = arcpy.Array()

with arcpy.da.SearchCursor(<VariableName2>, ["SHAPE@XY"]) as cursor:
  for row in cursor:
    start_x, start_y = row[0]
    start_point = arcpy.PointGeometry(arcpy.Point(float(start_x), float(start_y)))
  1. Añada los puntos inicial y final a la matriz en línea.
line_array.append(start_point.centroid)
line_array.append(end_point.centroid)
  1. Cree un objeto de polilínea a partir de la matriz de líneas.
line = arcpy.Polyline(line_array)
line_array.removeAll()
  1. Utilice el cursor de inserción para insertar la línea en la clase de entidad de líneas.
with arcpy.da.InsertCursor(<VariableName3>, ["SHAPE@"]) as icursor:
  icursor.insertRow([line])

  1. Agregue la capa de líneas al mapa para actualizar la visualización. Pulse dos veces la tecla Intro.
arcpy.management.MakeFeatureLayer(<VariableName3>,"<LineName>")

El siguiente bloque de código demuestra el script completo.

import arcpy

points_layer1 = "facilities"
points_layer2 = "pts"
lines_layer = "lines"

assert arcpy.management.GetCount(points_layer1)[0] == "1", "select exactly 1 point from points_layer1"
assert int(arcpy.management.GetCount(points_layer1)[0]) > 0, "select > 0 point(s) from points_layer2"

with arcpy.da.SearchCursor(points_layer1, ["SHAPE@XY"]) as cursor:
  for row in cursor:
    end_x, end_y = row[0]
    end_point = arcpy.PointGeometry(arcpy.Point(float(end_x), float(end_y)))

if not arcpy.Exists(lines_layer):
  arcpy.management.CreateFeatureclass(arcpy.env.workspace, "lines", "POLYLINE")

line_array = arcpy.Array()

with arcpy.da.SearchCursor(points_layer2, ["SHAPE@XY"]) as cursor:
  for row in cursor:
    start_x, start_y = row[0]
    start_point = arcpy.PointGeometry(arcpy.Point(float(start_x), float(start_y)))
   
    line_array.append(start_point.centroid)
    line_array.append(end_point.centroid)

    line = arcpy.Polyline(line_array)
    line_array.removeAll()
   
    with arcpy.da.InsertCursor(lines_layer, ["SHAPE@"]) as icursor:
      icursor.insertRow([line])
     
arcpy.management.MakeFeatureLayer(lines_layer,"lines")

La siguiente imagen muestra entidades de línea que conectan un grupo de entidades de puntos con una entidad de puntos seleccionada en otra clase de entidad.

Líneas conectadas desde un grupo de entidades de puntos a una clase de entidad de puntos diferente seleccionada

Id. de artículo: 000029537

Recibir notificaciones y encontrar soluciones a problemas nuevos o comunes

Obtenga respuestas resumidas y soluciones de vídeo de nuestro nuevo chatbot de IA.

Descargar la aplicación de soporte de Esri

Información relacionada

Descubrir más sobre este tema

Obtener ayuda de expertos en ArcGIS

Contactar con el soporte técnico

Descargar la aplicación de soporte de Esri

Ir a opciones de descarga