Apakah ada cara untuk menghitung bidang yang diurutkan dengan nomor urut? Saya telah melihat fitur Sorting class untuk menghitung bidang ID berurutan menggunakan ArcGIS Field Calculator? yang menguraikan cara menghitung angka berurutan, tetapi ini selalu dihitung pada urutan FID, bukan pada urutan.
#Pre-logic Script Code:
rec=0
def autoIncrement():
global rec
pStart = 1
pInterval = 1
if (rec == 0):
rec = pStart
else:
rec += pInterval
return rec
#Expression:
autoIncrement()
Sebuah contoh dari apa yang saya coba lakukan. Saya telah menggunakan pengurutan tingkat lanjut untuk mengurutkan berdasarkan tahun, bulan, hari, dan sekarang ingin memiliki nomor urut di Seq
lapangan. Anda akan melihat bahwa OBJECTID
bidang saya tidak berurutan, sehingga kode di atas tidak akan berfungsi.
Apakah ini bisa dilakukan di Kalkulator Bidang atau menggunakan Kursor Pembaruan di arcpy?
Jawaban:
"Solusi" dengan 2 bidang yang diurutkan (menaik):
--------------------------------------
VERSI TERBARU:
-----------------------
dibutuhkan 1,5 detik untuk menyelesaikan tugas pada 10.000 catatan. Asli membutuhkan waktu lebih dari 2 menit
sumber
Ini adalah proses dua langkah, dan sebagai hasilnya, Kalkulator Lapangan tidak cocok untuk itu. Lebih baik menjalankan ini dalam skrip mandiri. Namun, itu bisa dilakukan di bidang kalkulator, asalkan Anda menggunakan trik. Anda perlu menggunakan kursor untuk memuat semua nilai ke kamus global dari daftar yang diurutkan, tetapi hanya selama perhitungan catatan pertama. Untuk semua catatan lain Anda harus melewati pembuatan kamus untuk menghindari membaca ulang seluruh tabel untuk setiap baris secara konstan.
Tiga nilai bidang harus ditempatkan di tuple untuk bertindak sebagai kunci yang akan mengurutkan dengan benar. Saya akan menganggap semua nilai kombinasi 3-bidang unik di tabel SamplePoint, tetapi saya menambahkan ObjectID untuk memastikannya unik. Anda harus memberikan path dan nama shapefile di baris 8 (atau saya bisa menggunakan teknik yang FelixIP gunakan di mana lapisan pertama di peta saat ini digunakan). Jika Anda ingin menggunakan bidang yang berbeda untuk kunci Anda harus mengubah daftar bidang di baris 10 dan mencocokkannya dengan bidang input di baris 3 dan baris 15.
Saya juga tidak akan merekomendasikan menggunakan nama bidang Tahun, Bulan dan Hari, karena hanya berfungsi di shapefile dan tidak diizinkan di geodatabases. Database geodat akan mengubah nama menjadi Year_1, Month_1, Day_1 jika Anda mencoba menambahkannya ke daftar bidang di properti tabel.
Jika tujuan tabel ini adalah untuk mengaitkannya dengan tabel lain / kelas fitur pada kunci multi-bidang, pertimbangkan untuk menggunakan alat yang saya buat di Blog saya bernama Multiple Field Key ke Single Tool Key Field - Hubungkan Dua Layers Berdasarkan Lebih dari Satu Bidang
sumber
Saya memiliki pertanyaan yang sama tetapi untuk masalah yang lebih sederhana, berdasarkan hanya memiliki satu Field untuk diurutkan. Saya berhasil dengan skrip berikut:
sumber