Mencari skrip Python untuk membuat file .mxd?

11

Saya baru mengenal ArcGIS dan Python. Persyaratan saya adalah untuk mengotomatiskan proses MANUAL di bawah ini:

  1. Membuat layer di ArcGIS untuk Desktop. Dengan kata lain, buat dokumen ArcMap (.mxd).
  2. Menerbitkan dokumen ArcMap yang dibuat (pada Langkah 1) sebagai layanan ke ArcGIS Server.

Saat ini kami sedang melakukan ini secara manual. Saya telah menemukan skrip untuk mengotomatisasi langkah 2 menggunakan Python.

Bagaimana saya mengotomatiskan langkah 1 dan langkah 2?

pengguna15051
sumber

Jawaban:

16

Ini bukan benar-benar jawaban mandiri, lebih merupakan tambahan untuk jawaban @ PolyGeo karena alamat 'penciptaan mxd dari awal' dalam masalah python.

Anda dapat membuat MXD dari awal dengan python jika Anda mengakses ArcObjects . Anda akan membutuhkan paket comtypes dan jika menggunakan ArcGIS 10.1, Anda perlu melakukan sedikit perubahan automation.py. Lihat ArcObjects + comtypes di 10.1

Di bawah ini adalah beberapa kode untuk membuat MXD dari awal dengan 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)
pengguna2856
sumber
14

Kode contoh untuk Membuat lapisan di ArcGIS untuk Desktop ada di Bantuan Online untuk AddLayer (arcpy.mapping) .

Langkah-langkah untuk Menerbitkan dokumen ArcMap sebagai layanan ke ArcGIS untuk Server ada dalam Bantuan Online untuk Menerbitkan layanan peta dengan Python .

Perhatikan bahwa membuat MXD menggunakan ArcPy tidak mungkin - Anda harus memiliki MXD yang sudah ada tempat Anda dapat menambahkan layer. Keputusan desain itu dijelaskan dalam Bantuan Online tentang Panduan untuk arcpy.mapping , tetapi bisa membuat Dokumen Peta baru dari ketiadaan di ArcPy adalah Ide ArcGIS yang ingin saya implementasikan.

Lihat @ Luke jawaban untuk metode Python dan ArcObjects canggih yang saya belum diuji tetapi dapat memberi Anda solusi untuk membuat MXD dari skrip Python yang kemudian dapat digunakan oleh ArcPy untuk memanipulasi.

PolyGeo
sumber