ラインやポリゴンデータの作成&表示 PostGIS-QGIS


はじめに

QGISで点の位置情報を表現するまでの手順は以前まとめていたが、ポリゴン(面)やラインについての可視化はあまり経験がなかったため、やり方などが整理できていなかった。
今回はまず、簡単なデータを使ってライン(線)やポリゴン(面)の表示を試してみる。

 ※ ポイント(点)の表示は【QGISでPostGISのジオメトリデータを表示する】の記事を参考に。

実行環境

【PC環境-OS】
  ・Windows 10 Pro 

【ソフトウェア-バージョン】
  ・PostgresSQL 10.13
  ・PostGIS 2.5
  ・QGIS 3.10.6

今回やる事

1.今回のサンプルデータの中身確認
2.ラインやポリゴンのデータ作成
3.QGISでの表示確認

1.今回のサンプルデータの中身確認

今回はラインやポリゴンを表示するため、以下のデータを用意した。
1つの点に対して緯度・経度情報は1つとなるが、ラインやポリゴンの場合には点と点を結んで画像を生成するため、複数点の情報が必要となる。

ライン:2点以上
ポリゴン:3点以上

以下のデータをサンプルとして用意。
 ※次の手順でインポートとして使うcsvファイルは こちら

2.ラインやポリゴンのデータ作成

元の緯度経度情報を持ったテーブル作成(csvファイルインポート先)

CREATE TABLE qgis_test.sample_tb1(
    pref varchar(20) not null
    ,city varchar(20) not null
    ,area varchar(20) not null
    ,point1_lat varchar(100)
    ,point1_lon varchar(100)
    ,point2_lat varchar(100)
    ,point2_lon varchar(100)
    ,point3_lat varchar(100)
    ,point3_lon varchar(100)
    ,point4_lat varchar(100)
    ,point4_lon varchar(100)
    ,primary key(pref, city, area)
)
;

上記のテーブルにcsvファイルをインポート(pgAdminより実行)
(pdAdminのインポートの操作方法に迷ったらはこちらを参考に)

ジオメトリ情報を持ったテーブル作成

CREATE TABLE qgis_test.sample_tb2(
    pref varchar(20) not null
    ,city varchar(20) not null
    ,area varchar(20) not null

    -- 2つの点から作るライン
    ,geom_line2 Geometry(LINESTRING, 4326) not null
    -- 3つの点から作るライン
    ,geom_line3 Geometry(LINESTRING, 4326) not null

    -- 3つの点から作る面(ポリゴン)
    ,geom_polygon3 Geometry(Polygon, 4326) not null
    -- 4つの点から作る面(ポリゴン)
    ,geom_polygon4 Geometry(Polygon, 4326) not null

    ,primary key(pref, city, area)
)
;

緯度経度よりジオメトリデータを算出しながらInsert

INSERT INTO qgis_test.sample_tb2

SELECT
    pref
    ,city
    ,area

    -- 2つの点から作るライン
    ,ST_SetSRID(
        ST_MakeLine(
            ST_MakePoint(cast(point1_lon as numeric), cast(point1_lat as numeric))
            , ST_MakePoint(cast(point2_lon as numeric), cast(point2_lat as numeric))
        )
        , 4326
    ) AS geom_line3

    -- 3つの点から作るライン
    ,ST_SetSRID(
        ST_MakeLine(ARRAY[
            ST_MakePoint(cast(point1_lon as numeric), cast(point1_lat as numeric))
            , ST_MakePoint(cast(point2_lon as numeric), cast(point2_lat as numeric))
             , ST_MakePoint(cast(point3_lon as numeric), cast(point3_lat as numeric))
        ])
        , 4326
    ) AS geom_line3


    -- 3つの点から作るポリゴン
    ,ST_SetSRID(
        ST_MakePolygon(
            ST_MakeLine(ARRAY[
                ST_MakePoint(cast(point1_lon as numeric), cast(point1_lat as numeric))
                , ST_MakePoint(cast(point2_lon as numeric), cast(point2_lat as numeric))
                , ST_MakePoint(cast(point3_lon as numeric), cast(point3_lat as numeric))
                ,ST_MakePoint(cast(point1_lon as numeric), cast(point1_lat as numeric))
            ])
        )
        , 4326
    )as geom_polygon3

    -- 4つの点から作るポリゴン
    ,ST_SetSRID(
        ST_MakePolygon(
            ST_MakeLine(ARRAY[
                ST_MakePoint(cast(point1_lon as numeric), cast(point1_lat as numeric))
                , ST_MakePoint(cast(point2_lon as numeric), cast(point2_lat as numeric))
                , ST_MakePoint(cast(point3_lon as numeric), cast(point3_lat as numeric))
                , ST_MakePoint(cast(point4_lon as numeric), cast(point4_lat as numeric))
                ,ST_MakePoint(cast(point1_lon as numeric), cast(point1_lat as numeric))
            ])
        )
        , 4326
    )as geom_polygon3

FROM
    qgis_test.sample_tb1

3.QGISでの表示確認

QGISでデータを開こうとすると以下の様に、複数のジオメトリデータが選択できる様になっているはず。

2点によるラインデータ

3点によるラインデータ

3点によるポリゴンデータ

4点によるポリゴンデータ

※4点目がないデータの場合、エラーになるのではなく勝手に3点として閉じたポリゴンを作成してくれている。

まとめ

今回は複数の点情報(緯度・経度情報)からラインやポリゴンのデータを作成して、QGIS上でどの様に表示されるのかを試してみた。また余裕がある時に、標準地域メッシュについてまとめてみようと思う。