.mxdファイルを作成するためのPythonスクリプトをお探しですか?


11

私はArcGISとPythonの両方が初めてです。私の要件は、以下の手動プロセスを自動化することです。

  1. ArcGIS for Desktopでレイヤーを作成します。別の言い方をすれば、ArcMapドキュメント(* .mxd)を作成します。
  2. 作成されたArcMapドキュメント(ステップ1)をArcGIS Serverへのサービスとして公開します。

現在、これを手動で行っています。Pythonを使用してステップ2を自動化するスクリプトに出会いました。

ステップ1とステップ2を自動化するにはどうすればよいですか?

回答:


16

これは実際にはスタンドアロンの答えではなく、Pythonの問題の「ゼロからのmxdの作成」に対処するため、@ PolyGeoの答えに追加されたものです。

ArcObjectsにアクセスすると、PythonでMXDをゼロから作成できます。comtypesパッケージが必要になります。ArcGIS10.1を使用している場合は、に小さな変更を加える必要がありますautomation.py10.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)

14

ArcGIS for Desktopでレイヤーを作成するサンプルコードは、AddLayerのオンラインヘルプ(arcpy.mapping)にあります。

ArcMapドキュメントをサービスとしてArcGIS for Serverに公開する手順は、Pythonでマップサービスを公開するためのオンラインヘルプにあります

ArcPyを使用してMXDを作成することはできないことに注意してください-レイヤーを追加できる既存のMXDが必要です。その設計上の決定は、arcpy.mappingのガイドラインに関するオンラインヘルプに記載されていますが、ArcPyの何もないところから新しいマップドキュメントを作成できるというのは、ArcGISのアイデアです。

テストしていない高度なPythonおよびArcObjectsメソッドについては、@ Lukeの回答を参照してください。ただし、ArcPyが操作を続行できるPythonスクリプトからMXDを作成するための回避策が提供される場合があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.