CÓMO

Crear polígonos a partir de un archivo CSV con coordenadas utilizando ArcPy

Last Published: March 23, 2023

Resumen

En ArcGIS Pro, las herramientas de geoprocesamiento se pueden utilizar para crear polígonos haciendo referencia a los datos de coordenadas de puntos x e y de un archivo CSV. Este proceso también se puede automatizar utilizando el módulo ArcPy. Siga el flujo de trabajo descrito en este artículo para crear polígonos a partir de un archivo CSV mediante un archivo de Python independiente (.py). El script de Python también se ejecuta en Jupyter Notebook y en la ventana de Python.

Procedimiento

Note:
All field values in the CSV file must be numeric data type. If there are text field values, the Python script fails.
  1. Cree un archivo con la extensión .py.
  2. Especifique el siguiente script en el archivo antes de ejecutar el script.
    1. Importe los módulos necesarios.
import csv
import os
import arcpy
  1. Defina como variables la ruta de la carpeta del archivo CSV, el nombre del archivo CSV, el nuevo nombre del shapefile y la referencia espacial.
in_dir = r"<CSVFileFolderPath>"
csvFile = "<fileName>.csv"
fc = "<newShapefileName>"
in_csv = os.path.join(in_dir, csvFile)
sr = arcpy.SpatialReference(<projectedCoordinateSystemWKID>)
  1. Aplique la función CreateFeatureclass() para crear un shapefile de polígono en la carpeta especificada en el paso 2(b).
arcpy.management.CreateFeatureclass(
    in_dir, fc, geometry_type="POLYGON", spatial_reference=sr
)
out_feature_class = os.path.join(in_dir, fc)
  1. Aplique la función AddField() para agregar el nombre del campo en el shapefile.
arcpy.management.AddField(out_feature_class, "<fieldName>", "LONG")
  1. Aplique la función InsertCursor() para insertar una nueva fila en una tabla de atributos. Aplique la función append() para agregar el punto a la matriz de puntos de la entidad. Aplique la función arcpy.Polygon() para crear el polígono. Las siguientes instrucciones de consulta recorren en iteración los datos del archivo CSV. «row[0]» se refiere a la posición del número de Id. del grupo de puntos, «row[1]» se refiere a la posición de los datos de la coordenada X y «row[2]» se refiere a la posición de los datos de la coordenada Y en el archivo 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. Aplique la función print() para mostrar un mensaje cuando se crean los polígonos.
print("COMPLETED")

El siguiente bloque de código muestra el script completo.

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. Abra el shapefile recién creado en ArcGIS Pro utilizando una conexión de carpeta en el panel Catálogo. Consulte ArcGIS Pro: Agregar un shapefile al mapa para obtener más información.

Id. de artículo: 000029483

Recibir notificaciones y encontrar soluciones a problemas nuevos o comunes

Obtenga respuestas resumidas y soluciones de vídeo de nuestro nuevo chatbot de IA.

Descargar la aplicación de soporte de Esri

Información relacionada

Descubrir más sobre este tema

Obtener ayuda de expertos en ArcGIS

Contactar con el soporte técnico

Descargar la aplicación de soporte de Esri

Ir a opciones de descarga