Mehr

Event-Layer zu Feature-Class – schnellste Methode?


Es gibt drei Methoden, um die Ausgabe eines Make XY Event Layers in eine Feature-Class zu konvertieren:

  • Kopierfunktionen
  • Funktion zum Punkt
  • Feature-Class zu Feature-Class

Welche ist die schnellste Methode? Ich muss eine große Anzahl von Punkten konvertieren, die in einer CSV-Tabelle (1,5 GB-Datei) gespeichert sind, und frage mich, wie ich das am besten mache.

Ich werde die Geoverarbeitung im Hintergrund auf einem 64-Bit-Computer verwenden.


Hier ist ein Beispiel für eine Technik, die ich in meinem Kommentar zu Ihrer Frage erwähnt habe. Das Lesen einer CSV-Datei und das Auffüllen einer Feature-Class mit ihren Werten kann einfach sein. Das Skript geht davon aus, dass Breite Feld ist die 1. Spalte und Längengrad Feld ist die 2. Spalte. Sie können das Koordinatensystem im Code auf etwas anderes als WGS84 anpassen, die Feldtypen anpassen usw.

# Autor: John K. Tran # Kontakt: [email protected] import arcpy import os import csv print "arcpy importiert" """ Eingabe-CSV kann wie folgt aussehen: Lat,Lon,Vorname,Nachname 12.34,56.78, Joe,Smith 0.98,7.65,Jane,Doe 65.43,43.21,Bob,Sagat Stellen Sie sicher, dass die Felder 'Lat' und 'Lon' die 1. bzw. 2. Spalte in der CSV-Datei sind. """ incsv = r"C:Users MyNameDesktopMy DocsSample DataSampleCSV.csv" # Ändern Sie dies in den Pfad Ihrer CSV-Datei. outfc = r"C:UsersMyNameDesktopMy DocsSample DataSampleGDB.gdbSampleFC" # Ändern Sie dies in den Pfad Ihrer Ausgabe-FC. Spatialref = arcpy.SpatialReference(4326) # Erstellen Sie das Raumbezugsobjekt als WGS84. Kann auf Wunsch geändert werden. wenn nicht arcpy.Exists(outfc): # Erstellen Sie bei Bedarf die Ausgabe-Feature-Class. arcpy.CreateFeatureclass_management(os.path.dirname(outfc), os.path.basename(outfc), "POINT", None, None, None, Spatialref) csv.register_dialect("xls", delimiter=",", lineterminator= "
") # Registrieren Sie den Dialekt für die native CSV-Syntax in Microsoft Excel. f = open(incsv, "r") reader = csv.reader(f, dialect = "xls") headers = reader.next() # Liest die erste Zeile als Headernamen. for header in headers[2:]: # Fügen Sie bei Bedarf Felder für die restlichen Spalten hinzu. Standard ist das Feld TEXT. arcpy.AddField_management(outfc, header, "TEXT") cursor = arcpy.da.InsertCursor(outfc, ['[email protected]'] + headers[2:]) # InsertCursor erstellen. count = 0 für Zeile im Reader: if count % 1000 == 0: print "processing row {0}".format(count) Ycoord = row[0] # Stellen Sie sicher, dass 'Lat' in der 1. Spalte steht. Xcoord = row[1] # Stellen Sie sicher, dass 'Lon' in der 2. Spalte steht. newrow = [(float(Xcoord), float(Ycoord))] + row[2:] cursor.insertRow(newrow) # Punkt in FC für jede Zeile in CSV einfügen. count += 1 del Cursor f.close()

Und ein Beispiel für eine CSV, die gelesen werden kann, ist:

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,Dunkel,2.75 26.05,-80.11,Bill,Mayer,Hell,26.6

Die Ausführung von 100.000 CSV-Datensätzen dauerte etwa 3-5 Sekunden.


Ich habe festgestellt, dass ein Model Builder-Modell am schnellsten ist mit: "X Y Event Layer erstellen", gefolgt von "Feature-Class zu Feature-Class".