답변:
이것은 실제로 독립형 답변이 아니며, 파이썬 문제에서 '처음부터 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)
ArcGIS for Desktop에서 레이어를 생성하는 샘플 코드는 AddLayer 온라인 도움말 (arcpy.mapping)에 있습니다.
ArcGIS for Server에 서비스로 ArcMap 문서를 게시하는 단계는 Python으로 맵 서비스 를 게시하기 위한 온라인 도움말에 있습니다.
ArcPy를 사용하여 MXD를 만들 수는 없습니다. 레이어를 추가 할 수있는 기존 MXD가 있어야합니다. 이 디자인 결정은 arcpy.mapping 에 대한 온라인 도움말에 설명되어 있지만 ArcPy 에서 아무 것도없이 새 맵 문서를 만들 수 있다는 것은 구현하고 싶은 ArcGIS 아이디어 입니다.
테스트하지는 않았지만 ArcPy가 조작 할 수있는 Python 스크립트에서 MXD를 작성하기위한 해결 방법을 제공 할 수있는 고급 Python 및 ArcObjects 메소드에 대해서는 @Luke 의 답변 을 참조하십시오 .