空間データベース

 本教材は、「空間データベース」の実習用教材です。PostGISを用いた属性検索や空間検索の手法について解説しています。

 課題形式で使用する場合は、本教材を一読した後、課題ページへお進みください。GIS初学者は、本教材を進める前にGISの基本概念の教材を確認しておいてください。本教材を使用する際は、利用規約をご確認いただき、これらの条件に同意された場合にのみご利用下さい。

実習用データ

実習をはじめる前に、databaseをダウンロードしてください。

スライド教材

本教材は、スライド_空間データベースとしても、ご利用いただけます。


PostGISとは?

  • PostGISは、PostgreSQLというデータベース管理システムの拡張パックであり、 GISオブジェクを格納できる。
  • PostgreSQLとPostGISは、オープンソースであり、無料で利用できる。
  • ライセンスはGNU General Public License (GPL)。

PostGIS ProjectによるPostGIS 2.0.0マニュアル日本語訳を参考に作成

▲メニューへもどる

PostgreSQLのインストール

PostgreSQLのダウンロードページから、PostgreSQL Version11.2のインストーラを取得する。インストーラーに従い、PostgreSQLのインストールを行う。インストールが終了したら、スタックビルダが起動するため、ガイドに従って設定を進め、Spatial ExtensionsからPostGISをインストールする。 pgAdmin

空間データベースの作成

以下では、pgAdmin4を用いて、新規のデータベースを作成する手法について解説しています。

pgAdmin4の起動

pgAdmin4をエクスプローラーで検索し、起動する。 pgAdmin

実習用のデータベースを作成するため、1. Seversの>をクリックする。2. インストール時に設定したパスワードを入力し、OKをクリックする。 pgAdmin

以下に従って、新規のデータベース(ここではTokyoとした)の作成を行う。 pgAdmin

  1. Databasesの上にカーソルをあわせて右クリックし、Create > Databaseを選択する。
  2. Databeseをtokyo オーナーをpostgresとする。
  3. Definitionから、エンコードutf-8とする。
  4. SaveをクリックするとTokyoのデータベースが作成される

▲メニューへもどる

空間解析機能の追加

次のパートで空間データを読み込むため、pgAdmin4に空間データを扱うための拡張機能であるPostGISを追加する。以下のように、Extensionsの上にカーソルをあわせて右クリックし、Create > Extensionを選択する。ウィンドウが表示されたら、Nameをクリックし、postgisと入力し、Saveをクリックする。Extensionsにpostgisが追加されたことを確認する。 PostGISの追加

空間データのインポート

PostGISを用いてデータベースにシェープファイルを読み込む。PostGIS x.x Shapefile and DBF Loader Exporterをエクスプローラーから起動し、View connection detailsをクリックし、接続するデータベースの情報を図のように設定する。 shapeの追加

Username : postgres
Password : ● ● ● ●
Server Host : localhost  5432(※環境によって異なる)
Database : Tokyo

データベースへの接続が完了したら、以下のようにインポートするシェープファイルを設定する。 shapeの追加

  1. Add Fileから東京都の境界ポリゴンと駅のポイントを追加する(ファイルパス日本語を含まれるとエラーが生じる)。
  2. 世界測地系平面直角9系のSRIDを入力する。
  3. Importをクリックする。

以下のように、シェープファイルがTokyoデータベースに追加される。インポートしたファイルは、Schemas>public>tablesに追加される。テーブルを選択し、View Dataクリックすると属性情報が確認できる。 shapeの追加

Geometry Viewerのタブに切り替えると、地図が表示される(地理座標系であれば背景地図と重ねて表示ができる)。次のパートで、属性検索と空間検索を行うため、駅のデータの列名を確認しておく。列名は、BrowserウィンドウのTables>Columnsからも確認できる。 shapeの追加

よく使うSQL文

次のパートでは、SQLでデータベースの検索や空間分析を行います。下記は、よく使うSQL文についてまとめたものです。初学者は、次のパートを始める前に一読してください。

SELECT文・・・・・DBのテーブルからデータを検索し、取得する文
SLECT ・・・・・ 列名
FROM ・・・・・テーブル名
WHERE ・・・・条件の指定(表示するデータの選択)列=値など

列 = 値 ・・・  列が値と一致するものを抽出
列 >= 値 ・・・ 列が値(数値)より大きいものを抽出
列 <= 値 ・・・ 列が値(数値)より小さいものを抽出

※ 他に良く使うもの AND a=b and c>=d aがbと一致していてcがd(数値)以上のもの
    OR a=b and c>=d aがbと一致しているかcがd(数値)以上のもの
    LIKE a= LIKE '新%' a列に含まれる新○○を抽出する あいまい検索
    ( チェック   GROUP BY ・・・・ グループ化する集約関数)

▲メニューへもどる

属性検索

以下では、属性検索の手法について解説しています。以下のように、Tool > Query toolを開き、SQLの入力ウィンドウを表示してください。入力したSQL文を実行する際は、緑枠の実行ボタンをクリックします。 属性検索

属性情報の表示

まず、東京23区の行政区域の情報を表示する。SELECT name FROM tokyo;を実行し、tokyoテーブルのname列を表示する。ここで、SELECT name,male FROM tokyo;のようにすると複数の属性情報が表示できる。 属性検索

属性情報の計算

属性情報には、区ごとの人口数が入力されているため、その合計を求める。SELECT sum(population) FROM tokyo;を実行すると、23区内の人口が計算できる。 属性検索

Sum()・・・合計を計算する関数

属性値に基づく抽出

ここでは、属性値に基づく抽出として東日本旅客鉄道に所属する駅名を抽出する。SELECT name FROM station WHERE operator ‘東日本旅客鉄道’;とし、実行する。 属性検索

name・・・stationテーブルの駅名が含まれる列名 operator・・・stationテーブルの鉄道会社名が含まれる列名

属性情報に基づく集計

鉄道会社ごとに駅の数を計算する。SELECT operator,count(name) FROM station GROUP BY operator;を実行する。 属性検索

count() データを数える関数

SELECT operator,count(name) AS “n” FROM station GROUP BY operator;を実行すると、鉄道会社ごとのデータをテーブルnとして表示できる。 属性検索

AS 別の列名として表示する

空間検索

以下では、ジオメトリーの情報を用いて、指定した領域や、複数の複数の空間データと重なる情報を検索する手法について解説します。

勝どき駅のジオメトリを表示する

SELECT name,geom FROM station WHERE name = ‘勝どき’; 勝どき駅のジオメトリを検索する。 ジオメトリの上でCntr+Cでジオメトリをコピーする。

空間検索

指定した領域に基づく検索

以下のように、勝どき駅から半径1000m以内の駅を表示する。 空間検索

SELECT name,geom
FROM station
WHERE ST_DWithin(station.geom,    '010100002093090000ECBC762D13DAB3C011138E4EA079E2C0',1000);

ST_DWithin(geometry.列名,値 ,○○m) ジオメトリと範囲を指定して、それに該当するレコードを抽出する関数

データの領域による検索

以下のようにすると、tokyoテーブルのgeom(ジオメトリー)に含まれる勝どき駅を抽出できる。 空間検索

SELECT
  station.name,tokyo.name
FROM tokyo
JOIN station
ON ST_Contains (tokyo.geom, station.geom)
WHERE station.name = '勝どき';

JOIN テーブル名 ON 条件式 テーブルを結合する式 ST_Contains(a,b) a(ジオメトリー)に含まれるb(ジオメトリーを)抽出する関数

▲メニューへもどる

空間結合

以下では、空間結合として、東京23区のテーブルに新規に区ごとの駅数を計算したテーブルを作成する手法について解説しています。

CREATE INDEX new_geom ON station USING GiST(new_geom);を実行し、空間インデックスを作成する。 空間結合

CREATE INDEX ・・・インデックスを作成する USING GiST・・・インデックスを空間インデックスとする

UPDATE station SET new_geom = ST_Centroid(geom);を実行し、列に駅のジオメトリーを追加する。 空間結合

以下のように、23区ごとに駅数を計算する。 空間結合

SELECT tokyo.name, count(*) AS count
FROM station LEFT JOIN tokyo
ON ST_WithIn(station.new_geom, tokyo.geom)
GROUP BY tokyo.name;

a LEFT JOIN b aが結合条件に一致しなくてもレコードを表示する。

QGISでのデータベース接続

以下では、上記で作成したデータベースに、QGISで接続し、データを表示する手法について解説します。

QGISを起動し、データソースマネージャ>PostgreSQL>新規を選択する。 qdb

以下のように、名称を23ku、ホストをlocalhost、ポートを5432(※環境によって異なる)とし、接続テストをクリックする。ユーザー名 postgres、パスワード ● ● ● ●を入力しOKをクリックする。接続が完了できたら、「新しいPostGIS接続を作成する」のウィンドウのOKをクリックする。 qdb

新規をクリックし、tokyoのデータを選択して、追加をクリックすると地図が表示される。 qdb

参考サイト

▲メニューへもどる

この教材の課題ページ_空間データベースへ進む

ライセンスに関する注意事項

本教材で利用しているキャプチャ画像の出典やクレジットについては、その他のライセンスについてよりご確認ください。

教材の利用に関するアンケート

 本プロジェクトでは、教材の改良を目的とした任意アンケートを実施しています。ご協力いただける方は、アンケートにお進みください。ご協力のほどよろしくお願いいたします。

※ 本アンケートの成果は、教材の改良のほか、学会での発表等の研究目的でも利用します。また、本アンケートでは、個人が特定できるような質問は設けておりません。

results matching ""

    No results matching ""