我正在使用 C#, Visual Studio 2010 和 ArcMap 。我有一个相当简单的问题,我不确定答案是因为我使用ArcObjects和ArcMap的Noob状态。
我熟悉许多ArcObjects接口,例如IMxDocument
,IMap
,IActiveView
和IPageLayout
。
我想知道如何检查实际地图文档是加载到ArcMap还是在ArcMap中打开。我正在点击按钮上的boolean
功能。如果加载了地图文档,我只是不确定返回True
需要哪些接口或ArcObjects(如果有的话)。
答案 0 :(得分:1)
在C#中看看:
(IDocumentInfo2)ArcMap.Application.Document)。路径
如果没有加载地图,它将是一个空字符串,如果加载了地图,它将是MXD的路径。
答案 1 :(得分:0)
您可以使用arcpy检查当前加载的文档:
mxd = arcpy.mapping.MapDocument("CURRENT")
像这样访问文件路径:
filename = mxd.filePath
并将其包装在if子句中,以将其与文档名称进行比较,以获得布尔结果。 希望有所帮助。
答案 2 :(得分:0)
我遇到了这两个链接:
因此,您可以使用此信息来运行custum地理处理工具。该工具可以执行arcpy代码,返回当前加载的文档。
使用texteditor创建以下python脚本,例如“getfile.py”:
#importing the arcpy module into python
import arcpy
#setting the current document
mxd = arcpy.mapping.MapDocument("CURRENT")
#retrieving the filename and adding this to an message
arcpy.AddMessage(mxd.filePath)
创建一个custum工具箱,比如说“MyTools”。
尝试运行该地理处理工具并捕获消息以获取文件名。 根据代码可能看起来有点像样本,但我不能自己尝试。你必须自己玩这个。
using System;
using ESRI.ArcGIS.EsriSystem;
using ESRI.ArcGIS.Geoprocessing;
public void getfilenameTool()
{
object sev = null;
// Initialize the geoprocessor.
IGeoProcessor2 gp = new GeoProcessorClass();
// Add your toolbox, you will have to alter the path.
gp.AddToolbox(@"C:\temp\MyTools.tbx");
// Execute the tool by name.
gp.Execute("getfile", null, null);
string messages = gp.GetMessages(ref sev);
}
如果您无法使用地理处理工具来解决此问题,则还有其他两种解决方法。
A) 因为您可以从命令提示符运行该python脚本作为独立进程,所以您可以从C#调用该脚本并将命令提示输出重定向到您的C#代码。
在python脚本中替换行
arcpy.AddMessage(mxd.filePath)
与
print mxd.filePath
B)将该python脚本的输出打印到文件中,然后从那里读取文件名。
在python脚本中替换行
arcpy.AddMessage(mxd.filePath)
与
tempfile = open(r"C:\temp\tempfile.txt", "w")
tempfile.write(mxd.filePath)
tempfile.close()
然后,您可以使用C#读取该文件,并从那里获取ArcMap文件的文件名。