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

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

　※ ポイント(点)の表示は[【QGISでPostGISのジオメトリデータを表示する】](https://qiita.com/smiler5617/items/220050cb06ae9a71c0ed)の記事を参考に。

## 実行環境
【PC環境-OS】
　　・Windows 10 Pro　

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

## 今回やる事

１．今回のサンプルデータの中身確認
２．ラインやポリゴンのデータ作成
３．QGISでの表示確認


### １．今回のサンプルデータの中身確認

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

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

以下のデータをサンプルとして用意。
　※次の手順でインポートとして使うcsvファイルは [**こちら**](https://github.com/Smiler5617/for_qiita/blob/master/sample_line_polygon.csv)
![Qiita-no009_img01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654767/7701f96c-9bed-b0cf-fe6e-ba0e14d1e0ab.jpeg)




### ２．ラインやポリゴンのデータ作成

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

```SQL:
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のインポートの操作方法に迷ったらは[こちら](https://qiita.com/smiler5617/items/220050cb06ae9a71c0ed)を参考に）

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

```SQL:
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**

```SQL:
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
```

### ３．QGISでの表示確認

QGISでデータを開こうとすると以下の様に、複数のジオメトリデータが選択できる様になっているはず。
![Qiita-no009_img02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654767/b63b4342-f85d-7e81-b5b0-81dafdfbdb47.jpeg)


**２点によるラインデータ**
![Qiita-no009_img03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654767/0735a2cc-ea78-285f-2456-5716a1a4bfee.jpeg)


**３点によるラインデータ**
![Qiita-no009_img04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654767/8df362ad-61b2-a94a-88e1-27d9ef14ffc1.jpeg)


**３点によるポリゴンデータ**
![Qiita-no009_img05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654767/e17a9288-6cf7-958e-61c9-da7b400d3eb6.jpeg)


**４点によるポリゴンデータ**
![Qiita-no009_img06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654767/3f33cbc7-f911-7b4c-e7ea-3ba4dc92d88e.jpeg)
※４点目がないデータの場合、エラーになるのではなく勝手に３点として閉じたポリゴンを作成してくれている。


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