Jenis operasi ini hampir selalu melibatkan penulisan WHERE Clause, jadi saya pikir menggunakan setidaknya sedikit Python adalah dalam rangka.
Selain itu, hal ini mungkin dilakukan dengan ModelBuilder, IMO, membuat alat skrip Python dengan validasi khusus dan kontrol lebih besar terhadap pengaturan parameter dapat memberikan pengalaman pengguna yang lebih baik - misalnya, dengan membuat menu drop-down parameter Field dan MultiValue * yang Anda dapat memilih nilai daripada harus mengetiknya.
* mungkin, sebenarnya tidak yakin tentang parameter MultiValue
Namun, karena itu adalah latihan yang lebih maju untuk topik lain, saya akan tetap berpegang pada pendekatan ModelBuilder, menggunakan Python hanya untuk membuat klausa WHERE:
- Buat model baru
- Buat variabel (klik kanan kanvas kosong dan klik Tambah Variabel ) untuk input Feature Layer , Field , dan parameter MultiValue .
- Klik kanan masing-masing dan pilih Model Parameter
- Tambahkan alat Hitung Nilai (Manajemen Data) ke kanvas. Hubungkan 3 variabel ke dalamnya sebagai prasyarat (hanya untuk pertunjukan dalam kasus ini, tetapi dapat membuat perbedaan dalam urutan eksekusi dalam situasi lain).
Klik dua kali alat Hitung Nilai untuk mengaturnya:
5a. Salin / rekatkan yang berikut ke dalam kotak Ekspresi (sesuaikan agar sesuai dengan nama variabel Anda):
buildWhereClauseMultiValue(r"%Feature Layer%","%Field%","%Values%")
5b. Salin / rekatkan yang berikut ke dalam kotak Blokir Kode :
import arcpy
def buildWhereClauseMultiValue(table, field, values):
"""Takes a semicolon-delimited list of values and constructs a SQL WHERE
clause to select those values within a given field and table."""
# Add DBMS-specific field delimiters
fieldDelimited = arcpy.AddFieldDelimiters(arcpy.Describe(table).path, field)
# Split multivalue at semicolons and strip quotes
valueList = [value[1:-1] if (value.startswith("'") and value.endswith("'")) else value for value in values.split(';')]
# Determine field type
fieldType = arcpy.ListFields(table, field)[0].type
# Add single-quotes for string field values
if str(fieldType) == 'String':
valueList = ["'%s'" % value for value in valueList]
# Format WHERE clause in the form of an IN statement
whereClause = "%s IN(%s)" % (fieldDelimited, ', '.join(valueList))
return whereClause
5c. Setel tipe data keluaran menjadi Ekspresi SQL .
5d. Klik Ok dan klik kanan variabel output dari alat Calculate Value dan ganti namanya menjadi sesuatu yang lebih deskriptif seperti "WHERE Clause".
- Tambahkan alat Select Layer By Attribute (Data Management) ke kanvas. Sambungkan Layer Fitur dan variabel WHERE Clause ke alat Select Layer By Attribute.
Tambahkan alat Fitur Salin (Manajemen Data) ke kanvas. Hubungkan output dari alat Select Layer By Attribute ke alat Copy Features. Klik kanan variabel Output Feature Class dan periksa Parameter Model dan (opsional) opsi Tambahkan ke Tampilan .
Pada titik ini akan terlihat seperti ini:
Di bawah menu Model -> Model Properties berikan nama dan label yang baik dan simpan dan tutup.
Klik dua kali model di ArcToolbox untuk memunculkan dialog model. Masukkan parameter Anda dan klik OK. Seharusnya mengekspor fitur yang dipilih ke kelas fitur baru dan menambahkannya ke peta (jika Anda memeriksa "Tambahkan ke Tampilan" pada kelas fitur output).
CATATAN:
Anda selalu dapat nilai hardcode dan bukan variabel "parameterisasi" yang tidak Anda inginkan pengguna ubah seperti lapisan fitur atau parameter bidang. Saya hanya suka memiliki alat yang generik / dapat digunakan kembali jadi saya membuat parameter model tersebut. Sebenarnya apa yang akan saya lakukan hanyalah drag dan drop model generik ke dalam model baru dan kemudian atur parameter yang telah Anda tentukan - dengan cara itu Anda dapat membuat beberapa model "pembungkus" yang telah ditentukan, tetapi hanya memiliki satu model mendasar yang melakukan pekerjaan, jadi jika Anda perlu mengubah fungsinya, Anda hanya perlu mengubahnya di satu tempat.
Jika Anda beruntung seperti saya, Anda tidak perlu memvalidasi model dan menyediakan beberapa data dummy hanya untuk menghapusnya setelah validasi (perhatikan bagaimana semua elemen model kosong / putih, artinya mereka tidak "siap dijalankan" - tapi saya bisa menjalankannya setelah mengisi parameter pada dialog model).