Python でのライセンスおよびエクステンションへのアクセス
ツールをスクリプトから実行する場合は、必ず ArcGIS Desktop ライセンスが必要です。ArcGIS Spatial Analyst など、ArcGIS のエクステンション ツールを使用するには、そのエクステンションの追加ライセンスが必要です。必要なライセンスがない場合、ツールの実行は失敗し、エラー メッセージが返されます。たとえば、インストールに ArcView ライセンスをインストールした場合に、ArcEditor または ArcInfo のライセンス用に設定されたツールを実行しようとすると、そのツールの実行は失敗します。
ArcView または ArcEditor のライセンスを使用する場合は、スクリプト上で製品を ArcView または ArcEditor に設定する必要があります。同様に、Engine または EngineGeoDB のライセンスを使用する場合は、スクリプト上で製品を Engine または EngineGeoDB に設定する必要があります。ライセンスが明示的に設定されていない場合は、ArcPy のツール、関数、またはクラスに初めてアクセスするときに、使用可能な最上位のライセンス レベルに基づいてライセンスが初期化されます。
適切なライセンスが存在するかどうかのチェックは、すべてのツールで行われます。必要なライセンスがない場合、ツールの実行は失敗します。途中まで実行した後で失敗するという状況を避けるために、スクリプトの先頭でチェックを実行しておけば、失敗した場合にただちに終了できます。
製品とエクステンションの設定は、スタンドアロン スクリプト内でのみ必要です。Python ウィンドウからツールを実行する場合や、スクリプト ツールを使用する場合は、製品はアプリケーション内ですでに設定されており、アクティブなエクステンションは [エクステンション] ダイアログ ボックスに基づいて決められます。
デスクトップ、エンジン/サーバのライセンス
arcpy をインポートする前に製品モジュールがインポートされ、スクリプトによって使用されるデスクトップ ライセンスが定義されます。CheckProduct 関数を使用してデスクトップ ライセンスが使用可能かどうか確認できるほか、ProductInfo 関数を使用すると現在の製品ライセンス情報が報告されます。
arcpy をインポートする前に、該当する製品モジュール(arcinfo、arceditor、arcview、arcserver、arcenginegeodb、arcengine)をインポートして、製品レベルを設定する必要があります。SetProduct 関数はレガシー関数であり、arcpy がインポートされた後は製品を設定できなくなります。
エクステンション ライセンス
エクステンションのライセンスはライセンス マネージャから取得でき、不要になったときは返却できます。特定のタイプのエクステンションについてライセンスがチェックアウト可能かどうか調べるには CheckExtension を使用し、CheckOutExtension はライセンスを実際に取得します。スクリプトでエクステンション ライセンスを取得した後、エクステンション ツールを実行できます。スクリプトが特定のエクステンションからのツールを使用し終わったら、CheckInExtension 関数を使用してライセンス マネージャにライセンスを返却し、他のアプリケーションがそのライセンスを使用できるようにします。チェックアウトされたエクステンション ライセンスと、設定された製品ライセンスはすべて、スクリプトが完了するとライセンス マネージャに返却されます。
次の例では、いくつかの ArcGIS 3D Analyst ツールを実行し、デスクトップ製品ライセンスを ArcView に設定します。これは、エクステンションからのツールを実行するために ArcInfo ライセンスが必要ないからです。エクステンション ツールを実行するにはデスクトップ ライセンスが必要なので、ArcView ライセンスが明示的に設定されておらず ArcInfo ライセンスも使用できない場合は、スクリプトの実行は失敗します。
class LicenseError(Exception): pass # Set desktop license used to ArcView # import arcview import arcpy from arcpy import env try: if arcpy.CheckExtension("3D") == "Available": arcpy.CheckOutExtension("3D") else: # Raise a custom exception # raise LicenseError env.workspace = "D:/GrosMorne" arcpy.HillShade_3d("WesternBrook", "westbrook_hill", 300) arcpy.Aspect_3d("WesternBrook", "westbrook_aspect") except LicenseError: print "3D Analyst license is unavailable" except: print arcpy.GetMessages(2) finally: # Check in the 3D Analyst extension # arcpy.CheckInExtension("3D")
上の例では、3D Analyst Extension が finally 節でチェックインされており、これにより、このエクステンションは例外が発生したかどうかに関係なく常にチェックインし、戻されます。
Failed、Unavailable、または NotLicensed の値が返された場合は、エクステンションのチェックアウトが正常に行われなかったことを示しています。
次に、エクステンションの名前とエクステンション コード名を示します。
エクステンション |
エクステンション コード |
---|---|
3D Analyst |
3D |
ArcGIS Schematics |
Schematics |
ArcScan |
ArcScan |
Business Analyst |
Business |
Data Interoperability |
DataInteroperability |
Geostatistical Analyst |
GeoStats |
ArcGIS Workflow Manager |
JTX |
Network Analyst |
Network |
Esri Aeronautical Solution |
Aeronautical |
Esri Defense Mapping |
Defense |
Esri Production Mapping |
Foundation |
ArcGIS Data Reviewer |
Datareviewer |
Esri Nautical Solution |
Nautical |
Spatial Analyst |
Spatial |
StreetMap |
StreetMap |
Tracking Analyst |
Tracking |
製品コード名
製品コード |
---|
ArcInfo |
ArcEditor |
ArcView |
Engine |
EngineGeoDB |
ArcServer |
ライセンス関数
関数 |
説明 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
CheckExtension(extension) |
特定のタイプのエクステンションについてライセンスがチェックアウト可能かどうか調べます。
|
||||||||||||||||
CheckInExtension(extension) |
他のアプリケーションが使用できるようにライセンスを返却します。
|
||||||||||||||||
CheckOutExtension(extension) |
ライセンスを取得します。
|
||||||||||||||||
CheckProduct(code) |
リクエストされたライセンスが使用可能かどうか調べます。
|
||||||||||||||||
ProductInfo() |
現在の製品ライセンス情報を返します。
|
||||||||||||||||
SetProduct(code) |
デスクトップ ライセンスを定義します。
|