4 votos

Capa de eventos a clase de característica - ¿método más rápido?

Hay tres métodos para convertir la salida de una capa de eventos Make XY en una Feature Class :

  • Características de la copia
  • Característica a punto
  • Clase de característica a clase de característica

¿Cuál es el método más rápido? Necesito convertir una gran cantidad de puntos almacenados en una tabla csv (archivo de 1,5 GB) y me pregunto cuál es la mejor manera de hacerlo.

Utilizaré el geoprocesamiento en segundo plano en una máquina de 64 bits.

4voto

zfz Puntos 111

He encontrado un modelo de constructor de modelos para ser más rápido: "Hacer capa de eventos X Y" seguido de "Clase de característica a clase de característica"

model example

3voto

Charles Burns Puntos 145

Este es un ejemplo de la técnica que mencioné en mi comentario a tu pregunta. Leer un CSV y rellenar una clase de característica con sus valores puede ser fácil. El script asume que el Latitud es la primera columna y Longitud es la segunda columna. Puede ajustar el sistema de coordenadas en el código a algo distinto de WGS84, ajustar los tipos de campo, etc.

# Author: John K. Tran
# Contact: jtran20@masonlive.gmu.edu

import arcpy
import os
import csv
print "arcpy imported"

"""
Input CSV can look like:

Lat,Lon,First Name,Last Name
12.34,56.78,Joe,Smith
0.98,7.65,Jane,Doe
65.43,43.21,Bob,Sagat

Make sure 'Lat' and 'Lon' fields are the 1st and 2nd column in the CSV respectively.

"""

incsv = r"C:\Users\MyName\Desktop\My Docs\Sample Data\SampleCSV.csv" # Change this to the path of your CSV file.
outfc = r"C:\Users\MyName\Desktop\My Docs\Sample Data\SampleGDB.gdb\SampleFC" # Change this to the path of your output FC.

spatialref = arcpy.SpatialReference(4326) # Create the spatial reference object as WGS84. Can modify if desired.

if not arcpy.Exists(outfc): # Create the output feature class if needed.
    arcpy.CreateFeatureclass_management(os.path.dirname(outfc), os.path.basename(outfc), "POINT", None, None, None, spatialref)

csv.register_dialect("xls", delimiter=",", lineterminator="\n") # Register the dialect for native CSV syntax in Microsoft Excel.
f = open(incsv, "r") 
reader = csv.reader(f, dialect = "xls")

headers = reader.next() # Read the first line as the header names.

for header in headers[2:]: # Add fields for remaining columns if needed. Default is TEXT field.
    arcpy.AddField_management(outfc, header, "TEXT")

cursor = arcpy.da.InsertCursor(outfc, ['SHAPE@XY'] + headers[2:]) # Create InsertCursor.
count = 0
for row in reader:
    if count % 1000 == 0:
        print "processing row {0}".format(count)
    Ycoord = row[0] # Make sure 'Lat' is in the 1st column.
    Xcoord = row[1] # Make sure 'Lon' is in the 2nd column.
    newrow = [(float(Xcoord), float(Ycoord))] + row[2:]
    cursor.insertRow(newrow) # Insert point in FC for each row in CSV.
    count += 1

del cursor
f.close()

Y un ejemplo de un CSV que se puede leer es:

Lat,Lon,FirstName,LastName,Tone,Magnitude
26.61,-81.49,John,Smith,Dark,6.0
26.68,-81.47,Jim,Jones,Light,9.0
20.01,-155.87,Steve,Bruin,Medium,3.9
25.43,-80.45,Bob,Johnson,Dark,2.75
26.05,-80.11,Bill,Mayer,Light,26.6

100.000 registros CSV me han llevado entre 3 y 5 segundos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X