【第5回】地図データは描いて編集!iDesktopXのオブジェクト操作基本ガイド

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

「5分で分かるSuperMap iDesktopX製品・機能紹介シリーズ」、第5回をお届けします。これまでの回でデータの管理やリアルタイムデータの扱い方を見てきましたが、今回はGISの最も基本的な作業の一つ、「作図」と「編集」に焦点を当てます。地図データはどのようにして作られ、修正されていくのか。iDesktopXの直感的なオブジェクト操作機能を使って、私たちの街、港区のデジタルツインを育てていきましょう!


【第5回】地図データは描いて編集!iDesktopXのオブジェクト操作基本ガイド


GISで扱う地図上の点、線、ポリゴンといった一つ一つの図形を「オブジェクト」と呼びます。新しい道路を地図に追加したり、土地の区画を修正したりといった作業は、すべてこのオブジェクトを操作することから始まります。iDesktopXは、誰でも簡単に、かつ正確にオブジェクト操作ができるよう、多彩なツールを備えています。

図5-1 GISソフトウェア上での精密な作図・編集作業のイメージ


1. 正確な作図の第一歩「スナップ設定」

正確なデータを作成するためには「スナップ」機能が欠かせません。これは、描画中にマウスカーソルが既存のオブジェクトの頂点や辺に磁石のように「吸い付く」機能です。これにより、道路と道路が正確に接続されたり、建物ポリゴン間に隙間や重なりがなくなったりします。

(1) スナップ設定の開始: 「オブジェクト操作」タブ -> 「地図編集」グループ -> 「スナップ設定」をクリックします。

(2) スナップタイプの選択: ダイアログボックスで、どの部分にスナップさせるかを選択します。

① 頂点スナップ: 線やポリゴンの頂点(ノード)にスナップします。

② 辺スナップ: 線やポリゴンの辺(セグメント)上にスナップします。

③ 交点スナップ: 複数の線が交差する点にスナップします。


2. オブジェクトの描画:港区に新しい施設を追加する

準備が整ったら、実際にオブジェクトを描いてみましょう。レイヤーを「編集可能」状態にして、「オブジェクト描画」グループのツールを使います。

(1) 点オブジェクトの描画:

「点」ツールを選択し、地図上の任意の位置でクリックするだけで、新しいコンビニやバス停などの点オブジェクトを簡単に追加できます。

(2) 線オブジェクトの描画:

「線」ツールには多彩なオプションがあります。

① 折れ線: 地図上を順にクリックしていくことで、芝公園内の新しい遊歩道のような折れ線を描画します。

② 曲線: ベジェ曲線ツールを使えば、滑らかな曲線を描くことができ、道路のカーブなどの表現に便利です。

③ 平行線: 道路のような平行な2本の線を一度に描画できる便利なツールです。

(3) ポリゴンオブジェクトの描画:

「面」ツールで、土地利用や行政界などのポリゴンオブジェクトを作成します。

① ポリゴン: 頂点を順にクリックしていき、最後にダブルクリックすると、汐留地区で建設中の新しいビルの敷地のようなポリゴンが完成します。

② 矩形・円: ツールを選択し、ドラッグするだけで簡単に矩形や円を描画できます。


3. オブジェクトの編集:既存のデータを修正する

既存のオブジェクトの形状を修正するためのツールも豊富に用意されています。

(1) ノード編集:

オブジェクトを選択して「ノード編集」モードに入ると、オブジェクトを構成するすべての頂点(ノード)が表示されます。このノードをドラッグして移動させたり、追加・削除したりすることで、オブジェクトの形状を自由に、かつ精密に修正できます。

(2) オブジェクト演算:

複数のオブジェクトを組み合わせて、新しいオブジェクトを作成する強力な機能です。

① 分割 (Split): 大きな公園のポリゴンを、新しく計画された道路のラインで2つに分割します。

② 結合 (Merge/Union): 隣接する2つの土地区画(ポリゴン)を、1つの大きな区画に統合します。

③ イレース (Erase): 広場のポリゴンから、新しく設置される地下鉄入口の形状をくり抜きます。

(3) 端点編集ツール:

主にラインオブジェクトの端点をきれいに整理するためのツールです。

① トリム (Trim): 交差点からはみ出してしまった道路線を、交差する線まで正確に切り詰めます。

② 延長 (Extend): 届いていない道路線を、接続したい別の道路線まで自動的に延長します。


4. さらに高度な編集機能

(1) テンプレート編集:

あらかじめ定義されたスタイルや属性情報を持つ「テンプレート」を使って、効率的にデータを作成する機能です。例えば、「国道」テンプレートを選んで線を描けば、自動的に国道のシンボルと「種別:国道」といった属性が適用され、入力の手間を省き、データの標準化も図れます。

(2) ラスタ・ベクタ変換(半自動トレース):

背景に表示した航空写真や古い地図(ラスタデータ)をなぞって、道路や建物の形状(ベクタデータ)を作成する作業を支援する機能です。画像上の線を自動的に追跡してくれるため、手作業でトレースするよりもはるかに高速かつ正確にデータを作成できます。


まとめ

今回は、iDesktopXのオブジェクト操作機能、つまり作図と編集の基本についてご紹介しました。正確なデータ作成を支援する「スナップ機能」から、多彩な描画ツール、そして強力な編集・演算ツールまで、iDesktopXがプロフェッショナルなデータ作成・編集作業をいかに効率化するか、その一端を感じていただけたかと思います。これらの機能を使いこなすことが、質の高いGISデータを構築する上での鍵となります。

次回は、**第6回「GISの真骨頂!多種多様なデータ処理機能」**です。データの形式を変換したり、座標系を合わせたり、複数のデータを組み合わせたりといった、GISならではのデータ加工・処理機能について詳しく見ていきます。お楽しみに!


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


iDesktopXのPython IDEを使って、港区の公園データセットに新しい公園(ポリゴンオブジェクト)を追加し、属性値を設定するサンプルコードです。

Python


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

from PySuperMap import *

def create_new_park_in_minato():
    """
    港区のデータセットに新しい公園のポリゴンオブジェクトを作成し、属性を追加するサンプル
    """
    try:
        # ワークスペースとデータソース、データセットを取得
        workspace = Workspace()
        datasource = workspace.get_datasource("Minato_Data") # 第3回のサンプルで作成したデータソース
        if datasource is None:
            print("データソース 'Minato_Data' が見つかりません。")
            return
           
        dataset = datasource.get_dataset("Parks") # 第3回のサンプルで作成したデータセット
        if dataset is None or dataset.get_type() != DatasetType.REGION:
            print("ポリゴンデータセット 'Parks' が見つかりません。")
            return

        # 1. 新しい公園のジオメトリ(ポリゴン)を作成
        # 芝公園付近の簡易的な四角形ポリゴン
        points = Point2Ds()
        points.add(Point2D(139.746, 35.657))
        points.add(Point2D(139.748, 35.657))
        points.add(Point2D(139.748, 35.655))
        points.add(Point2D(139.746, 35.655))
       
        polygon = GeoRegion()
        polygon.add_part(points)

        # 2. レコードセットを通じてデータセットにオブジェクトを追加
        recordset = dataset.get_recordset()
        if recordset is None: return
       
        # 新しいレコード(行)を追加し、ジオメトリを設定
        recordset.add_new(polygon)
       
        # 3. 追加したレコードの属性値を設定
        # "Park_Name" フィールドは第3回のサンプルで作成したと仮定
        recordset.set_value("Park_Name", "新規計画公園")
       
        # 変更を更新(コミット)
        recordset.update()
       
        print("新しい公園のポリゴンが作成され、属性が設定されました。")
       
        # 地図が開かれていればリフレッシュ
        map_view = workspace.get_active_map_view()
        if map_view is not None:
            map_view.get_map().refresh()

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

    finally:
        # リソースを解放
        if 'recordset' in locals() and recordset is not None:
            recordset.dispose()

if __name__ == '__main__':
    create_new_park_in_minato()

コメント

このブログの人気の投稿

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

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

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