Instrução

Criar polígonos a partir de um arquivo CSV com coordenadas usando ArcPy

Last Published: March 23, 2023

Resumo

No ArcGIS Pro, as ferramentas de geoprocessamento podem ser utilizadas para criar polígonos referenciando os dados de coordenadas de ponto x e y de um arquivo CSV. Esse processo também pode ser automatizado usando o módulo ArcPy. Siga o fluxo de trabalho descrito neste artigo para criar polígonos a partir de um arquivo CSV usando um arquivo Python independente (.py). O script Python também é executado no Jupyter Notebook e na janela do Python.

Procedimento

Note:
All field values in the CSV file must be numeric data type. If there are text field values, the Python script fails.
  1. Crie um arquivo com a extensão .py.
  2. Especifique o script abaixo no arquivo antes de executá-lo.
    1. Importe os módulos necessários.
import csv
import os
import arcpy
  1. Defina o caminho da pasta do arquivo CSV, o nome do arquivo CSV, o novo nome do shapefile e a referência espacial como variáveis.
in_dir = r"<CSVFileFolderPath>"
csvFile = "<fileName>.csv"
fc = "<newShapefileName>"
in_csv = os.path.join(in_dir, csvFile)
sr = arcpy.SpatialReference(<projectedCoordinateSystemWKID>)
  1. Aplique a função CreateFeatureclass() para criar um shapefile de polígono na pasta especificada na Etapa 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 a função AddField() para adicionar o nome do campo no shapefile.
arcpy.management.AddField(out_feature_class, "<fieldName>", "LONG")
  1. Aplique a função InsertCursor() para inserir uma nova linha em uma tabela de atributos. Aplique a função append() para adicionar o ponto à matriz de pontos da feição. Aplique a função arcpy.Polygon() para criar o polígono. As instruções de consulta a seguir iteram por meio dos dados no arquivo CSV. 'row[0]' faz referência à posição do número de ID do grupo de pontos, 'row[1]' faz referência à posição dos dados da coordenada X e 'row[2]' faz referência à posição dos dados da coordenada Y no arquivo 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 a função print() para mostrar uma mensagem quando os polígonos forem criados.
print("COMPLETED")

O bloco de código abaixo demonstra o funcionamento completo do script.

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 o shapefile recém-criado no ArcGIS Pro utilizando uma conexão de pasta no painel Catálogo . Consulte ArcGIS Pro: Adicionar um shapefile no mapa para mais informações.

ID do Artigo: 000029483

Receba notificações e encontre soluções para problemas novos ou comuns

Obtenha respostas resumidas e soluções de vídeo do nosso novo chatbot de IA.

Baixe o Aplicativo de Suporte da Esri

Informações Relacionadas

Descubra mais sobre este tema

Obtenha ajuda de especialistas do ArcGIS

Entre em contato com Suporte Técnico

Baixe o Aplicativo de Suporte da Esri

Ir para as opções de download