【第17回】定型業務はすべておまかせ!iDesktopXのプロセスオートメーション

こんにちは!GIS導入支援コンサルタントのippuku_timeです。

「5分で分かるSuperMap iDesktopX製品・機能紹介シリーズ」、第17回です。前回は、自然言語でGISを操作する未来的な「AIアシスタント」機能をご紹介しました。今回は、AIアシスタントの「インテリジェントモデリング」機能とも密接に関連する、GIS業務の自動化と効率化の切り札「プロセスオートメーション(モデルビルダー)」について深掘りしていきます。


【第17回】定型業務はすべておまかせ!iDesktopXのプロセスオートメーション


1. プロセスオートメーションとは?

GISを使った分析やデータ処理は、複数のツールや機能を段階的に実行する、一連の作業の繰り返しであることがよくあります。例えば、「CSVデータのインポート」→「空間データの座標系変換」→「バッファ分析」→「結果の主題図作成」といった一連の流れです。

iDesktopXの「プロセスオートメーション」は、このような一連の作業(プロセス)を視覚的なフローチャートとして構築し、ワンクリックで自動実行できるようにする機能です。一度モデルを作成すれば、同じ処理を何度でも正確かつ迅速に繰り返すことができ、時間のかかる定型業務から解放されます。

図 GISのプロセスオートメーションの概念イメージ:複数のタスクが自動で連携し、新しい知見を生み出す


2. モデルビルダーの構成要素

プロセスオートメーションの設計は、専用の「モデルビルダー」インターフェースで行います。ここでは、主に以下の3種類の要素をドラッグ&ドロップで配置し、線でつなぐことでワークフローを構築します。

(1) データ(Input/Output)

解析の入力となるデータセットや、解析結果として生成されるデータセットを表します。中間データもここに含みます。

(2) ツール(Tools)

GISの様々な機能(バッファ分析、オーバーレイ、クリップ、座標系変換など)を表します。iDesktopXのほぼすべてのGISツールが、このモデルビルダーの要素として利用可能です。

(3) 変数・制御(Variables/Controls)

モデルの実行を制御したり、パラメータを動的に変更したりするための要素です。

① イテレータ (Iterator): 特定のフォルダ内の複数ファイルに対して同じ処理を繰り返すなど、バッチ処理を可能にします。

② ブランチ (Branch): 条件分岐(例:「データが空でなければ次の処理に進む」)を設定します。


3. モデル作成のステップと具体例

(1) モデルの新規作成: 「ツールボックス」ウィンドウで右クリックし、「モデルビルダー」を選択して新しいモデルを作成します。

(2) ツールとデータの追加: ツールボックスから必要なツール(例: バッファ分析)をキャンバスにドラッグ&ドロップします。同時に、入力データも配置します。

(3) パラメータの設定と接続: 各ツールのプロパティを開き、必要なパラメータ(例: バッファ距離)を設定します。データとツール、ツールと次のツールを線でつなぎ、処理の順番とデータの流れを定義します。

(4) 実行と保存: モデルが完成したら、「実行」ボタンでワークフロー全体を自動実行します。作成したモデルは保存しておけば、いつでも再利用可能です。

具体例:港区の避難所アクセス分析モデル

① 入力: 港区の建物データ、避難所ポイントデータ

② ツール1: 「バッファ分析」(避難所から半径500mのサービスエリアを作成)

③ ツール2: 「オーバーレイ(インターセクト)」(建物のデータとサービスエリアを重ね合わせ、サービスエリア内の建物を抽出)

④ ツール3: 「属性計算」(抽出された建物に「避難所アクセス可能」フラグを追加)

⑤ 出力: アクセス可能な建物データセット

この一連の作業をモデルとして構築すれば、新しい避難所が追加された際にも、ワンクリックで最新のアクセス可能エリアを再計算・更新できます。


4. モデルビルダーの応用:Pythonスクリプトへの出力

iDesktopXのモデルビルダーで作成したワークフローは、そのままPythonスクリプトとして出力することが可能です。

(1) メリット:

① コード生成の支援: プログラミングの知識がなくても、視覚的な操作で複雑なGIS処理のPythonコードを自動生成できます。これはPython学習者にとっても強力な支援ツールとなります。

② カスタマイズ: 生成されたPythonスクリプトは、手動でさらにカスタマイズしたり、他のPythonライブラリと連携させたりすることが可能です。

③ サーバーでの実行: 生成されたスクリプトをSuperMap iServerなどのサーバー環境で実行することで、デスクトップ環境に縛られず、自動処理システムに組み込むことも可能になります。


まとめ

今回は、GIS業務の自動化と効率化を実現する「プロセスオートメーション(モデルビルダー)」についてご紹介しました。複雑な一連のGIS処理を視覚的なワークフローとして構築し、自動実行することで、作業時間の短縮、ミスの削減、そして作業の標準化が可能になります。さらに、Pythonスクリプトへの出力機能は、GISとプログラミングの連携を強力に推進し、より高度な自動化への道を開きます。

次回は、**第18回「GISをWebで共有!Webマップの公開と活用」**です。iDesktopXで作成した地図や分析結果を、Web上で公開し、多くの人と共有するための具体的な方法について解説します。お楽しみに!


付録:サンプルコード(Python)


プロセスオートメーション(モデルビルダー)で作成した「避難所アクセス分析モデル」が、Pythonスクリプトとして出力された際のコードのイメージです。視覚的に構築したフローが、プログラミング言語のコードとして表現されていることがわかります。

Python


# -*- coding: utf-8 -*-

from PySuperMap import *
from PySuperMap.Analyst import *
from PySuperMap.Analyst.BufferAnalyst import *
from PySuperMap.Analyst.OverlayAnalyst import *

def analyze_shelter_access_model():
    """
    避難所アクセス分析のモデルをPythonスクリプトで実行するサンプル
    (モデルビルダーで作成後、Pythonスクリプトとしてエクスポートされたイメージ)
    """
    try:
        # ワークスペースとデータソースを取得
        workspace = Workspace()
        datasource = workspace.get_datasource("Minato_Data")
        if datasource is None: return

        # 入力データセット
        buildings_dataset = datasource.get_dataset("Buildings_Minato")
        shelters_dataset = datasource.get_dataset("Shelters_Minato")
       
        if buildings_dataset is None or shelters_dataset is None:
            print("入力データセット 'Buildings_Minato' または 'Shelters_Minato' が見つかりません。")
            return

        print("避難所アクセス分析モデルを実行します...")

        # 1. バッファ分析 (避難所から半径500mのサービスエリアを作成)
        buffer_result_name = "Shelter_500m_Buffer"
        buffer_distance = 500 # メートル

        buffer_param = BufferAnalystParameter()
        buffer_param.set_buffer_distance(buffer_distance)
        buffer_param.set_result_is_single(True) # 全てを単一のポリゴンに統合
       
        print("  - バッファ分析を実行中...")
        buffer_dataset = BufferAnalyst.create_buffer(shelters_dataset, datasource, buffer_result_name, buffer_param)
       
        if buffer_dataset is None:
            print("    バッファ分析に失敗しました。")
            return

        # 2. オーバーレイ分析 (建物とバッファをインターセクト)
        intersect_result_name = "Buildings_Accessible_to_Shelter"
       
        overlay_param = OverlayAnalystParameter()
        overlay_param.set_operation_type(OverlayOperationType.INTERSECT)
       
        print("  - オーバーレイ分析を実行中...")
        accessible_buildings_dataset = OverlayAnalyst.overlay(
            buildings_dataset, buffer_dataset, datasource, intersect_result_name, overlay_param
        )

        if accessible_buildings_dataset is None:
            print("    オーバーレイ分析に失敗しました。")
            return

        # 3. 属性計算 (抽出された建物に「避難所アクセス可能」フラグを追加)
        # 実際には、CreateFieldやCalculateFieldなどの操作が続く
        # 例: accessible_buildings_dataset.get_field_infos().add_field(...)
        # GeoAnalysis.calculate_field(accessible_buildings_dataset, "IsAccessible", "1")
        print("  - 属性計算 (アクセス可能フラグ追加) はここでは省略します。")

        print(f"モデル実行が完了しました。結果は '{intersect_result_name}' に保存されました。")
       
        # 結果をアクティブなマップに追加 (オプション)
        map_view = workspace.get_active_map_view()
        if map_view is not None:
            map_obj = map_view.get_map()
            map_obj.get_layers().add_dataset(accessible_buildings_dataset)
            map_obj.refresh()
            print("  - 結果を地図に追加しました。")

    except Exception as e:
        print(f"エラーが発生しました: {e}")
    finally:
        # 中間データセットのクリーンアップ (モデルビルダーでは自動的に管理されることが多い)
        # 例: if datasource.get_datasets().is_exist(buffer_result_name):
        #        datasource.get_datasets().delete(buffer_result_name)
        print("処理を終了します。")

if __name__ == '__main__':
    analyze_shelter_access_model()

コメント

このブログの人気の投稿

【11月リリース予定】SuperMap iServer 2025 プレビュー:WebGIS体験を刷新する新機能とは?

「GIS」っていまだに「地理情報システム」の略?時代の変化と共に、その本当の意味を再定義してみた

「国土数値情報」を考える:それは日本のGISを支える“共通の土台”である