Mengekstraksi berdasarkan Atribut Menggunakan ModelBuilder dengan Input Pengguna?

11

Menggunakan ModelBuilder, saya ingin membuat alat yang akan membiarkan pengguna memilih nilai atau nilai yang akan digunakan untuk mengekstrak shapefile.

Saya memiliki lapisan parcel dengan bidang "Parcel_Type". Saya ingin pengguna dapat memilih jenis paket untuk diekstraksi. Jadi jika pengguna ingin mengekstrak paket dengan tipe "EL" maka ia hanya perlu memasukkan "EL" sebagai variabel. Jika dia ingin mengetik "EL" dan "CDD" dia harus memasukkannya sebagai multi-variabel. Itu akan menjadi satu-satunya interaksi manusia dengan model.

Jadi bagaimana saya bisa menggunakan variabel-variabel itu dalam model saya?

Dom
sumber

Jawaban:

14

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:

  1. Buat model baru
  2. Buat variabel (klik kanan kanvas kosong dan klik Tambah Variabel ) untuk input Feature Layer , Field , dan parameter MultiValue .
  3. Klik kanan masing-masing dan pilih Model Parameter
  4. 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).
  5. 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".

  6. Tambahkan alat Select Layer By Attribute (Data Management) ke kanvas. Sambungkan Layer Fitur dan variabel WHERE Clause ke alat Select Layer By Attribute.
  7. 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: Model Kanvas

  8. Di bawah menu Model -> Model Properties berikan nama dan label yang baik dan simpan dan tutup.

  9. 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).

    Dialog Model

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).

blah238
sumber
3

Anda juga dapat menggunakan satu alat geoprocessing sederhana yang disebut Pilih untuk mencapai alur kerja ini jika persyaratan GUI Anda tidak untuk dialog yang tepat diilustrasikan oleh @ blah238.

Gunakan jendela Pencarian untuk menemukannya atau pergi ke ArcToolbox> Alat Analisis> Ekstrak> Pilih.

Alat Pilih (Analisis) memungkinkan Anda mengekstrak fitur menggunakan bidang (atribut) apa saja dari kelas fitur.

Mat
sumber