Answers:
这实际上不是一个独立的答案,更多的是@PolyGeo的答案,因为它解决了python问题中的“从头开始创建mxd”。
如果访问ArcObjects,则可以在python中从头开始创建MXD 。您将需要comtypes软件包,如果使用ArcGIS 10.1,则需要对进行一些更改automation.py
。请参阅10.1处的ArcObjects + comtypes
以下是一些在python中从头开始创建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)
AddLayer的联机帮助(arcpy.mapping)上提供了在ArcGIS for Desktop中创建图层的示例代码。
将ArcMap文档作为服务发布到ArcGIS for Server的步骤在使用Python发布地图服务的联机帮助中。
请注意,无法使用ArcPy创建MXD-您需要具有可向其添加图层的现有MXD。该设计决策已在arcpy.mapping指南在线帮助中进行了描述,但是我想看到在ArcPy中能够从零开始创建新的Map Document是一个ArcGIS Idea。
有关我尚未测试的高级Python和ArcObjects方法的信息,请参见@Luke的答案,但可能为您提供了一种解决方法,可通过ArcPy随后可以进行操作的Python脚本创建MXD。