यह वास्तव में एक स्टैंडअलोन उत्तर नहीं है, @ PolyGeo के उत्तर के अतिरिक्त है क्योंकि यह अजगर के मामले में 'खरोंच से mxd निर्माण' को संबोधित करता है।
यदि आप ArcObjects का उपयोग करते हैं तो आप अजगर में खरोंच से MXD बना सकते हैं । आपको comtypes पैकेज की आवश्यकता होगी और अगर ArcGIS 10.1 का उपयोग कर रहे हैं, तो आपको एक छोटा सा बदलाव करने की आवश्यकता है automation.py
। 10.1 पर ArcObjects + comtypes देखें
अजगर में खरोंच से एमएक्सडी बनाने के लिए कुछ कोड नीचे दिए गए हैं:
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)