Шукаєте сценарій Python для створення .mxd файлів?


11

Я новачок і в ArcGIS, і в Python. Моя вимога полягає в автоматизації наведеного нижче МЕНЮЛЬНОГО процесу:

  1. Створення шару в ArcGIS для Desktop. Іншими словами, створивши документ ArcMap (.mxd).
  2. Публікація створеного документа ArcMap (на кроці 1) як сервіс для ArcGIS Server.

В даний час ми робимо це вручну. Я натрапив на сценарії для автоматизації кроку 2 за допомогою Python.

Як я можу автоматизувати крок 1 та крок 2?

Відповіді:


16

Це насправді не окрема відповідь, більше доповнення до відповіді @ PolyGeo, оскільки вона стосується "створення mxd з нуля" у питанні python.

Ви можете створити MXD з нуля в python, якщо ви маєте доступ до ArcObjects . Вам знадобиться пакет комтинів, і якщо ви використовуєте ArcGIS 10.1, вам потрібно внести невелику зміну в automation.py. Дивіться ArcObjects + comtypes в 10.1

Нижче наведено код для створення MXD з нуля в 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

Зразок коду для створення шару в ArcGIS for Desktop знаходиться в Інтернет-довідці для AddLayer (arcpy.mapping) .

Крок для публікації документа ArcMap як сервісу для ArcGIS for Server знаходиться в Інтернет-довідці щодо публікації сервісу карт з Python .

Зауважте, що неможливо створити MXD за допомогою ArcPy - вам потрібно мати існуючий MXD, до якого ви можете додавати шари. Це дизайнерське рішення описано в Інтерненній довідці щодо керівництва щодо arcpy.mapping , але можливість створення нового Документа карт з нічого в ArcPy - це ідея ArcGIS, яку я хотів би бачити реалізованою.

Дивіться відповідь @ Luke щодо вдосконаленого методу Python та ArcObjects, який я не перевіряв, але, можливо, вам запропонують вирішення для створення MXD із сценарію Python, завдяки якому ArcPy може продовжувати маніпулювати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.