HOW TO

Festlegen von Linien von Punkten in einer Feature-Class zu einem einzelnen Punkt in einer anderen Feature-Class mithilfe von ArcPy

Last Published: March 8, 2023

Zusammenfassung

In ArcGIS Pro können Punkt-Features mit dem Werkzeug Punkte in Linie mit Linien-Features verbunden werden. In einigen Fällen ist es erforderlich, Verbindungslinien von einer Gruppe von Punkt-Features zu einem ausgewählten Punkt in einer anderen Point-Feature-Class festzulegen. Bei Verwendung des Werkzeugs "Punkte in Linie" werden die generierten Linien jedoch nur mit den Punkten aus derselben Point-Feature-Class verbunden, wie in der folgenden Abbildung dargestellt.

Die Ausgabe nach der Verwendung des Werkzeugs "Punkte in Linie"

Das folgende Verfahren beschreibt, wie Sie mithilfe von ArcPy programmgesteuert Punkte in einer Feature-Class mit einem einzelnen Punkt-Feature in einer anderen Feature-Class mit Linien verbinden.

Vorgehensweise

  1. Öffnen Sie in ArcGIS Pro die Karte mit den Point- und Line-Feature-Classes.
  2. Wählen Sie ein Punkt-Feature auf der Karte aus. Weitere Informationen finden Sie unter ArcGIS Pro: Interaktives Auswählen von Features.
  3. Öffnen des Python-Fensters Weitere Informationen finden Sie unter ArcGIS Pro: Python-Fenster.
  4. Führen Sie das folgende Skript aus:
    1. Importieren Sie die erforderlichen Module, und legen Sie die Namen für die erforderlichen Punkt- und Linien-Feature-Layer fest.
import arcpy

<VariableName1> = "<PointName1>"
<VariableName2> = "<PointName2>"
<VariableName3> = "<LineName>"
  1. Wählen Sie in der Karte einen Punkt in <VariableName1> und einen oder mehrere Punkte in <VariableName2> aus.
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. Rufen Sie die Koordinaten des einen ausgewählten Punktes in <VariableName1> ab.
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. Erstellen Sie bei Bedarf eine neue Feature-Class, um die Linien zu speichern.
if not arcpy.Exists(VariableName3):
  arcpy.management.CreateFeatureclass(arcpy.env.workspace, "<LineName>", "POLYLINE")
  1. Erstellen Sie ein Array zum Speichern der Liniengeometrie, und führen Sie die Funktion "arcpy.da.SearchCursor()" aus.
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. Fügen Sie den Start- und Endpunkt an das Linien-Array an.
line_array.append(start_point.centroid)
line_array.append(end_point.centroid)
  1. Erstellen Sie ein Polylinienobjekt aus dem Linien-Array.
line = arcpy.Polyline(line_array)
line_array.removeAll()
  1. Verwenden Sie den Einfüge-Cursor, um die Linie in die Lines-Feature-Class einzufügen.
with arcpy.da.InsertCursor(<VariableName3>, ["SHAPE@"]) as icursor:
  icursor.insertRow([line])

  1. Fügen Sie der Karte den Linien-Layer hinzu, um die Anzeige zu aktualisieren. Drücken Sie zweimal die Eingabetaste.
arcpy.management.MakeFeatureLayer(<VariableName3>,"<LineName>")

Im folgenden Code-Block finden Sie das vollständige Skript.

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")

Die folgende Abbildung zeigt Linien-Features, die eine Gruppe von Punkt-Features mit einem ausgewählten Punkt-Feature in einer anderen Feature-Class verbinden.

Linien aus einer Gruppe von Punkt-Features verbunden mit einer anderen ausgewählten Point-Feature-Class

Artikel-ID: 000029537

Benachrichtigungen erhalten und Lösungen für neue oder häufige Probleme finden

Unser neuer KI-Chatbot stellt zusammengefasste Antworten und Videolösungen für Sie bereit.

Esri Support App herunterladen

Zugehörige Informationen

Weitere Informationen zu diesem Thema erkunden

Unterstützung durch ArcGIS-Experten anfordern

An den technischen Support wenden

Esri Support App herunterladen

Zu Download-Optionen wechseln