Szukasz skryptu Pythona do tworzenia plików .mxd?

11

Jestem nowy zarówno w ArcGIS, jak i Python. Moim wymaganiem jest zautomatyzowanie poniższego procesu RĘCZNEGO:

  1. Tworzenie warstwy w ArcGIS na komputery. Innymi słowy, tworzenie dokumentu ArcMap (.mxd).
  2. Publikowanie utworzonego dokumentu ArcMap (w kroku 1) jako usługi dla ArcGIS Server.

Obecnie robimy to ręcznie. Natknąłem się na skrypty automatyzujące krok 2 za pomocą Pythona.

Jak mogę zautomatyzować krok 1 i krok 2?

użytkownik15051
źródło

Odpowiedzi:

16

To nie jest tak naprawdę samodzielna odpowiedź, jest raczej dodatkiem do odpowiedzi @ PolyGeo, ponieważ dotyczy „tworzenia od podstaw od podstaw” w pythonie.

Możesz utworzyć MXD od zera w pythonie, jeśli uzyskasz dostęp do ArcObjects . Będziesz potrzebował pakietu comtypes , a jeśli korzystasz z ArcGIS 10.1, musisz dokonać niewielkiej zmiany w automation.py. Zobacz ArcObjects + comtypes w 10.1

Poniżej znajduje się kod do utworzenia MXD od zera w pythonie:

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)
użytkownik2856
źródło
14

Przykładowy kod do tworzenia warstwy w ArcGIS na komputery znajduje się w pomocy online dla AddLayer (arcpy.mapping) .

Kroki publikowania dokumentu ArcMap jako usługi ArcGIS for Server znajdują się w pomocy online dotyczącej publikowania usługi map w Pythonie .

Pamiętaj, że nie można utworzyć MXD za pomocą ArcPy - musisz mieć istniejący MXD, do którego możesz dodawać warstwy. Ta decyzja projektowa jest opisana w Pomocy online na temat Wytycznych dotyczących arcpy.mapping , ale możliwość utworzenia nowego dokumentu mapy z niczego w ArcPy to pomysł ArcGIS , który chciałbym, aby został wdrożony.

Zobacz odpowiedź @ Luke'a na zaawansowaną metodę Pythona i ArcObjects, której nie testowałem, ale może dostarczyć ci obejścia dla tworzenia MXD ze skryptu Python, którym następnie ArcPy może manipulować.

PolyGeo
źródło