PostgreSQLとPostGIS
この章では、WondowsでのPostgreSQLセットアップ方法、およびデータベースを作成し、そこへ地理データを格納する方法を紹介します。このガイドでは、オープンソースのGISソフトウェアであるQGISの操作方法についても取り扱います。すでに操作に親しんでいれば、たいへん役に立つことでしょう。
それでは、PostgreSQLデータベースへOpenStreetMapデータをインポートする方法を見てみましょう。
PostgreSQLとPostGISのインストール
この項目では、PostgreSQLをインストールし、そこへPostGIS地理空間拡張を追加します。ワンクリックインストーラがありますので、セットアップ自体はとても簡単です。
- PostgreSQLウェブサイトから、ダウンロードページを表示します: http://www.postgresql.org/download/
- 利用しているOSごとに異なるインストール方法が表示されます。"Windows"のリンクをクリックしてください。
- このページでは、ワンクリックインストーラが実行する動作が説明されています。この作業により、3つのコンポーネントがインストールされます:
- PostgreSQLサーバ: データベースソフトウェア、中心となるコンポーネント
- pgAdmin III: データベース操作を行うためのグラフィカルインターフェース
- StackBuilder: 追加アプリケーションを取り扱うためのツール; PostGIS拡張を追加するために利用します
- ダウンロードをクリックしてください。
- PostgreSQLのどのバージョンをインストールするか、オプションがいくつか表示されます。 最新のバージョンをダウンロードしてください。この記事を執筆している段階では、9.3.1が最新です。Win x86-32の項目をクリックします。これは、Windows 32ビット版で利用可能なインストーラとなります。
- ダウンロードが完了したら、ワンクリックインストーラを起動します。
- インストールウィザードが表示されますので、"Next"を押してください。オプションはすべてデフォルトでかまいません。 最初のデータベースユーザ(postgresユーザ)に対して、パスワードを設定してください。このユーザはスーパーユーザ、つまりどんな操作でも実行可能な権限を持っています。設定したパスワードを忘れないようにしてください!
PostgreSQLでは、いくつでもデータベースを作成することができます。あるデータベースを地理情報用にして、別のデータベースを通常のデータベースの用途で使用することもできます。 また、複数の人間に対して、それぞれ異なるタイプのアクセス権限を付与する必要があるかもしれません。そのためには、それぞれのデータベースに対して ユーザ と ロール を設定しなくてはいけません。データベースは特定のユーザによって所有される必要があり、通常、データベースに対して変更を行うためにはパスワードが要求されます。 データベースに対するアクセス権限をもったユーザを追加することもでき、その場合はそのユーザに対して特定のロールが割り当てられます。例えば、データベースの読み取りだけが可能で、データの変更が許可されていないユーザを設定したいとします。ユーザとロールを使うことで、この設定が可能となります。 今回は、権限設定について細かく考えなくても大丈夫です。ただ、データベースが ユーザ によって所有され、データベースにアクセスするにはユーザの名称とパスワードが必要であることは忘れないでください。最初に作成したユーザ(postgres)は スーパーユーザ であり、データベースに対してすべての操作が可能なユーザです。
- ウィザード上でクリックを行い、デフォルトの設定オプションを許可するとインストール作業が開始されます。作業は数分で終わります。
- インストールが完了すると、StackBuilderを起動するかどうかのウィザードが表示されます。PostGISのインストールはStackBuilderを使って行います。ボックスへ忘れずにチェックを入れて、"Finish"をクリックしてください。
- PostgreSQLのインストールが成功したら、次はPostGIS拡張を追加する必要があります。StackBuilderウィザードが開いている場合、ドロップダウンメニューからインストールしたPotgreSQLを選び、Nextを押します。以下の画面を参考にしてください:
- “Spatial Extensions"タブを開き、PostGISの隣のボックスにチェックを入れます。現時点で最新のPostGISはバージョン 2.1です。
- Nextを押すと、拡張ファイルのダウンロードとインストールがはじまります。利用条項の確認が表示されますので、一読の上 “I Agree"を押してください。
- PostGISインストーラはいくつかの確認項目を表示させます。ほとんどの場合、デフォルトの内容で問題ありません。最初のデータベースを自動で作成するかどうか、という質問が表示されますが、次の手順ではデータベースを自作する方法を紹介します。
- PostGISのインストールを行うにあたって、PostgreSQLのインストールを行った際に設定したpostgresユーザのパスワードを入力する必要があります。
- GDAL_DATA環境変数を登録するか、という質問には “Yes"を選択します。
- インストールが完了したら、"Close"と"Finish"をクリックしてください。
データベースの作成
作業に必要なソフトウェアのインストールがすべて完了したので、ここからは実際にデータベースを作ってみましょう。データベースの操作やクエリの発行に便利なデータベースクライアント、pgAdmin IIIを使います。
- pgAdmin IIIはPostgreSQLの公式クライアントで、SQL言語を使ってデータベースのテーブル操作を行うことが可能です。データベースの作成や操作はコマンドラインから行うこともできますが、今回は簡単さを重視し、pgAdmin IIIを使います。
- pgAdmin IIIを起動します。スタートメニューから “全てのプログラム” -> “PostgreSQL 9.3” -> pgAdmin IIIを選択してください。
- 画面左側のサーバ一覧部分で右クリックし、PostgreSQLの場所を入力して"Connect"を選択します。
- インストール時に設定した postgres ユーザのパスワードを入力してください。データベースを作成したりアクセスしたりするにはユーザ名とパスワードが必要となります。
- データベースを右クリックし、New Database、を選択します。
- データベースを作成するために、データベースの名前と所有者など、いくつかの情報を決める必要があります。プロパティタブから新しいデータベースに名前をつけてください。この例では、データベースに gisdb という名前をつけています。また、データベースには所有者を指定する必要があります。現在作成済みのユーザは postgres ユーザだけなので、このユーザをデータベースの所有者として設定します。(注: セキュリティの観点から、本来はスーパーユーザ以外にユーザを作成するのがお勧めです。今回はあまり気にしなくてかまいません)
- OKをクリックするとデータベースが作成されます。作成したデータベースは、"データベース"の下に表示されます。
- データベースに対して、PostGIS拡張を適用するコマンドを実行しましょう。pgAdmin IIIの上部から、SQLボタンをクリックしてください。
クエリウィンドウに以下を入力します:
CREATE EXTENSION postgis;
“Execute query"ボタンをクリックします。
サンプルデータの読み込み (オプション)
ここまでの作業に問題がなく、さらにQGISを操作したことがある場合は、以下の手順を実行し、新しいデータベースへデータを読み込ませてみましょう。具体的には、Shapefileを変換してデータベースへ読み込むユーティリティを利用します。
- 左側のパネルで新しいデータベースが選択されていることを確認し、 Plugins -> PostGIS Shapefile and DBF loader 2.1 へ進みます。
- “Add File"を選択し、ファイルシステムからshapefileを選んでください。
- 手持ちのshapefileが無い場合、こちら からサンプルがダウンロードできます。
- ファイルをクリックしたら、"Import"をクリックします。処理に問題がなければ、"Shapefile import completed"と表示されます。
- データをインポートしたデータベースからQGISへデータを読み込ませてみましょう。QGISをインストールしていない場合、QGISウェブサイトからソフトウェアをダウンロードしてください。
- QGISを起動し、"Add PostGIS Layer" ボタンをクリックします。
- 上部に表示されている “Connections"から、 "New"をクリックします。
- この接続に対して名前をつけてください。データベースの下には gisdb (あるいはその他、データベースに付与した名前)を入力します。 ユーザ名には postgres と入力し、パスワードを入力します。
- OKをクリックすると、接続設定が保存されます。 “Connect"をクリックして、PostgreSQLサーバへ接続してみましょう。データベースのユーザ名とパスワードをもう一度入力する必要があるかもしれません。
- 接続に成功すると、データベースに読み込ませたデータが読み込まれ、shapefileレイヤ (あるいは地物タイプごとに分割された複数のレイヤ) が表示されます。レイヤを選択し、"Add"を選択すると、そのデータを地図表示画面へ追加することができます。
- レイヤを追加する際には、表示するデータの座標系を選択する必要があります。ほとんどの場合、OpenStreetMapが使用している座標系である WGS 84 を選択すれば問題ありません。
- こうして読み込んだレイヤは、shapefileを直接QGISで読み込んだ時とほとんど同じ動作となります。唯一違う点は、データに対して何か変更を行った場合、その変更がデータベースに対して保存される、ということです。
まとめ
以上で、PostgreSQLとPostGISのセットアップ方法、そしてデータベースの新規作成方法は終わりです。これで、OSMの生データをデータベースに格納するユーテリティを使う準備が整いました。次の章では、その具体的な方法について説明します。