如何检查是否在ArcMap中加载/打开了实际的地图文档

时间:2014-09-14 16:13:08

标签: c# arcmap arcobjects

我正在使用 C# Visual Studio 2010 ArcMap 。我有一个相当简单的问题,我不确定答案是因为我使用ArcObjects和ArcMap的Noob状态。

我熟悉许多ArcObjects接口,例如IMxDocumentIMapIActiveViewIPageLayout

我想知道如何检查实际地图文档是加载到ArcMap还是在ArcMap中打开。我正在点击按钮上的boolean功能。如果加载了地图文档,我只是不确定返回True需要哪些接口或ArcObjects(如果有的话)。

3 个答案:

答案 0 :(得分:1)

在C#中看看:

(IDocumentInfo2)ArcMap.Application.Document)。路径

如果没有加载地图,它将是一个空字符串,如果加载了地图,它将是MXD的路径。

答案 1 :(得分:0)

您可以使用arcpy检查当前加载的文档:

mxd = arcpy.mapping.MapDocument("CURRENT")

像这样访问文件路径:

filename = mxd.filePath

并将其包装在if子句中,以将其与文档名称进行比较,以获得布尔结果。 希望有所帮助。

答案 2 :(得分:0)

我遇到了这两个链接:

http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/How_to_run_a_geoprocessing_tool/0001000003rr000000/

http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/Walkthrough_Consuming_a_geoprocessing_model_tool_in_NET/0001000001sw000000/

因此,您可以使用此信息来运行custum地理处理工具。该工具可以执行arcpy代码,返回当前加载的文档。

  1. 使用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)
    
  2. 创建一个custum工具箱,比如说“MyTools”。

  3. 将该脚本导入MyTools工具箱。
  4. 尝试运行该地理处理工具并捕获消息以获取文件名。 根据代码可能看起来有点像样本,但我不能自己尝试。你必须自己玩这个。

    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);
    }
    
  5. 如果您无法使用地理处理工具来解决此问题,则还有其他两种解决方法。

    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文件的文件名。