Saya telah menulis skrip ini yang berulang melalui semua kelas fitur dalam satu set dataset fitur dan menghapus semua fitur mereka. Tampaknya melakukan pekerjaan tetapi berjalan cukup lambat. Apakah ada yang saya lakukan salah di sini atau ada cara yang jelas untuk mempercepat?
Saya menggunakan DeleteFeatures_management untuk melakukan perbuatan itu. DeleteRows_management juga tampaknya berfungsi.
import sys
import os
import arcpy
from arcpy import env
import datetime
import getpass
try:
passwd = getpass.getpass("Enter the sde user password: ")
sdeConnectionFileDir = os.environ.get("TEMP")
databaseName = ""
fileName = "temp.sde"
# Delete any pre-existing SDE connection file.
fullPath = sdeConnectionFileDir + '\\' + fileName
if os.path.exists(fullPath):
os.remove(fullPath)
# Create temporary SDE connection file.
arcpy.CreateArcSDEConnectionFile_management (
sdeConnectionFileDir, fileName,
"sdeserver", "5151", "",
"DATABASE_AUTH", "my_sde_user", passwd,
"SAVE_USERNAME", "SDE.DEFAULT", "SAVE_VERSION"
)
env.workspace = fullPath
# ArcPy status codes.
returnCodes = {'WARN' : 0, 'INFO' : 1, 'ERROR' : 2}
featureDatasets = []
featureDatasets.extend(arcpy.ListDatasets("dataset1*"))
featureDatasets.extend(arcpy.ListDatasets("dataset2*"))
featureDatasets.extend(arcpy.ListDatasets("dataset3*"))
list = '[%s]' % ', '.join(map(str, featureDatasets))
response = raw_input("\n***** WARNING!!! ***** \nAll data will be deleted from all feature classess in the following datasets: \n\n" + list + "\n\n |--> Type DELETE to begin removal: ")
if response == "DELETE":
print "\nStarted: " + str(datetime.datetime.now()) + "\n"
for dataset in featureDatasets:
print "Processing dataset: " + dataset
for fc in arcpy.ListFeatureClasses("*", "ALL", dataset):
rowCount = int(arcpy.GetCount_management(fc).getOutput(0))
if rowCount > 0:
print " -- Processing feature class: " + str(fc) + " (" + str(rowCount) + " rows)"
#arcpy.DeleteRows_management(fc)
arcpy.DeleteFeatures_management(fc)
print "\nCompleted: " + str(datetime.datetime.now())
except Exception as e:
if arcpy:
arcpyErrors = arcpy.gp.getMessages(returnCodes['ERROR'])
if arcpyErrors:
sys.stderr.write(arcpyErrors + "\n")
sys.stderr.write(str(e) + "\n")
sys.exit(1)
EDIT -
Saya memasukkan beberapa timer kinerja ke dalam skrip dan ini adalah datanya:
- Waktu untuk mengambil dataset: 0: 00: 01.254000
- Total Kelas Fitur: 1682
- Total Kelas Fitur dengan Data: 124
- Total Fitur Diproses: 190222
- Total Run Time : 3 jam, 16 menit
Rinciannya:
Dataset fitur -> daftar panggilan kelas fitur:
* AVG 0:00:02
* MIN 0:00:01
* MAX 0:00:07
* COUNT 40
* TOTAL 0:01:08
Fitur menghitung panggilan (sebagian besar waktu):
* AVG 0:00:06
* MIN 0:00:01
* MAX 0:00:16
* COUNT 1682
* TOTAL 2:41:00
Panggilan penghapusan fitur (dikurangi karena hanya kelas fitur dengan baris yang diproses):
* AVG 0:00:17
* MIN 0:00:02
* MAX 0:03:22
* COUNT 124
* TOTAL 0:34:31
sumber
Jika memutakhirkan ke ArcGIS 10.1 (sekarang dirilis) adalah pilihan maka saya baru saja menemukan ini di What's New in ArcGIS 10.1 PDF:
Bantuan online dapat ditemukan di sini .
sumber
Mengapa tidak menghapus sendiri kumpulan data fitur
arcpy.DeleteFeatures_management(dataset)
? Jika Anda masih membutuhkan dataset fitur, Anda dapat membuatnya kembali setelah dihapus.sumber