11 votos

Hay secuencias de comandos de Python para la creación .mxd archivos?

Yo soy un novato tanto en ArcGIS y Python. Mi condición es la de automatizar el siguiente proceso MANUAL:

  1. La creación de una capa en ArcGIS for Desktop. Para decirlo en otras palabras, la creación de un documento de ArcMap (.mxd).
  2. La publicación ha creado el documento de ArcMap (en el Paso 1) como un servicio a ArcServer.

Actualmente estamos haciendo esto de forma manual. Me han llegado a través de secuencias de comandos para automatizar el paso 2 usando Python. Cualquier orientación para automatizar el paso 1 y el paso 2, sería genial.

16voto

Lucas Puntos 128

Esta no es realmente una respuesta independiente, más de una adición a @PolyGeo la respuesta de como se trata al mxd creación desde cero " en python problema.

Nota: probablemente sea un poco avanzado para un python 'nueva abeja'...

Usted puede crear MXD a partir de cero en python si el acceso de ArcObjects. Usted tendrá la comtypes paquete y si el uso de ArcGIS 10.1, usted necesita para hacer un pequeño cambio a automation.py. Ver ArcObjects + comtypes en 10.1

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

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

    """
    import _winreg
    #Little kludge for 64bit OS
    if 'PROGRAMFILES(X86)' in os.environ:path='SOFTWARE\\Wow6432Node\\ESRI'
    else:path='SOFTWARE\\ESRI'
    keyESRI = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, path)

    #Little kludge juuust in case ArcGIS 10.1 uses a different registry key,
    #i.e. "Desktop10.1"...
    nkeys=_winreg.QueryInfoKey(keyESRI)[0]
    for i in range(nkeys):
        subkey=_winreg.EnumKey(keyESRI,i)
        if subkey[:7].lower()=='desktop' or subkey.lower()=='arcgis':
            try:
                keyDesktop = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, path+'\\'+subkey)
                compath=os.path.join(_winreg.QueryValueEx(keyDesktop,"InstallDir")[0],'com')
                if os.path.exists(compath):return compath
            except:pass

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...
    import arcpy
    arcpy.SetProduct('arcview')
    filepath='c:/temp/testing123.mxd'
    if os.path.exists(filepath):os.unlink(filepath)
    CreateMXD(filepath)

13voto

UnkwnTech Puntos 21942

Código de ejemplo para hacer 1. es en la Ayuda en Línea para AddLayer (arcpy.mapping).

Los pasos para la 2. en la Ayuda en Línea para Publicar un servicio de mapas con Python.

Tenga en cuenta que no es posible crear un MXD el uso de ArcPy - usted necesita un MXD al que se pueden agregar capas. Que la decisión de diseño se describe en la Ayuda en Línea de las Directrices para arcpy.la asignación , pero ser capaz de crear un nuevo Documento de Mapa a partir de la nada en ArcPy es una de ArcGIS Idea que me gustaría ver implementado.

Ver a @Lucas respuesta para un avanzado Python y ArcObjects método que no he probado, pero puede proporcionar una solución para la creación de un MXD a partir de una secuencia de comandos de Python que ArcPy puede, a continuación, vaya a manipular.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X