PROCÉDURE
Dans ArcGIS Pro, les entités ponctuelles peuvent être connectées à des entités linéaires à l’aide de l’outil Points To Line (Points vers lignes). Dans certains cas, il est nécessaire de placer des lignes de connexion d’un groupe d’entités ponctuelles sur un point sélectionné dans une autre classe d’entités ponctuelles. Toutefois, à l’aide de l’outil Points vers lignes, les lignes générées se connectent uniquement aux points de la même classe d’entités ponctuelles, comme illustré dans l’image ci-dessous.
La procédure suivante décrit comment connecter par programmation des points d’une classe d’entités à une entité ponctuelle unique d’une autre classe d’entités avec des lignes à l’aide d’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>")
Le bloc de code ci-dessous illustre le script complet.
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")
L’image ci-dessous montre des entités linéaires connectant un groupe d’entités ponctuelles à une entité ponctuelle sélectionnée dans une autre classe d’entités.
ID d’article: 000029537
Obtenir de l’aide auprès des experts ArcGIS
Télécharger l’application Esri Support