.mxd 파일을 만들기위한 Python 스크립트를 찾고 있습니까?


11

ArcGIS와 Python을 처음 사용합니다. 내 요구 사항은 아래 수동 프로세스를 자동화하는 것입니다.

  1. ArcGIS for Desktop에서 레이어 만들기. 다시 말해 ArcMap 문서 (.mxd)를 만듭니다.
  2. 생성 된 ArcMap 문서 (1 단계)를 ArcGIS Server에 서비스로 게시합니다.

현재이 작업을 수동으로 수행하고 있습니다. 파이썬을 사용하여 2 단계를 자동화하는 스크립트를 보았습니다.

1 단계와 2 단계를 자동화하려면 어떻게해야합니까?

답변:


16

이것은 실제로 독립형 답변이 아니며, 파이썬 문제에서 '처음부터 mxd 생성'을 해결하기 때문에 @PolyGeo의 답변에 더해집니다.

ArcObjects에 액세스 하면 파이썬에서 처음부터 MXD를 만들 수 있습니다 . comtypes 패키지 가 필요하며 ArcGIS 10.1을 사용 하는 경우을 약간 변경해야 automation.py합니다. 10.1에서 ArcObjects + comtypes 참조

다음은 파이썬에서 MXD를 처음부터 작성하는 코드입니다.

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)에 있습니다.

ArcGIS for Server에 서비스로 ArcMap 문서를 게시하는 단계는 Python으로 맵 서비스게시하기 위한 온라인 도움말에 있습니다.

ArcPy를 사용하여 MXD를 만들 수는 없습니다. 레이어를 추가 할 수있는 기존 MXD가 있어야합니다. 이 디자인 결정은 arcpy.mapping 에 대한 온라인 도움말에 설명되어 있지만 ArcPy 에서 아무 것도없이 새 맵 문서를 만들 수 있다는 것은 구현하고 싶은 ArcGIS 아이디어 입니다.

테스트하지는 않았지만 ArcPy가 조작 할 수있는 Python 스크립트에서 MXD를 작성하기위한 해결 방법을 제공 할 수있는 고급 Python 및 ArcObjects 메소드에 대해서는 @Luke 의 답변 을 참조하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.