LoginSignup
6
11

More than 5 years have passed since last update.

PostGISを使ってSQLだけで面積按分:準備編(QGISを使ってCSVデータとShapeデータ結合してPostgreSQLに投入)

Posted at

はじめに

この記事は、FOSS4G 2015年アドベントカレンダーの前準備用の記事です。
面積按分をするために、e-Statから3次メッシュの人口統計情報をダウンロードし、PostgreSQLにデータを登録するまでの手順について説明します。

必要なソフトウェア

今回用いるソフトは以下の2つです。

  • QGIS:最新版はこちらからダウンロードできます。
  • PostgreSQL:PostGISがSQL1文で導入できる比較的新しいバージョン9.1以上がおすすめです。ダウンロードはこちら

WindowsOSなら、どちらのソフトもGUIのインストーラーがあるので導入はそれほど難しくないと思います。また、PostGISはPostgreSQLのインストール後に別途インストール作業が必要です。こちらで手順をご確認下さい。

データの入手

e-StatのWebサイトから「統計情報」を「メッシュ形状」をダウンロードします。

ダウンロード

  • ダウンロードサイト「e-Stat 政府統計の総合窓口」 e-Stat地図で見る統計(統計GIS)データダウンロード
  • Step1: 統計調査(集計)を選択データ
    • 調査名:国勢調査
    • データ:平成22年国勢調査(国勢調査ー世界測地系1kmメッシュ)
  • Step2:統計表を選択(複数選択可能)
    • 「 男女別人口総数及び世帯総数」を選択
    • 「統計表各種データダウンロードへ」ボタンをクリック
  • Step3:地域選択
    • 市区町村:「097:M5339」 たくさんのメッシュがありますが、都心の5339を選択します。
    • 「検索」ボタンを押下
  • Step4:データダウンロード
    • 統計データのダウンロード (「M5339」と書かれたリンクをクリックします)
    • 境界データのダウンロード(しばらくすると境界データのリストが表示されます。「世界測地系緯度経度・Shape形式をダウンロード」)

QGISで読込

ダウンロードしたデータをQGISで読み込みます。
データは統計データと境界データの2つに分かれているので、QGISで1つに結合し、結合したデータをPostgreSQLに投入します。

ファイルの集類 ファイル名称
統計データ tblT000608S53390.zip
境界データ S002005112009DDSWS05339.zip

データの加工

統計データはtblT000608S53390.zipを解凍するとテキストファイルが1つ得られます。
先頭行に英語の列名がが、2行目に日本語のが入っています。

QGISのCSVデータの読込機能では、複数行のカラム名に対応していないので、1行目のKEY_CODE以降を削除して上書き保存します。

境界データで読込

  • 境界データを解凍して、shapeデータ「MESH05339.shp」をダブルクリックします。
    スクリーンショット 2015-12-06 18.58.34.png

  • QGISで表示されます
    スクリーンショット 2015-12-06 18.56.44.png

統計データの読込

  • デリミテッドテキストレイヤの読込
    QGISでレイヤ → レイヤの追加 → デリミテッドテキストレイヤの追加 を選択します。
    スクリーンショット 2015-12-06 19.14.21.png

  • 加工済みの統計データの選択
    先頭行を編集したtblT000608S53390.txtを読み込みます。
    スクリーンショット 2015-12-06 19.22.32.png

    • ファイル形式:CSV(コマンドで区切られた値)
    • レコードオプション:最初のレコードはフィールド名を保持している[チェック]
    • ジオメトリ定義:ジオメトリなし(属性のみのテーブル)[チェック] 上手く行くと、QGISに属性のみのテーブルが読み込まれます スクリーンショット 2015-12-06 19.30.16.png

境界データと統計データの結合

  • 境界データのプロバティを表示
    レイヤウインドウの境界データ「MESH05339」をダブルクリックして、プロバティを表示
    スクリーンショット 2015-12-06 18.48.46.png

  • データの結合

    • 結合タブをクリック → 右下の「+」ボタンをクリック
    • 統計データと境界データの2つのデータを結合する列名を指定 スクリーンショット 2015-12-06 18.49.15.png
    • 結合するレイヤ:統計データの名称
    • 結合フィールド:KEY_CODE
    • ターゲットフィールド:KEY_CODE 上記の設定で、統計情報のメッシュコードと境界データのメッシュコードが同一の行が結合し、1つのテーブルのように扱えます

shape形式で保存

  • レイヤを名前をつけて保存
    レイヤウインドウの境界データ「MESH05339」を右クリックして、「名前をつけて保存」を選択します。
    名称は特に拘る必要はありませんが、今回は「mesh5339.shp」という名称にしました。
    スクリーンショット 2015-12-06 19.44.49.png

  • 形式を指定する
    ファイルの形式を「ESRI Shapefile」と指定して下さい。
    スクリーンショット 2015-12-06 19.46.25.png

  • ファイル名を指定
    「ブラウズ」ボタンをクリックし、ファイルの保存場所とファイル名を指定して下さい。

  • 保存
    「OK」ボタンをクリックして保存します。

データベースへ投入

QGISの拡張機能である「SPIT」を使って、shapeデータをPostGISに投入します。
SPITがインストールされていれば、象さんのアイコンが表示されています。
スクリーンショット 2015-12-06 20.52.46.png

  • SPITの起動 象のアイコン沢山有るかもしれませんが、SPITのアイコンを探しだしてクリック
  • データベースの接続の選択または新規作成 PostgreSQLに接続する為の設定が必要になります。 予め、PostgreSQLにPostGISを導入済みのデータベースを作成する必要があります。 スクリーンショット 2015-12-06 20.56.54.png
    • 名称:任意の名称を付けて下さい
    • ホスト:データベースの接続先です。同じPCでしたら「localhost」
    • データベース:PostGISが導入されているデータベースの名称を指定して下さい
  • インポートオプション スクリーンショット 2015-12-06 20.57.16.png 設定のポイント
    • SRID:「デフォルトのSRIDを使う」のチェックボックスを外し、作成したshapeデータのSRIDを入力します。(4612)
  • データの追加

    • 「追加」ボタンをクリックしてshapeファイルを選択します DBリレーション名:作成されるテーブルの名称です。
    • 「OK」をクリックして入力データのPostgreSQLに読込 エラーメッセージが出なければ、データベースへの登録は完了です。
  • 作成されたテーブル
    SPITが自動的に作成したテーブルを観察してみます。

    • テーブル構造
CREATETABLE
CREATE TABLE mesh5339
(
  gid serial NOT NULL, --ID
  "MESH1_ID" character varying(4), --1次メッシュコード
  "MESH2_ID" character varying(2), --2次メッシュコード
  "MESH3_ID" character varying(2), --3次メッシュコード
  "OBJ_ID" integer, --メッシュ形状のID
  "KEY_CODE" character varying(8), --メッシュコード
  "tblT000608" integer, --人口
  "tblT0006_1" integer, --男性人口
  "tblT0006_2" integer, --女性人口
  "tblT0006_3" character varying(254), --世帯数
  the_geom geometry(Polygon,4612),--メッシュ形状:測地系(新日本測地系)
  CONSTRAINT mesh5339_pkey PRIMARY KEY (gid)
)
WITH (
  OIDS=FALSE
);
  • データ例 スクリーンショット 2015-12-07 0.43.57.png

お疲れ様でした。ここまで来れば準備OKです!

6
11
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
6
11