У меня есть инструмент на основе сценариев Python в ArcGIS. Одним из параметров инструмента является входной растровый файл, который я установил (используя свойства инструмента в наборе инструментов) как растровый слой. Это означает, что когда я запускаю инструмент, я получаю возможность выбрать этот параметр из раскрывающегося списка загруженных в настоящее время растровых слоев или путем навигации, чтобы найти новый растровый слой в файловой системе.
Затем я использую стандартный arcpy.GetParameterAsText(0)
код, чтобы получить параметр в моем скрипте Python. Это прекрасно работает, когда я выбираю файл, просматривая файловую систему, так как текст в диалоговом окне - это полный путь к файлу, но когда я просто выбираю из выпадающего списка, возвращаемый текст - это просто имя файла (например, file.tif
). ,
Код, который я запускаю, должен знать полный путь к файлу - как мне это получить?
Если бы я мог предположить, что файл всегда был в рабочей области, то я мог бы добавить имя файла arcpy.env.workspace
, но я не могу предположить, что это. Нужно ли перебирать все слои, которые загружены, пока я не найду один с тем же именем, а затем найду его полный путь, или есть более простой способ?
источник
Ответы:
У меня была такая же проблема некоторое время назад. Это довольно легко исправить, просто воспользуйтесь инструментом описания.
Вы уже получаете имя слоя из ваших параметров. Так что все, что вам нужно сделать, это описать слой, найти путь и объединить их.
Это должно сделать это без проблем.
Надеюсь это поможет
источник
Если вы хотите учесть возможность того, что пользователь может указать растр в файловой системе:
источник
Есть немного более короткий способ сделать это также. Объекты описания данных имеют свойство catalogPath, которое представляет собой полный путь к файлу.
С версией 10.1, которую мы используем, вы можете сделать:
источник
Вы можете использовать,
arcpy.GetParameter(0)
а не так,arcpy.GetParameterAsText(0)
как это получит объект слоя, а не просто строку с именем слоя.Если вы можете получить объект слоя, вы можете получить
Layer
свойства напрямую и избавит вас от необходимости делатьDescribe
.Нечто подобное может получить то, что вы хотите:
источник
Вот что я в итоге использовал. Отлично работает.
источник