HOW TO

Erstellen von Polygonen aus einer CSV-Datei mit Koordinaten mithilfe von ArcPy

Last Published: March 23, 2023

Zusammenfassung

In ArcGIS Pro können mithilfe von Geoverarbeitungswerkzeugen Polygone erstellt werden, indem die X- und Y-Punktkoordinaten aus einer CSV-Datei referenziert werden. Dieser Vorgang kann auch mit dem ArcPy-Modul automatisiert werden. Führen Sie den in diesem Artikel beschriebenen Workflow aus, um Polygone aus einer CSV-Datei mithilfe einer eigenständigen Python-Datei (.py) zu erstellen. Das Python-Skript kann auch in Jupyter Notebook und im Python-Fenster ausgeführt werden.

Vorgehensweise

Note:
All field values in the CSV file must be numeric data type. If there are text field values, the Python script fails.
  1. Erstellen Sie eine Datei mit der Erweiterung .py.
  2. Geben Sie das Skript unten in der Datei an, bevor Sie das Skript ausführen.
    1. Importieren Sie die erforderlichen Module.
import csv
import os
import arcpy
  1. Definieren Sie den Pfad des CSV-Dateiordners, den CSV-Dateinamen, den neuen Shapefile-Namen und den Raumbezug als Variablen.
in_dir = r"<CSVFileFolderPath>"
csvFile = "<fileName>.csv"
fc = "<newShapefileName>"
in_csv = os.path.join(in_dir, csvFile)
sr = arcpy.SpatialReference(<projectedCoordinateSystemWKID>)
  1. Wenden Sie die Funktion "CreateFeatureclass()" an, um ein Polygon-Shapefile in dem in Schritt 2(b) angegebenen Ordner zu erstellen.
arcpy.management.CreateFeatureclass(
    in_dir, fc, geometry_type="POLYGON", spatial_reference=sr
)
out_feature_class = os.path.join(in_dir, fc)
  1. Wenden Sie die Funktion "AddField()" an, um den Feldnamen im Shapefile hinzuzufügen.
arcpy.management.AddField(out_feature_class, "<fieldName>", "LONG")
  1. Wenden Sie die Funktion "InsertCursor()" an, um eine neue Zeile in einer Attributtabelle einzufügen. Wenden Sie die Funktion "append()" an, um den Punkt zum Punktarray des Features hinzuzufügen. Wenden Sie die Funktion "arcpy.Polygon()" an, um das Polygon zu erstellen. Die folgenden Abfrageanweisungen durchlaufen die Daten in der CSV-Datei. "row[0]" bezieht sich auf die Position der Punktgruppen-ID-Nummer, "row[1]" bezieht sich auf die Position der X-Koordinatendaten, und "row[2]" bezieht sich auf die Position der Y-Koordinatendaten in der CSV-Datei.
with arcpy.da.InsertCursor(out_feature_class, ["SHAPE@", "<fieldName>"]) as cursor:
    point_list = []
    parcel_value = None
    is_first_pass = True

    with open(in_csv, mode="r") as csv_file:
        csv_reader = csv.reader(csv_file, delimiter=",")
        header = next(csv_reader)
        for row in csv_reader:

            if is_first_pass:
                parcel_value = row[0]
                is_first_pass = False
            elif row[0] != parcel_value:
                polygon = arcpy.Polygon(arcpy.Array(point_list), sr)
                cursor.insertRow([polygon, parcel_value])
                parcel_value = row[0]
                point_list = []

            point_list.append(arcpy.Point(row[1], row[2]))

        polygon = arcpy.Polygon(arcpy.Array(point_list), sr)
        cursor.insertRow([polygon, parcel_value])
  1. Wenden Sie die Funktion "print()" an, um eine Meldung anzuzeigen, wenn die Polygone erstellt wurden.
print("COMPLETED")

Mit dem folgenden Code-Block wird das voll funktionsfähige Skript demonstriert.

import csv
import os
import arcpy

in_dir = r"C:\Users\ISC-DT25\Documents\Artwork\Art 29483"
csvFile = "par_point-TEST.csv"
fc = "polygonFromCSV"
in_csv = os.path.join(in_dir, csvFile)
sr = arcpy.SpatialReference(32049)

arcpy.management.CreateFeatureclass(
    in_dir, fc, geometry_type="POLYGON", spatial_reference=sr
)
out_feature_class = os.path.join(in_dir, fc)
arcpy.management.AddField(out_feature_class, "POINTID", "LONG")

with arcpy.da.InsertCursor(out_feature_class, ["SHAPE@", "POINTID"]) as cursor:
    point_list = []
    parcel_value = None
    is_first_pass = True

    with open(in_csv, mode="r") as csv_file:
        csv_reader = csv.reader(csv_file, delimiter=",")
        header = next(csv_reader)
        for row in csv_reader:

            if is_first_pass:
                parcel_value = row[0]
                is_first_pass = False
            elif row[0] != parcel_value:
                polygon = arcpy.Polygon(arcpy.Array(point_list), sr)
                cursor.insertRow([polygon, parcel_value])
                parcel_value = row[0]
                point_list = []

            point_list.append(arcpy.Point(row[1], row[2]))

        polygon = arcpy.Polygon(arcpy.Array(point_list), sr)
        cursor.insertRow([polygon, parcel_value])

print("COMPLETED")
  1. Öffnen Sie das neu erstellte Shapefile in ArcGIS Pro über eine Ordnerverbindung im Bereich Katalog. Weitere Informationen finden Sie unter ArcGIS Pro: Hinzufügen von Shapefiles zur Karte.

Artikel-ID: 000029483

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