Vous cherchez un script Python pour créer des fichiers .mxd?

11

Je suis nouveau sur ArcGIS et Python. Mon exigence est d'automatiser le processus MANUEL ci-dessous:

  1. Création d'une couche dans ArcGIS for Desktop. Pour le dire autrement, créer un document ArcMap (.mxd).
  2. Publication du document ArcMap créé (à l'étape 1) en tant que service sur ArcGIS Server.

Actuellement, nous le faisons manuellement. J'ai rencontré des scripts pour automatiser l'étape 2 à l'aide de Python.

Comment automatiser les étapes 1 et 2?

user15051
la source

Réponses:

16

Ce n'est pas vraiment une réponse autonome, plutôt un ajout à la réponse de @ PolyGeo car elle traite de la `` création mxd à partir de zéro '' dans le problème python.

Vous pouvez créer des MXD à partir de zéro en python si vous accédez à ArcObjects . Vous aurez besoin du package comtypes et si vous utilisez ArcGIS 10.1, vous devez apporter une petite modification à automation.py. Voir ArcObjects + comtypes à 10.1

Vous trouverez ci-dessous du code pour créer un MXD à partir de zéro 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)
user2856
la source
14

Un exemple de code pour créer une couche dans ArcGIS for Desktop se trouve dans l'aide en ligne d' AddLayer (arcpy.mapping) .

Les étapes de publication d'un document ArcMap en tant que service sur ArcGIS for Server se trouvent dans l'aide en ligne pour la publication d'un service de carte avec Python .

Notez qu'il n'est pas possible de créer un MXD à l'aide d'ArcPy - vous devez avoir un MXD existant auquel vous pouvez ajouter des couches. Cette décision de conception est décrite dans l'aide en ligne sur les directives pour arcpy.mapping , mais pouvoir créer un nouveau document ArcMap à partir de rien dans ArcPy est une idée ArcGIS que j'aimerais voir implémentée.

Voir la réponse de @ Luke pour une méthode Python et ArcObjects avancée que je n'ai pas testée mais qui peut vous fournir une solution pour créer un MXD à partir d'un script Python qu'ArcPy peut ensuite manipuler.

PolyGeo
la source