Saya memiliki alat berbasis skrip Python di ArcGIS. Salah satu parameter untuk alat ini adalah file input raster, yang telah saya atur (menggunakan properti alat dalam kotak alat) menjadi Raster Layer. Ini berarti bahwa ketika saya menjalankan alat saya mendapatkan opsi untuk memilih parameter itu dari daftar dropdown lapisan raster yang saat ini dimuat, atau dengan menavigasi untuk menemukan lapisan raster baru dalam sistem file.
Saya kemudian menggunakan arcpy.GetParameterAsText(0)
kode standar untuk mendapatkan parameter ke skrip Python saya. Ini berfungsi dengan baik ketika saya memilih file dengan menelusuri melalui sistem file, karena teks dalam dialog adalah path lengkap ke file, tetapi ketika saya hanya memilih dari daftar dropdown, teks yang saya dapatkan kembali hanyalah nama file (mis. file.tif
) .
Kode yang saya jalankan perlu mengetahui path lengkap ke file - bagaimana cara mendapatkannya?
Jika saya bisa berasumsi bahwa file itu selalu di ruang kerja maka saya dapat menambahkan nama file arcpy.env.workspace
, tetapi saya tidak bisa berasumsi itu. Apakah saya perlu mengulangi semua layer yang dimuat hingga saya menemukan satu dengan nama yang sama, dan kemudian menemukan path lengkapnya, atau adakah cara yang lebih mudah?
sumber
Jawaban:
Saya memiliki masalah yang sama beberapa waktu lalu. Ini adalah perbaikan yang cukup mudah, cukup gunakan alat uraikan.
Anda sudah mendapatkan nama layer dari parameter Anda. Jadi yang harus Anda lakukan adalah mendeskripsikan layer, temukan path lalu gabungkan keduanya.
Itu seharusnya tidak masalah.
Semoga ini membantu
sumber
Jika Anda ingin memperhitungkan kemungkinan bahwa pengguna dapat menentukan raster dalam sistem file:
sumber
Ada cara yang sedikit lebih pendek untuk melakukan ini juga. menggambarkan objek data memiliki properti catalogPath yang merupakan path lengkap ke file.
Dengan versi 10.1 yang kami gunakan, Anda dapat melakukan:
sumber
Anda bisa menggunakan
arcpy.GetParameter(0)
daripadaarcpy.GetParameterAsText(0)
karena ini akan mendapatkan objek layer bukan hanya string dengan nama layer.Jika Anda bisa mendapatkan objek layer Anda bisa mendapatkan
Layer
properti secara langsung dan menyimpan harus melakukanDescribe
.Sesuatu seperti ini mungkin memberi Anda apa yang Anda inginkan:
sumber
Inilah yang akhirnya saya gunakan. Itu bekerja seperti pesona.
sumber