问题描述
因此,我正在进行esri学院的Arcpy练习,但是在第一个练习中有些东西无法缠住我的头。 他们提供了空间参考脚本和地图布局脚本
空间参考脚本如下
#import modules
import arcpy
#set workspace
arcpy.env.workspace = r"C:\EsriTraining\PythEveryone\RunningScripts\Polk_County\OregonPolk.gdb"
#set up a describe object for each fc in geodatabase
fcList = arcpy.ListFeatureClasses()
for fc in fcList:
desc = arcpy.Describe(fc)
print (desc.spatialReference.name)
print (fcList)
print ("Script completed")
和地图布局脚本看起来像
#import modules
import arcpy
#set environment
aprx = arcpy.mp.ArcGISProject("CURRENT")
#specify layout
lyt = aprx.listLayouts("PolkGrdWater")[0]
#list layout text elements
eleList = lyt.listElements("TEXT_ELEMENT")
#loop through list and find all text elements with "Polk County" title
for ele in eleList:
if ele.text == "Polk County":
ele.text = "Polk County,OR"
#refresh the active view
aprx.save()
del aprx
print ("Script completed")
我了解到Map布局脚本更适合在ArcGISpro Python窗口中运行,但是我不明白的是为什么我无法以与运行Spatial相同的方式让Map布局脚本在Pycharm中运行参考脚本,我想如果我改变了
#set environment
aprx = arcpy.mp.ArcGISProject("CURRENT")
到
#set environment
aprx = arcpy.mp.ArcGISProject("Polk_County")
或
#set environment
aprx = arcpy.mp.ArcGISProject(r"C:\EsriTraining\PythEveryone\RunningScripts\Polk_County")
但是我想这与缺乏了解设置工作环境和设置工作空间之间的区别有关吗?
解决方法
您需要传入正确的输入参数。
通过传入 ArcGIS Pro项目的路径(一个.aprx
文件)来实例化该对象。
如果您是在ArcGIS Pro中运行此程序并且已经打开了一个项目,则只需传入"CURRENT"
,随附的Python解释器就会理解为您的意思是“此Pro项目的文件路径”。但是,这在Pycharm或类似的IDE中不起作用,因为脚本没有针对您正在谈论的项目文件的引用:)
因此,当您想在独立脚本中创建ArcGISProject
对象时,请提供特定项目文件的完整路径,而不仅仅是其所在目录的完整路径。例如>
aprx = arcpy.mp.ArcGISProject(r"C:\EsriTraining\PythEveryone\Polk_County\Polk.aprx")
查看Esri Help page about an ArcGISProject
object,了解更多详细信息和参数。
但是,该问题与arcpy.env.workspace
无关。根据您感兴趣的特定arcpy函数,可能需要也可能不需要设置environment workspace。但是,这些通常是与数据相关的工具,因此,您的工作区将是地理数据库(对于要素类)或目录(对于shapefile)。使用地理数据库中的空间数据时,工作空间至关重要。在Pro项目中使用地图布局时,工作空间无关。
在第一个示例脚本中,如果没有先设置arcpy.ListFeatureClasses
参数,那么arcpy.env.workspace
工具将无法使用。这是arcpy可能有点古怪的地方,因为其他工具(例如arcpy.CreateFeatureClass
)希望将工作空间作为参数传递,而不是设置为外部参数。
需要实践和经验(和/或阅读帮助页面)才能知道工作区何时重要,何时不重要。