寻求用于创建.mxd文件的Python脚本?


11

我是ArcGIS和Python的新手。我的要求是使以下手动过程自动化:

  1. 在ArcGIS for Desktop中创建图层。换句话说,创建一个ArcMap文档(.mxd)。
  2. 将创建的ArcMap文档(在步骤1中)作为服务发布到ArcGIS Server。

目前,我们正在手动执行此操作。我遇到了使用Python自动执行第2步的脚本。

如何自动执行步骤1和步骤2?

Answers:


16

这实际上不是一个独立的答案,更多的是@PolyGeo的答案,因为它解决了python问题中的“从头开始创建mxd”。

如果访问ArcObjects,则可以在python中从头开始创建MXD 。您将需要comtypes软件包,如果使用ArcGIS 10.1,则需要对进行一些更改automation.py。请参阅10.1处的ArcObjects + comtypes

以下是一些在python中从头开始创建MXD的代码:

import arcpy
import comtypes,os

def CreateMXD(path):
    GetModule('esriCarto.olb')
    import comtypes.gen.esriCarto as esriCarto
    pMapDocument = CreateObject(esriCarto.MapDocument, esriCarto.IMapDocument)
    pMapDocument.New(path)
    pMapDocument.Save() #probably not required...

def GetLibPath():
    """ Get the ArcObjects library path

        It would be nice to just load the module directly instead of needing the path,
        they are registered after all... But I just don't know enough about COM to do this

    """
    compath=os.path.join(arcpy.GetInstallInfo()['InstallDir'],'com')
    return compath

def GetModule(sModuleName):
    """ Generate (if not already done) wrappers for COM modules
    """
    from comtypes.client import GetModule
    sLibPath = GetLibPath()
    GetModule(os.path.join(sLibPath,sModuleName))

def CreateObject(COMClass, COMInterface):
    """ Creates a new comtypes POINTER object where
        COMClass is the class to be instantiated,
        COMInterface is the interface to be assigned
    """
    ptr = comtypes.client.CreateObject(COMClass, interface=COMInterface)
    return ptr

if __name__=='__main__':
    #testing...
    arcpy.SetProduct('arcview')
    filepath='c:/temp/testing123.mxd'
    if os.path.exists(filepath):os.unlink(filepath)
    CreateMXD(filepath)

14

AddLayer的联机帮助(arcpy.mapping)上提供了在ArcGIS for Desktop中创建图层的示例代码。

将ArcMap文档作为服务发布到ArcGIS for Server的步骤在使用Python发布地图服务的联机帮助中。

请注意,无法使用ArcPy创建MXD-您需要具有可向其添加图层的现有MXD。该设计决策已在arcpy.mapping指南在线帮助中进行了描述,但是我想看到在ArcPy中能够从零开始创建新的Map Document是一个ArcGIS Idea

有关我尚未测试的高级Python和ArcObjects方法的信息,请参见@Luke的答案,但可能为您提供了一种解决方法,可通过ArcPy随后可以进行操作的Python脚本创建MXD。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.