【第8回】データで語る!iDesktopX主題図作成マスターガイド

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

「5分で分かるSuperMap iDesktopX製品・機能紹介シリーズ」、第8回となりました。前回は地図のシンボル設定やスワイプ機能など、多彩な可視化テクニックをご紹介しました。今回は、その中でも特に重要で、GISの可気化表現の中核をなす「主題図」について深掘りしていきます。データが持つメッセージを、最も効果的に伝えるための表現手法をマスターしましょう!


【第8回】データで語る!iDesktopX主題図作成マスターガイド


1. 主題図とは?

主題図とは、特定のテーマ(主題)に沿って、地理的な分布やパターン、傾向などを分かりやすく表現した地図のことです。例えば、「港区の町丁目別人口密度」や「土地利用の種類」、「各駅の乗降客数」などを地図上で表現したものが主題図にあたります。iDesktopXを使えば、様々な種類の主題図を簡単な操作で作成でき、データに秘められたストーリーを雄弁に語らせることができます。



2. 【質的データ向け】個別値主題図

土地利用データのように、質的な違い(カテゴリの違い)を表現するのに最も適した主題図です。「商業地」「住宅地」「工業地」「公園」といったカテゴリごとに、異なる色や模様を割り当てて塗り分けます。

(1) 利用シーン: 土地利用図、地質図、植生分布図など、分類によって分けられるデータを表現する場合。

(2) 作成のポイント: レイヤーのプロパティから「主題図の作成」を選び、「個別値主題図」を選択。分類の基準となる属性フィールド(例:土地利用種別)を指定するだけで、自動的に各カテゴリがリストアップされ、凡例と地図が作成されます。


3. 【量的データ向け】段階区分主題図

人口や売上高といった量的なデータを、いくつかの階級(ランク)に分けて色の濃淡やグラデーションで表現する主題図です。いわゆる「コロプレスマップ」がこれにあたります。

(1) 利用シーン: 港区の町丁目別の人口密度、公示地価、高齢化率など、数値の大小関係を比較する場合。

(2) 作成のポイント: 「段階区分主題図」を選択し、基準となる数値フィールドを指定します。階級の数や、階級分けの方法(等間隔、等量など)を柔軟に設定できます。色のグラデーションも自由に選べるため、「人口密度が高いエリアほど濃い赤色で表示する」といった表現が簡単に行えます。


4. 【複数項目を同時に】統計グラフ主題図

各地域に対して、複数の統計項目を棒グラフや円グラフで表現する主題図です。これにより、1枚の地図でより多くの情報を比較・検討できます。

(1) 利用シーン: 新橋、品川、六本木など港区の主要駅エリアごとに、飲食、小売、サービス業の店舗数を棒グラフで比較する。

(2) 作成のポイント: 「統計グラフ主題図」を選択し、グラフで表現したい複数の数値フィールドを指定します。グラフの種類(棒、円、積み上げ棒など)や、3D表示の有無も選択可能です。


5. 【量の大きさを形で】連続比例記号主題図

数値の大きさを、シンボルのサイズ(面積や体積)で表現する主題図です。円や四角形の大きさを変えることで、量の違いを直感的に示すことができます。

(1) 利用シーン: 港区内の各駅の乗降客数を円の大きさで表現する、各地区の事業所数を四角形の大きさで示すなど。

(2) 作成のポイント: 「連続比例記号主題図」を選択し、基準となる数値フィールドと、最小・最大値に対応するシンボルサイズを設定します。


6. 【分布の密度を表現】点密度図と集計図

点の集まり具合から、現象の密度や分布パターンを可視化する手法です。

(1) 点密度図:

統計値(例:人口100人)を1つの点に対応させ、ポリゴン内にランダムに点を配置することで、分布の密度を表現します。人口がどこに集中しているかを視覚的に把握するのに役立ちます。

(2) 集計図(ヒートマップ):

点が密集している場所ほど「熱く」(暖色に)なるように、密度の高いエリアを色の濃淡で表現します。港区内のどこにカフェが集中しているか、あるいはどこで交通事故が多発しているか、といった「ホットスポット」を可視化するのに非常に効果的です。


まとめ

今回は、GISの華である「主題図」について、その種類と作成のポイントをご紹介しました。iDesktopXには、ここで紹介した以外にも、テキスト情報を豊かに表現する「ラベル主題図」や、ラスタデータ専用の主題図など、さらに多くの機能が備わっています。どの主題図を選択するかによって、データの見え方、伝わり方が大きく変わります。ぜひ色々な主題図を作成して、データに隠されたストーリーを解き明かしてみてください。

次回は、**第9回「欲しいデータを瞬時に抽出!SQLクエリと空間クエリ」**です。膨大なデータの中から、必要な情報だけを効率的に探し出すための「クエリ(問い合わせ)」機能について解説します。お楽しみに!


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


iDesktopXのPython IDEを使って、港区の人口データレイヤーに段階区分主題図をプログラムで作成するサンプルコードです。

Python


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

from PySuperMap import *

def create_choropleth_map_of_minato():
    """
    プログラムで港区の人口密度に関する段階区分主題図を作成するサンプル
    """
    try:
        # ワークスペースとアクティブなマップを取得
        workspace = Workspace()
        map_view = workspace.get_active_map_view()
        if map_view is None:
            print("アクティブな地図が開かれていません。")
            return
        map_obj = map_view.get_map()

        # 主題図を作成するレイヤーを取得 (ここでは "Minato_Chome" ポリゴンレイヤーを想定)
        layer_name = "Minato_Chome"
        layer = map_obj.get_layers().get_item(layer_name)
        if layer is None:
            print(f"レイヤー '{layer_name}' が見つかりません。")
            return

        # 1. 段階区分主題図オブジェクトを作成
        thematic_map = ThematicMap.create_range_map(layer.get_dataset())
       
        # 2. 表現式(色分けの基準となるフィールド)を設定
        # ここでは "POP_DENSITY" (人口密度) フィールドを想定
        thematic_map.set_expression("POP_DENSITY")
       
        # 3. 段階区分の方法と数を設定
        thematic_map.set_range_mode(RangeMode.QUANTILE) # 等量分割
        thematic_map.set_range_count(5) # 5段階に分割
       
        # 4. スタイル設定
        # デフォルトのカラースキームを生成して適用
        start_color = Color(225, 245, 254) # 明るい青
        end_color = Color(2, 56, 88)     # 暗い青
        color_gradient = ColorGradient(start_color, end_color)
       
        # 各段階のスタイルをループで設定
        for i in range(thematic_map.get_count()):
            item = thematic_map.get_item(i)
            # 段階に応じて色をグラデーションから取得
            current_color = color_gradient.get_color(i / (thematic_map.get_count() - 1))
           
            item_style = GeoStyle()
            item_style.set_fill_fore_color(current_color)
            item_style.set_line_color(Color(255, 255, 255)) # 境界線の色を白に
            item_style.set_line_width(0.1)
           
            item.set_style(item_style)
       
        # 5. 作成した主題図をレイヤーとして地図に追加
        thematic_layer = map_obj.get_layers().add_thematic_map(thematic_map)
        if thematic_layer is not None:
            print("段階区分主題図が作成されました。")
       
        # 地図をリフレッシュ
        map_obj.refresh()

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

if __name__ == '__main__':
    create_choropleth_map_of_minato()

コメント

このブログの人気の投稿

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

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

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