LoginSignup
5
2

More than 3 years have passed since last update.

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

Posted at

はじめに

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ファイルは こちら
Qiita-no009_img01.jpg

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でデータを開こうとすると以下の様に、複数のジオメトリデータが選択できる様になっているはず。
Qiita-no009_img02.jpg

2点によるラインデータ
Qiita-no009_img03.jpg

3点によるラインデータ
Qiita-no009_img04.jpg

3点によるポリゴンデータ
Qiita-no009_img05.jpg

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

まとめ

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

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2