ArcPy のインポート
ArcGIS 10 で導入された ArcPy は、ArcGIS 9.2 で導入された arcgisscripting モジュールを含み、さらに拡張した Python サイト パッケージです。ArcPy は Python スクリプトを開発するための豊富な機能を備えたダイナミックな環境を提供し、さらにコード補完機能とそれぞれの関数、モジュール、およびクラスに対応する統合されたドキュメントを備えています。
ArcPy を使用して作成された ArcGIS アプリケーションとスクリプトは、膨大な数の Python モジュールにアクセスし、操作できます。これらのモジュールは、多種多様な専門分野をもつ GIS プロフェッショナルおよびプログラマによって開発されたものです。Python 内で ArcPy を使用するもう 1 つの利点は、Python が習得しやすく使いやすい汎用プログラミング言語であるという点です。この言語はインタープリタ形式の言語であり動的な型付けを行うので、インタラクティブ環境でスクリプトをすばやくプロトタイプを作成して検証できます。大規模なアプリケーションの作成をサポートするパワフルさも兼ね備えています。
# Importing arcpy
#
import arcpy
# Set the workspace environment and run Clip_analysis
arcpy.env.workspace = "C:/Data/Tongass"
arcpy.Clip_analysis("standb4", "clipcov", "standby_clip", "1.25")
ArcPy をインポートした後、ArcGIS とともにインストールされる標準ツールボックスにあるジオプロセシング ツールがすべて実行可能になります。
モジュールのインポート
通常、モジュールは、関数とクラスで構成された Python ファイルです。ArcPy は、データ アクセス モジュール(arcpy.da)、マッピング モジュール(arcpy.mapping)、ArcGIS Spatial Analyst エクステンション モジュール(arcpy.sa)、および ArcGIS Network Analyst エクステンション モジュール (arcpy.na)などさまざまなモジュールでサポートされています。
モジュール全体をインポートするには、次のようにインポート モジュールを使用します。
# Import only arcpy.mapping
#
import arcpy.mapping
Python には他にも多数のコア モジュールおよびサードパーティ モジュールが備わっています。Python の os および sys コア モジュールも使用したい場合は、同様にして次のようなインポートを使用できます。
# Import arcpy, os and sys
#
import arcpy
import os
import sys
モジュール全体を使用する予定や必要はない場合がよくあります。モジュールの一部のみをインポートする 1 つの方法としては、from-import ステートメントを使用します。次の例では env クラスをインポートします(env クラスにはすべてのジオプロセシング環境が含まれます)。これで、環境に arcpy.env という名前でアクセスする必要がなくなり、env に単純化できます。
# Import env from arcpy and set the workspace environment
#
from arcpy import env
env.workspace = "c:/data"
これと同じような考え方から、スクリプトを読みやすくするためにモジュールまたはモジュールの一部分に特有の性質を強調したいときや、単にデフォルトの名前が長すぎると感じる場合があります。このような場合には、from-import-as という形式を使用できます。前述の例と同様に、次の例でも env クラスをインポートしますが、ENV という名前をこのクラスに割り当てます。
# Import env from arcpy as ENV and set the workspace environment
#
from arcpy import env as ENV
ENV.workspace = "c:/data"
マッピング モジュールを同じ方法でインポートすることもできます。
# Import the mapping module from arcpy as MAP and create a MapDocument
# object
#
from arcpy import mapping as MAP
mxd = MAP.MapDocument("C:/maps/basemap.mxd")
この他に、from-import-* という形式のインポートも可能です。モジュールの内容が名前空間に直接インポートされるので、接頭辞を付けずにこれらの内容すべてを直接使用できるようになります。たとえば、次のようになります。
# Import management from arcpy as *
#
from arcpy.management import *
ただし、この方法には多少のリスクが伴います。他のオブジェクト、変数、モジュールなどは上書きされます。もちろん、大規模なモジュールではネーム スペースが非常に混在してしまうことが考えられます。そこで次のように考えてみましょう。次に示す例では、管理モジュールと解析モジュールの両方が * としてインポートされます。どちらのモジュールにも Clip ツールがあります。ここで Clip を使おうとした場合、どちらの Clip が実際に使用されるのでしょうか。正解は 2 番目のものですが、この方法ではあいまいさが生じ、スクリプトが読みづらくなります。
# Import the management and analysis modules from arcpy as *
#
from arcpy.management import *
from arcpy.analysis import *
# Which Clip is it?
#
Clip("standb4", "clipcov", "standby_clip", "1.25")
ただし、場合によっては、from-import-* を使用するとコードを単純化できます。これは、ArcGIS Spatial Analyst エクステンション の sa モジュールを使用する場合が当てはまります。sa モジュールの利点の 1 つは、1 つのラスタ オブジェクトを生成するために、1 行に複数のクラスと関数を入れ子にできる点です。
次のどちらのサンプルでも、ArcGIS Spatial Analyst エクステンション が必要です。
# Import arcpy and the sa module as *
#
import arcpy
from arcpy.sa import *
arcpy.CheckOutExtension("spatial")
# Get input parameters
#
inRaster1 = arcpy.GetParameterAsText(0)
inRaster2 = arcpy.GetParameterAsText(1)
inRaster3 = arcpy.GetParameterAsText(2)
outRaster = (Raster(inRaster1) + (Raster(inRaster2) - Raster(inRaster3)))
これを、次のコード ブロックと比較してみましょう。ここでは標準的な import-from ステートメントを使用します。ここで、このコードにいくつかのクラスと関数を追加した場合を想像してみましょう。すべての関数とクラスに単純に sa. を追加するだけですが、すぐに積もり重なって読みやすさが損なわれ、行に余計な部分が増えます。
# Import arcpy and the sa module
#
import arcpy
from arcpy import sa
arcpy.CheckOutExtension("spatial")
# Get input parameters
#
inRaster1 = arcpy.GetParameterAsText(0)
inRaster2 = arcpy.GetParameterAsText(1)
inRaster3 = arcpy.GetParameterAsText(2)
outRaster = (sa.Raster(inRaster1) + (sa.Raster(inRaster2) - sa.Raster(inRaster3)))
パスとインポート
import ステートメントを使用する際に、Python はその名前と一致するモジュールを次の場所で検索します(順序も次のとおり)。
- PYTHONPATH システム環境変数に指定されているパス
- 一連の標準 Python フォルダ(現在のフォルダ、c:\python2x\lib、c:\python2x\Lib\site-packages など)
- 1 および 2 で見つかった .pth ファイル内で指定されているパス
詳細については、次のトピックをご参照ください。http://docs.python.org/install/index.html#modifying-python-s-search-path
ArcGIS 10.2.2 製品をインストールすると、Python 2.7 もインストールされます(すでにインストールされていない場合)。さらに、Desktop10.2.2.pth ファイル、Engine10.2.2.pth ファイル、または Server10.2.2.pth ファイルも python27\Lib\site-packages に追加されます。このファイルの内容は 2 行からなり、システムの ArcGIS インストール済み環境にある arcpy フォルダと bin フォルダのパスが格納されています。これら 2 つのパスは、Python バージョン 2.7 に ArcPy を正常にインポートするために必要です。
import ステートメントを使用する際に、Python はシステムの PYTHONPATH 環境変数を参照してモジュール ファイルを探します。この変数は、ディレクトリのリストに設定されています。
ArcPy のインポート時に次のいずれかのエラーが発生した場合は、必要なモジュールが見つからなかったことを示しています。
- ImportError:No module named arcpy
- ImportError:No module named arcgisscripting
このエラーに対処するには、Windows エクスプローラを使用して python27\Lib\site-packages フォルダを開き、Desktop10.2.2.pth ファイルを追加または編集します。このファイルには、次に示す 3 行が含まれている必要があります(ご使用のシステムのパスと一致しない場合は修正してください)。
c:\Program Files\ArcGIS\Desktop10.2.2\arcpy
c:\Program Files\ArcGIS\Desktop10.2.2\bin
c:\Program Files\ArcGIS\Desktop10.2.2\ArcToolbox\Scripts