.Mxd dosyaları oluşturmak için Python betiği mi arıyorsunuz?


11

Hem ArcGIS hem de Python için yeniyim. Benim gereksinimim aşağıdaki MANUAL işlemini otomatikleştirmek:

  1. ArcGIS for Desktop'ta bir katman oluşturma. Başka bir deyişle, bir ArcMap belgesi (.mxd) oluşturun.
  2. Oluşturulan ArcMap belgesini (1. Adımda) ArcGIS Server'a bir hizmet olarak yayınlamak.

Şu anda bunu manuel olarak yapıyoruz. Python kullanarak 2. adımı otomatikleştirmek için komut dosyaları ile karşılaştım.

Adım 1 ve adım 2'yi nasıl otomatikleştirebilirim?

Yanıtlar:


16

Bu gerçekten bağımsız bir cevap değil , python sayısında 'sıfırdan mxd oluşturma' konusunu ele aldığı için @ PolyGeo'nun cevabına ek olarak.

ArcObjects'e erişirseniz, python'da sıfırdan MXD'ler oluşturabilirsiniz . Comtypes paketine ihtiyacınız olacak ve ArcGIS 10.1 kullanıyorsanız, küçük bir değişiklik yapmanız gerekiyor automation.py. Bkz. 10.1'deki ArcObjects + comtypes

Python'da sıfırdan bir MXD oluşturmak için bazı kodlar aşağıdadır:

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

ArcGIS for Desktop'ta katman oluşturmak için örnek kod AddLayer için Çevrimiçi Yardım'dadır (arcpy.mapping) .

ArcMap belgesini ArcGIS for Server'a hizmet olarak yayınlama adımları Python ile harita hizmeti yayınlamak için Çevrimiçi Yardım'dadır .

ArcPy kullanarak bir MXD oluşturmanın mümkün olmadığını unutmayın - katman ekleyebileceğiniz mevcut bir MXD'ye sahip olmanız gerekir. Bu tasarım kararı arcpy.mapping için Çevrimiçi Yardım Kılavuzunda açıklanmıştır , ancak ArcPy'de hiçbir şeyden yeni bir Harita Belgesi oluşturabilmek, uygulandığını görmek istediğim bir ArcGIS Fikiridir .

Test etmediğim ancak ArcPy'nin işlemeye devam edebileceği bir Python betiğinden MXD oluşturmak için geçici bir çözüm sağlayabilen gelişmiş bir Python ve ArcObjects yöntemi için @ Luke'un cevabına bakın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.