Python arcpy.mapping并刷新文档



有没有办法在不保存文档的情况下,用python中新添加的层刷新ArcMap(.mxd)文档?

我已经使用python完成了一系列自动化任务,最后一步是将输出转储到arcmap文档中并弹出该文档,以便脚本的用户可以查看输出数据,并决定是否/在哪里保存.mxd.

我已经创建了一个Default.mxd文档,我在脚本中引用了该文档,但我希望将其保持为"只读",以便用户被迫手动保存自己的文档。然而,使用arcpy.mapping模块,除非我保存它,否则我无法"看到"mxd中的数据。有办法解决这个问题吗?

下面是我正在努力完成的一个脚本示例。

# Import arcpy module
import os
import arcpy
FGDB = "C:...SomeFGDB.gdb"
arcpy.env.workspace = FGDB
RASTER1 = FGDB+"\RASTER1"
RASTER2 = FGDB+"\RASTER2"
DefaultMXD = r"C:...Default.mxd"
mxd = arcpy.mapping.MapDocument(DefaultMXD)
df = arcpy.mapping.ListDataFrames(mxd, "*")[0]

RASTER1_LYR = arcpy.mapping.Layer(RASTER1)
RASTER2_LYR = arcpy.mapping.Layer(RASTER2)
mxd.activeView = df.name
arcpy.mapping.AddLayer(df, RASTER2_LYR,"TOP")
arcpy.mapping.AddLayer(df, RASTER1_LYR,"TOP")

extent = RASTER1.getExtent()
df.extent = extent
mxd.activeView = df.name
arcpy.RefreshTOC()
arcpy.RefreshActiveView()
##########################################
#I would rather not save the default MXD
#mxd.save()
##########################################
del mxd, df
os.startfile(DefaultMXD)

如果不以某种方式保存更改,这是行不通的。想想看,你对脚本所做的就是更改mxd的内存副本。如果不写出来,就无法打开此副本的另一个实例。我会首先用这样的东西复制默认值:

DefaultMXD = r"C:...Default.mxd"
newmxd = r'c:temptemp.mxd'
shutil.copy2(DefaultMXD, newmxd)

然后对newmxd进行更改,保存并使用os.startfile或子流程。Popen打开它。这将保持您的Default.mxd不变,我认为这正是您想要的。

祝你好运,Mike

最新更新