2012-07-20 115 views
1

有没有什么办法刷新一个ArcMap(.mxd)文档与新添加的图层在Python中而不保存文档?Python arcpy.mapping和刷新文档

我已经使用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) 

回答

1

如果不以某种方式保存更改,这是行不通的。想想看。你对这个脚本所做的是改变mxd的内存拷贝。没有办法在不写出它的情况下打开此副本的另一个实例。我会先默认的副本,是这样的:

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

然后进行更改到newmxd,保存和使用os.startfile或subprocess.Popen打开它。这将保持您的Default.mxd不变,这是我认为你想要的。

祝你好运,迈克