Instrução
No ArcGIS Pro, as feições de ponto podem ser conectadas com feições de linha utilizando a ferramenta Pontos para Linha . Em alguns casos, há uma necessidade de colocar linhas de conexão de um grupo de feições de ponto para um ponto selecionado em uma classe de feição de ponto diferente. No entanto, usando a ferramenta Pontos para Linha, as linhas geradas se conectam somente aos pontos da mesma classe de feição de ponto, conforme mostrado na imagem abaixo.
O procedimento a seguir descreve como conectar programaticamente pontos em uma classe de feição a uma feição de ponto único em outra classe de feição com linhas utilizando ArcPy.
import arcpy <VariableName1> = "<PointName1>" <VariableName2> = "<PointName2>" <VariableName3> = "<LineName>"
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>"
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)))
if not arcpy.Exists(VariableName3): arcpy.management.CreateFeatureclass(arcpy.env.workspace, "<LineName>", "POLYLINE")
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)))
line_array.append(start_point.centroid) line_array.append(end_point.centroid)
line = arcpy.Polyline(line_array) line_array.removeAll()
with arcpy.da.InsertCursor(<VariableName3>, ["SHAPE@"]) as icursor: icursor.insertRow([line])
arcpy.management.MakeFeatureLayer(<VariableName3>,"<LineName>")
O bloco de código abaixo demonstra o 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")
A imagem abaixo mostra feições de linha conectando um grupo de feições de ponto a uma feição de ponto selecionada em outra classe de feição.
ID do Artigo: 000029537
Obtenha ajuda de especialistas do ArcGIS
Baixe o Aplicativo de Suporte da Esri