回答:
これは実際にはスタンドアロンの答えではなく、Pythonの問題の「ゼロからのmxdの作成」に対処するため、@ PolyGeoの答えに追加されたものです。
ArcObjectsにアクセスすると、PythonでMXDをゼロから作成できます。comtypesパッケージが必要になります。ArcGIS10.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)
ArcGIS for Desktopでレイヤーを作成するサンプルコードは、AddLayerのオンラインヘルプ(arcpy.mapping)にあります。
ArcMapドキュメントをサービスとしてArcGIS for Serverに公開する手順は、Pythonでマップサービスを公開するためのオンラインヘルプにあります。
ArcPyを使用してMXDを作成することはできないことに注意してください-レイヤーを追加できる既存のMXDが必要です。その設計上の決定は、arcpy.mappingのガイドラインに関するオンラインヘルプに記載されていますが、ArcPyの何もないところから新しいマップドキュメントを作成できるというのは、ArcGISのアイデアです。
テストしていない高度なPythonおよびArcObjectsメソッドについては、@ Lukeの回答を参照してください。ただし、ArcPyが操作を続行できるPythonスクリプトからMXDを作成するための回避策が提供される場合があります。