【第6回】GISデータの潜在能力を引き出す!iDesktopXの多種多様なデータ処理機能

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

「5分で分かるSuperMap iDesktopX製品・機能紹介シリーズ」の第6回へようこそ。前回は地図データを作成・編集する「オブジェクト操作」について学びました。今回は、そうして作成・収集した多種多様なデータを、分析や可視化に適した形に整える「データ処理」機能に焦点を当てます。これは、いわば料理における下ごしらえのようなもの。GISの真骨頂ともいえる強力なデータ加工能力をご覧ください。


【第6回】GISデータの潜在能力を引き出す!iDesktopXの多種多様なデータ処理機能


GISプロジェクトでは、異なる部署や組織から、様々な形式、異なる座標系のデータが集まってくることが日常茶飯事です。これらの「素材」をそのまま使うのではなく、目的に合わせて適切に処理することで、データの価値は飛躍的に高まります。iDesktopXは、この複雑なデータ処理を効率的に行うための機能を豊富に搭載しています。

図6-1 GISデータ処理の概念イメージ:生のデータを整然とした活用可能なデータへ変換


1. 異なる形式の壁を越える「データ変換」

GISの世界には数多くのデータ形式が存在します。iDesktopXは、それらの形式間の相互変換をスムーズに行います。

(1) インポート/エクスポート

① インポート: Shapefile、AutoCAD(DWG/DXF)、GeoPackage、GeoJSON、CSVなど、80種類以上の外部データ形式をSuperMap独自の高性能なデータ形式(UDBX)にインポートできます。

② エクスポート: 逆に、iDesktopXで作成・編集したデータを、Shapefileなど他のGISソフトウェアで利用できる形式にエクスポートすることも可能です。


2. 位置のズレを精密に補正「データレジストレーション」

スキャンした紙地図や、座標情報を持たないCAD図面などをGISで利用するには、正しい地理座標を与える「レジストレーション(位置合わせ)」という作業が必要です。

(1) コントロールポイントの選択:

位置が分かっている地図(参照データ)と、位置を合わせたいデータ(対象データ)の両方で、共通する特徴的な地点(道路の交差点、建物の角など)を複数ペアで指定します。この対応点を「コントロールポイント(GCP)」と呼びます。

(2) 変換と補正:

指定したコントロールポイントに基づき、システムが最適な変換式を計算し、対象データの形状を変形させながら参照データにぴったりと重ね合わせます。これにより、単なる画像だったスキャン地図が、座標を持つGISデータとして生まれ変わります。


3. データの品質を保証する「トポロジー分析」

トポロジーとは、図形の位置関係(隣接、接続、包含など)の整合性を指す言葉です。例えば、「ポリゴン間に隙間や重なりがあってはならない」「道路(ライン)は必ず交差点で分割されていなければならない」といったルールです。データの品質を保証し、正確な空間解析を行うためには、トポロジーが正しく構築されていることが不可欠です。

(1) トポロジーチェック:

あらかじめ定義されたルール(例:「ポリゴンは重ならない」)に基づいてデータ全体をチェックし、ルールに違反している箇所を自動的に検出します。

(2) トポロジー修正:

検出されたエラー(ポリゴンの重なり、ラインの未接続など)を自動または半自動で修正します。これにより、クリーンで解析に適した高品質なデータを作成できます。


4. ベクタデータの高度な処理

iDesktopXには、ベクタデータを自在に加工するためのツールが多数用意されています。

(1) ディゾルブ (Dissolve): 同じ属性値を持つ隣接したポリゴンを一つに融合します。例えば、港区内の各町丁目のポリゴンを、同じ「地区名」でディゾルブすれば、赤坂地区や麻布地区といったより大きな区画のポリゴンを作成できます。

(2) 中心線の抽出: 道路のような幅のあるポリゴンデータや、河川ポリゴンから、その中心線を自動的に抽出します。ナビゲーション用のネットワークデータを作成する際に非常に便利です。

(3) 微小ポリゴンの統合: データ処理の過程で意図せず生じてしまう、非常に小さなポリゴン(スリバーポリゴン)を自動検出し、隣接する大きなポリゴンに統合してデータをきれいにします。


5. ラスタデータの高度な処理

航空写真や標高データなどのラスタデータに対しても、多彩な処理機能が提供されています。

(1) モザイク (Mosaic): 隣接する複数の航空写真タイルを、継ぎ目なく一枚の大きなラスタデータに合成します。

(2) ラスタ演算 (Raster Calculator): 複数のラスタデータ間で、ピクセルごとに四則演算などの数学的な計算を行います。例えば、2つの時期の標高データの差分を計算して、地盤変動量を算出する、といった解析が可能です。

(3) 再分類 (Reclassify): ラスタのピクセル値を、新しいカテゴリに分類し直します。例えば、詳細な標高値を「0-10m(低地)」「10-50m(丘陵地)」「50m以上(台地)」といった大まかなカテゴリに分けることができます。


まとめ

今回は、GISプロジェクトの成功に不可欠な「データ処理」機能についてご紹介しました。異なるデータ形式や座標系を統一する基本的な処理から、データの品質を保証するトポロジー構築、そして高度な加工・編集ツールまで、iDesktopXが強力なデータ前処理能力を持っていることをご理解いただけたかと思います。これらの機能を使いこなすことで、あらゆる「素材」を分析可能な「食材」へと整えることができます。

次回は、**第7回「地図を彩る!多彩な可視化表現テクニック」**をお届けします。データをただ表示するだけでなく、より分かりやすく、美しく見せるためのシンボル設定やスタイル設定について解説します。お楽しみに!


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


データ処理の一般的なワークフローとして、港区内の主要な駅(点データ)から500mのバッファを作成し、そのバッファ領域に含まれる建物(ポリゴンデータ)を抽出する(クリップする)処理をPythonで自動化するコードです。

Python


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


from PySuperMap import *
from PySuperMap.Analyst import *

def vector_data_processing_sample():
    """
    データ処理(バッファとクリップ)を自動化するサンプル
    """
    try:
        # ワークスペースとデータソースを取得
        workspace = Workspace()
        datasource = workspace.get_datasource("Minato_Data") # 第3回のサンプルで作成したデータソース
        if datasource is None: return

        # 入力データセットを取得
        station_dataset = datasource.get_dataset("Stations_Minato") # 駅のポイントデータ
        building_dataset = datasource.get_dataset("Buildings_Minato") # 建物のポリゴンデータ
        if station_dataset is None or building_dataset is None:
            print("必要なデータセットが見つかりません。")
            return

        # 1. 駅データからバッファを作成
        buffer_param = BufferAnalystParameter()
        buffer_param.set_end_type(BufferEndType.ROUND) # バッファの端点を丸める
        buffer_param.set_radius(500) # 500メートルのバッファ
        buffer_param.set_is_union(True) # 結果のバッファを一つに融合する

        result_buffer_name = "Station_Buffer_500m"
        print("駅周辺のバッファ分析を開始します...")
        is_success = GeoAnalysis.buffer(station_dataset, datasource, result_buffer_name, buffer_param)
       
        if not is_success:
            print("バッファ分析に失敗しました。")
            return
        print(f"バッファデータセット '{result_buffer_name}' が作成されました。")
        buffer_dataset = datasource.get_dataset(result_buffer_name)

        # 2. 作成したバッファで建物データをクリップ
        clip_param = ClipParameter()
        clip_param.set_is_exact_clip(True) # 精密クリップ

        result_clip_name = "Buildings_in_Buffer"
        print("クリップ分析を開始します...")
        is_success_clip = GeoAnalysis.clip(building_dataset, buffer_dataset, datasource, result_clip_name, clip_param)

        if is_success_clip:
            print(f"クリップされたデータセット '{result_clip_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(datasource.get_dataset(result_clip_name))
                map_obj.refresh()
        else:
            print("クリップ分析に失敗しました。")

    except Exception as e:
        print(f"エラーが発生しました: {e}")

if __name__ == '__main__':
    vector_data_processing_sample()

コメント

このブログの人気の投稿

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

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

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