PROCÉDURE

créer des polygones à partir d’un fichier CSV avec des coordonnées à l’aide d’ArcPy

Last Published: March 23, 2023

Résumé

Dans ArcGIS Pro, les outils de géotraitement peuvent être utilisés pour créer des polygones en référençant les données de coordonnées des points x et y à partir d’un fichier CSV. Ce traitement peut également être automatisé à l’aide du module ArcPy. Suivez le processus décrit dans cet article pour créer des polygones à partir d’un fichier CSV à l’aide d’un fichier Python autonome (.py). Le script Python s’exécute également dans Jupyter Notebook et dans la fenêtre Python.

Procédure

Note:
All field values in the CSV file must be numeric data type. If there are text field values, the Python script fails.
  1. Créez un fichier avec l’extension .py.
  2. Spécifiez le script ci-dessous dans le fichier avant d’exécuter le script.
    1. Importez les modules nécessaires.
import csv
import os
import arcpy
  1. Définissez le chemin d’accès au dossier du fichier CSV, le nom du fichier CSV, le nouveau nom du shapefile et la référence spatiale en tant que variables.
in_dir = r"<CSVFileFolderPath>"
csvFile = "<fileName>.csv"
fc = "<newShapefileName>"
in_csv = os.path.join(in_dir, csvFile)
sr = arcpy.SpatialReference(<projectedCoordinateSystemWKID>)
  1. Appliquez la fonction CreateFeatureclass() pour créer un shapefile surfacique dans le dossier spécifié à l’étape 2(b).
arcpy.management.CreateFeatureclass(
    in_dir, fc, geometry_type="POLYGON", spatial_reference=sr
)
out_feature_class = os.path.join(in_dir, fc)
  1. Appliquez la fonction AddField() pour ajouter le nom du champ dans le shapefile.
arcpy.management.AddField(out_feature_class, "<fieldName>", "LONG")
  1. Appliquez la fonction InsertCursor() pour insérer une nouvelle ligne dans une table attributaire. Appliquez la fonction append() pour ajouter le point au tableau de points de l’entité. Appliquez la fonction arcpy. Polygon() pour créer le polygone. Les instructions de requête suivantes parcourent les données du fichier CSV. « row[0] » fait référence à la position du numéro d’identification du groupe de points, « row[1] » fait référence à la position des données de coordonnées X et « row[2] » fait référence à la position des données de coordonnées Y dans le fichier CSV.
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. Appliquez la fonction print() pour afficher un message lorsque les polygones sont créés.
print("COMPLETED")

Le bloc de code ci-dessous illustre le script opérationnel complet.

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. Ouvrez le shapefile nouvellement créé dans ArcGIS Pro à l’aide d’une connexion aux dossiers dans la fenêtre Catalogue. Pour plus d’informations, reportez-vous à la rubrique ArcGIS Pro : Ajouter un shapefile dans la carte.

ID d’article: 000029483

Recevoir des notifications et trouver des solutions liées à de nouvelles questions ou à des problèmes connus

Recevez des réponses synthétisées et des solutions en vidéo de notre nouvel agent conversationnel (IA).

Télécharger l’application Esri Support

Informations associées

En savoir plus sur ce sujet

Obtenir de l’aide auprès des experts ArcGIS

Contacter le support technique

Télécharger l’application Esri Support

Accéder aux options de téléchargement