Python arcpy.mapping 并刷新文档

标签 python arcpy

有没有办法在 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:\temp\temp.mxd'
shutil.copy2(DefaultMXD, newmxd)

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

祝你好运,迈克

关于Python arcpy.mapping 并刷新文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11583746/

相关文章:

python - 为什么 2019 年我们仍然不能使用 ctypes 从 Python 调用 C++?

python - 使用字典将 python 数据类型转换为其他语言的数据类型

python - 在Python中的for循环中匹配字符串

python - 不使用局部变量值 - python

python - 文本元素arcpy,使用参数替换文本

python - 如何在 Python 中正确执行带参数的 MSSQL 存储过程

Python:wxPython:GridBagSizer 布局管理帮助

python - 如何对项目 :value list using another list with just items? 进行子集化

python - 使用 arcpy 以编程方式更新要素类的元数据

python - 在 Django 中上传文件时出现 OSError