Cerchi script Python per creare file .mxd?


11

Sono nuovo di ArcGIS e Python. Il mio requisito è di automatizzare il seguente processo MANUALE:

  1. Creazione di un livello in ArcGIS per desktop. Per dirla in altre parole, creando un documento ArcMap (.mxd).
  2. Pubblicazione del documento ArcMap creato (al passaggio 1) come servizio su ArcGIS Server.

Attualmente lo stiamo facendo manualmente. Ho incontrato degli script per automatizzare il passaggio 2 usando Python.

Come posso automatizzare i passaggi 1 e 2?

Risposte:


16

Questa non è in realtà una risposta autonoma, più un'aggiunta alla risposta di @ PolyGeo in quanto risolve la "creazione mxd da zero" nel problema di Python.

È possibile creare MXD da zero in Python se si accede ad ArcObjects . Sarà necessario il pacchetto comtypes e se si utilizza ArcGIS 10.1, è necessario apportare una piccola modifica a automation.py. Vedi ArcObjects + comtypes alla 10.1

Di seguito è riportato un codice per creare un MXD da zero in 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)

14

Il codice di esempio per creare un livello in ArcGIS per desktop si trova nella Guida in linea di AddLayer (arcpy.mapping) .

I passaggi per la pubblicazione di un documento ArcMap come servizio su ArcGIS per Server sono nella Guida in linea per la pubblicazione di un servizio di mappe con Python .

Si noti che non è possibile creare un MXD usando ArcPy: è necessario disporre di un MXD esistente al quale è possibile aggiungere layer. Tale decisione di progettazione è descritta nella Guida in linea sulle linee guida per arcpy.mapping , ma essere in grado di creare un nuovo documento cartografico dal nulla in ArcPy è un'idea ArcGIS che vorrei vedere implementata.

Vedi la risposta di @ Luke per un metodo Python e ArcObjects avanzato che non ho testato ma che potrebbe fornirti una soluzione alternativa per la creazione di un MXD da uno script Python che ArcPy può quindi continuare a manipolare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.