Ищете скрипт Python для создания файлов .mxd?

11

Я новичок в ArcGIS и Python. Мое требование - автоматизировать приведенный ниже РУЧНОЙ процесс:

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

В настоящее время мы делаем это вручную. Я натолкнулся на сценарии для автоматизации шага 2 с использованием Python.

Как я могу автоматизировать шаг 1 и шаг 2?

user15051
источник

Ответы:

16

На самом деле это не отдельный ответ, а скорее дополнение к ответу @ PolyGeo, поскольку оно касается «создания mxd с нуля» в проблеме с питоном.

Вы можете создавать MXD с нуля в python, если вы обращаетесь к ArcObjects . Вам понадобится пакет comtypes , и если вы используете 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)
user2856
источник
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 может затем манипулировать.

PolyGeo
источник