¿Buscas script Python para crear archivos .mxd?

11

Soy nuevo en ArcGIS y Python. Mi requisito es automatizar el siguiente proceso MANUAL:

  1. Crear una capa en ArcGIS for Desktop. En otras palabras, creando un documento ArcMap (.mxd).
  2. Publicar el documento ArcMap creado (en el Paso 1) como un servicio en ArcGIS Server.

Actualmente estamos haciendo esto manualmente. Me he encontrado con scripts para automatizar el paso 2 usando Python.

¿Cómo puedo automatizar el paso 1 y el paso 2?

usuario15051
fuente

Respuestas:

16

Esta no es realmente una respuesta independiente, más una adición a la respuesta de @ PolyGeo, ya que aborda la 'creación de mxd desde cero' en el tema de Python.

Puede crear MXD desde cero en Python si accede a ArcObjects . Necesitará el paquete de comtypes y, si utiliza ArcGIS 10.1, deberá realizar un pequeño cambio en automation.py. Ver ArcObjects + comtypes en 10.1

A continuación se muestra un código para crear un MXD desde cero en python:

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)
usuario2856
fuente
14

El código de muestra para Crear una capa en ArcGIS for Desktop se encuentra en la Ayuda en línea para AddLayer (arcpy.mapping) .

Los pasos para publicar un documento de ArcMap como un servicio en ArcGIS for Server se encuentran en la Ayuda en línea para publicar un servicio de mapas con Python .

Tenga en cuenta que no es posible crear un MXD con ArcPy; debe tener un MXD existente al que pueda agregar capas. Esa decisión de diseño se describe en la Ayuda en línea sobre pautas para arcpy.mapping , pero poder crear un nuevo documento de mapa a partir de la nada en ArcPy es una idea de ArcGIS que me gustaría ver implementada.

Consulte la respuesta de @ Luke para obtener un método avanzado de Python y ArcObjects que no he probado pero que puede proporcionarle una solución alternativa para crear un MXD a partir de un script de Python que ArcPy puede manipular.

PolyGeo
fuente