csvファイルの中にすでに緯度、経度情報が含まれている場合にDBを作成する方法

2024年4月12日

以下の方法は、以下のようにGeometry型にしなければならないらしい → 可読性が悪くなるので、この方法は採用しないことにした。
OBJECTID,BLDG_ID,Posting,HH_id,centroid_geom,AnsFlag,Shape_Area
1,1,1,,"POINT(139.6193534 35.3662534)",,2994.84232
2,3,0,,"POINT(139.6247907 35.36777712)",,2311.216892
3,4,0,,"POINT(139.6238161 35.36573877)",,1814.524575
4,5,0,,"POINT(139.6243819 35.36882641)",,1669.266149

================================
以下のHH.csvというファイルがあったとします。
OBJECTID,BLDG_ID,Posting,HH_id,CENTROID_X,CENTROID_Y,AnsFlag,Shape_Area
1,1,1,,139.6193534,35.3662534,,2994.84232
2,3,0,,139.6247907,35.36777712,,2311.216892
3,4,0,,139.6238161,35.36573877,,1814.524575
4,5,0,,139.6243819,35.36882641,,1669.266149
5,7,1,13033,139.6213946,35.36896447,1,1377.877194CENTROID_X CENTROID_Yが、それぞれ経度と緯度の情報が入っています。 このcsvファイルを使って、作成手順を具体的に説明して下さい。
================================
以下は、PostgreSQLにCSVファイルをインポートし、PostGISを使用して緯度経度情報を含むデータを扱う手順です。
  1. PostGIS拡張機能の有効化: PostgreSQLでPostGIS拡張機能を有効化します。
    CREATE EXTENSION postgis;
  2. テーブルの作成: CSVファイルをインポートするためのテーブルを作成します。緯度経度情報を含むカラムには、地理空間データ型のポイント(Point)を使用します。
    CREATE TABLE HH (
    OBJECTID INTEGER,
    BLDG_ID INTEGER,
    Posting INTEGER,
    HH_id INTEGER,
    CENTROID_GEOM GEOMETRY(Point, 4326),
    AnsFlag INTEGER,
    Shape_Area NUMERIC
    );

    ここで、HHはテーブルの名前を指定します。CENTROID_GEOMカラムは、緯度経度情報を格納する地理空間データ型のカラムです。

  3. CSVファイルのインポート: COPYコマンドを使用して、CSVファイルを作成したテーブルに直接インポートします。
    COPY HH (OBJECTID, BLDG_ID, Posting, HH_id, CENTROID_X, CENTROID_Y, AnsFlag, Shape_Area)
    FROM 'HH.csv'
    DELIMITER ','
    CSV HEADER;

    ここで、path_to_your_csv_fileは、インポートするCSVファイルのパスを指定します。

  4. 緯度経度情報の更新: インポートしたテーブル内の緯度経度情報を使用して、地理空間データ型のカラムを更新します。
    UPDATE HH SET CENTROID_GEOM = ST_SetSRID(ST_MakePoint(CENTROID_X, CENTROID_Y), 4326);

これで、CSVファイル内の緯度経度情報を持つデータをPostgreSQLにインポートし、PostGISを使用して地理空間データとして扱う準備が整いました。QGISなどのGISソフトウェアを使用して、地理情報を可視化したり分析したりすることができます。

2024年4月12日2024,江端さんの技術メモ

Posted by ebata