Procurando script Python para criar arquivos .mxd?

11

Eu sou novo no ArcGIS e no Python. Minha exigência é automatizar o processo MANUAL abaixo:

  1. Criando uma camada no ArcGIS for Desktop. Em outras palavras, criando um documento do ArcMap (.mxd).
  2. Publicando o documento ArcMap criado (na Etapa 1) como um serviço no ArcGIS Server.

Atualmente, estamos fazendo isso manualmente. Encontrei scripts para automatizar a etapa 2 usando Python.

Como automatizar as etapas 1 e 2?

user15051
fonte

Respostas:

16

Esta não é realmente uma resposta independente, é mais uma adição à resposta da @ PolyGeo, pois trata da 'criação do mxd do zero' na questão python.

Você pode criar MXDs do zero em python se acessar o ArcObjects . Você precisará do pacote comtypes e, se estiver usando o ArcGIS 10.1, precisará fazer uma pequena alteração no automation.py. Veja ArcObjects + comtypes em 10.1

Abaixo está um código para criar um MXD do zero em 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)
user2856
fonte
14

O código de exemplo para Criar uma camada no ArcGIS for Desktop está na Ajuda online do AddLayer (arcpy.mapping) .

As etapas para publicar um documento do ArcMap como um serviço no ArcGIS for Server estão na Ajuda online para publicar um serviço de mapa com o Python .

Observe que não é possível criar um MXD usando o ArcPy - você precisa de um MXD existente ao qual possa adicionar camadas. Essa decisão de design é descrita na Ajuda on-line sobre diretrizes para o arcpy.mapping , mas ser capaz de criar um novo documento de mapa do nada no ArcPy é uma idéia do ArcGIS que eu gostaria de ver implementada.

Veja a resposta de @ Luke para um método avançado de Python e ArcObjects que eu não testei, mas que pode fornecer uma solução alternativa para criar um MXD a partir de um script Python que o ArcPy poderá manipular.

PolyGeo
fonte