Menambahkan kode arbitrer ke ArcGIS ModelBuilder?

11

Apakah ada cara untuk menambahkan potongan kode arbitrer ke model ArcGIS?

Saya membayangkan sesuatu yang mirip dengan "tampilkan kode blok" pembuat ekspresi dalam pelabelan lanjutan atau kalkulator bidang .

Misalnya proyek saya saat ini dapat mengambil manfaat besar dari mengambil nama pengguna orang yang menjalankan alat. Saya tahu dengan python ini sederhana import os; os.environ.get('USERNAME'). Saya pikir saya bisa menulis cuplikan itu get_username.py, menambahkannya ke kotak alat di Arccatalog, lalu menambahkan alat itu ke model dan menggunakannya sebagai parameter model yang diperlukan untuk alat saya saat ini. Itu banyak pekerjaan untuk hal sekecil itu, dan lain kali saya mungkin menginginkan yang lain, seperti substitusi variabel inline atau variabel gabungan .

Saya pikir alat snipet kode atau sejenisnya dapat mengatasi semua kebutuhan ini secara umum, secara luas bermanfaat.

matt wilkie
sumber
pemikiran gila: alih-alih pembangun ekspresi, bagaimana dengan jendela baris perintah python yang menyimpannya untuk digunakan kembali oleh model?
matt wilkie
2
sebenarnya yang saya cari adalah seluruh pustaka Python yang akan diekspos ke pembuat model dengan cara yang sama seperti arcgis tapi itu hanya pembicaraan gila (kan?)
matt wilkie
Ide yang hebat! Anda ingin menulis cuplikan kode dengan cepat menjadi "alat" yang akan memproses cuplikan dan mengembalikan hasilnya, bukan? Jadi, dalam contoh Anda, "alat" akan mengembalikan <nama pengguna saat ini> yang kemudian dapat diterapkan ke alat lain di hilir.
RyanKDalton
@RyanDalton, ya itu benar sekali.
matt wilkie

Jawaban:

3

Jawaban baru untuk posting lama, hanya untuk memperjelas cara membuat model yang dapat digunakan kembali untuk melakukan ini.

Buka model, Sisipkan-> Alat Model Saja-> Hitung Nilai.

Dalam Ekspresi, ketik: getuser()

Di Blok Kode, ketik:

def getuser():
    import getpass
    return getpass.getuser()

(Lihat " Mendapatkan nama pengguna dalam format tertentu " untuk sumber cuplikan kode nama pengguna dari @ChadCooper)

Untuk Tipe Data, pilih String.

masukkan deskripsi gambar di sini

Ubah nama lingkaran output menjadi username. Model hasil akhir akan terlihat seperti: Menggunakan alat Hitung Nilai

Dan Anda kemudian dapat hanya menarik model ini ke model masa depan dan referensi variabel yang disebut% username% dalam model atau skrip yang akan datang. Pastikan model ini berjalan sebelum Anda mencoba mengakses variabel% username%. Anda dapat melakukan ini dengan menggunakan prasyarat .

RyanKDalton
sumber
Ryan mungkin Anda bisa memperluas mengapa output adalah [P] arameter, dan menunjukkan contoh modul yang dimasukkan dalam modul lain. Saya awalnya sangat bingung mengapa P untuk output, karena parameter biasanya semua tentang input.
matt wilkie
@ mattwilkie, Anda tidak memerlukan parameter input apa pun karena skrip python akan "membaca" input dari sistem Anda. Namun, Anda perlu membuat output (nama pengguna) sebagai parameter sehingga Anda dapat menggunakan hasilnya menjadi model lain atau skrip python. Langkah selanjutnya adalah mengirimkan parameter nama pengguna menjadi sesuatu seperti "skrip email" yang secara otomatis akan menggunakan parameter output uesrname sebagai input ke alamat email "Ke".
RyanKDalton
10

Sebenarnya Anda bisa melakukan ini dengan alat Calculate Value (Data Management) .

Itu tidak terlalu elegan (seluruh kode sumber untuk alat ini dicetak dalam log setiap kali berjalan), dan editor (benar-benar hanya kotak teks) sangat buruk.

Saya akan menyarankan menulis modul yang kemudian Anda dapat mengimpor dan memanggil fungsi dari dan kemudian Anda hanya perlu menulis cuplikan yang sangat singkat dalam dialog. Kalau tidak, itu tidak sangat bersih.

Hitung Nilai tersedia di semua tingkat lisensi untuk Arcgis v10. Dengan v9.x tersedia untuk Arcview hanya jika ekstensi Spatial atau 3D Analyst diinstal ( ref ).

blah238
sumber
Terima kasih! Ini bekerja cukup baik untuk apa yang saya butuhkan hari ini (masukkan %USERNAME%ke koneksi database .sde). Setuju editor tidak layak nama itu, berfungsi dengan baik sebagai tujuan tempel.
matt wilkie
1
re: 9.x, kata-kata dari halaman bantuan CV menunjukkan alat mungkin tersedia jika ekstensi SA / 3D hanya diinstal . Dimungkinkan untuk menggunakannya tanpa ekstensi dilisensikan atau diaktifkan.
matt wilkie
"Saya akan menyarankan menulis modul yang dapat Anda impor" - itu ide yang sangat bagus!
Harga Curtis
2

Mungkin saya salah paham pertanyaannya tetapi sepertinya fungsi alat skrip python, di dalam ArcToolBox, adalah apa yang Anda cari:

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/Integrating_scripts_within_a_model/002w0000006n000000/

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//001500000000000000.htm

Anda sebenarnya bisa menggunakan / menggabungkan beberapa bahasa skrip lain juga (R dalam contoh ini):

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//002w0000007w000000

Brent Edwards
sumber
Juga lihat Mengintegrasikan skrip dalam model
Chad Cooper
3
Ini bekerja (dan bagaimana saya akan melakukannya), tetapi Matt secara khusus menyebut metode ini "banyak pekerjaan untuk hal sekecil itu" dalam pertanyaannya :)
nmpeterson