PostGISとは?
農業・食品産業技術総合研究機構 近畿中国四国農業研究センター
寺元郁博
はじめに
本記事では、PostGISをインストールすること、格納したデータを図示すること、クエリを作ってみることと空間データがSQLで扱えること、をご紹介していきます。 また、地図を扱うという若干特殊な分野ですので、図示するためのソフトウェアも併用して実例を交えながらの記事としました。それでは、第1回目はPostGISの概要についてご紹介しましょう。
自己紹介
本編に入る前に、簡単に筆者の自己紹介をしておきます。農業や農作業に関係したソフトウェアを作ったりしています。随分前からPostgreSQLを使っていましたが、 地理空間情報を扱う必要がでてきたため、PostGISに手を染めました。 "http://www.finds.jp/" でサービス等を公開しております。PostGISについて、今回は入門的な記事を書いてみました。よろしくお願いします。
GISとは…よく分からない
PostGISという名前は"Post"と"GIS"に切り離せるのは、なんとなく想像が付くことでしょう。ではそのGISとは何なのか、という話をまずは簡単に述べてみたいと思います。
GISとは、Geographic Information Systemの略で、「地図」を「作る」ソフトウェアの総称です。ただし地図といっても、道路地図とか、土地区画の地図とか、植生分布の地図とか、いろんなものを含みます。 このため、「地図」についても、GISについても、人によってとらえ方がまちまちです。
GISの使われ方の具体的な例をいくつか下記に挙げてみます。
- 新規に店を出す時に、国勢調査データ等をもとに、ターゲットとする層が多いかを把握する。
- 空中写真から農作物の育ち具合を計算して、良いところ悪いところを表示する。
- 建物等のCADデータを取り込んで、地図とあわせて表示して維持管理に使う。
データ形式も、空中写真等ではラスタ形式 (ビットマップ) が用いられ、その他ではベクタ形式がよく用いられる、といった具合に、バラバラです。 また、GISでは問題を解くための計算機能が重要となってきますが、これも、フーリエ変換から幾何演算まで、多種多様です。 共通するのは、「空間」という要素が入っていることと、すべての空間データは、理屈上はビシッと重なる、といったところでしょうか。
GISで地図を表示する際には、ドローソフトのように、レイヤを作ります。あるレイヤは空中写真を表示し、別のレイヤは道路データを表示する、といった具合です。 これらのレイヤは、精密に作成・管理されているなら、きれいに重ね合わせることができます。 Google Earthを起動してみると、それこそ空中写真と道路データとが、やはりズレはあるものの、かなりきれいに重ね合わせられています。 同じように、道路レイヤ、河川レイヤ、建物レイヤ等はそれぞれはデータとしては独立しているものを重ね合わせて表示して、ひとつの地図をつくることができるのがGISのポイントです。
GISっぽい画像
GISっぽい画像を次に示します。1枚目は,国土交通省国土計画局が無償で配布している国土数値情報のうち、農業地域のデータ表示しています。 このデータは国土利用計画法で指定する農業地域の「地図」ですが、本当に対象区域のみが表示されていて、これがどこなのか、またどういった地形が農業地域として指定されているのか、全く分かりません。
次の画像は、基盤地図情報 (精度レベル25000) による地図です。白地図と言って良いものです。
それぞれ独立していますが、重ね合わせると、次のような地図ができあがります。
重ね合わせることで、この例では、農業地域としてどこが指定されているかが分かるようになります(福山市の方なら)。また、農業地域の指定範囲が、市街地や新興住宅地域等とは重なっていないことも分かります。
PostGISとは
それでは、本記事の軸となるPostGISについて簡単に説明します。PostGISは、カナダにあるRefractions Researchが開発したもので、GPLで配布されています。 PostGISは、PostgreSQLに「空間拡張」を導入するためのものです。具体的には、ジオメトリ型、幾何関数、空間インデクス、座標系管理機能といったものが導入されます。
ジオメトリ型
PostGISを導入すると、ジオメトリ型が作られます。ジオメトリ型としては、POINT、LINESTRING, POLYGON が基本的なものとなります。それぞれ点、線 (直線だけでなく折れ線も含みます)、ポリゴン (多角形)、を示します。また、これらのデータの抽象型となるGEOMETRY型というものも導入されます。GEOMETRY型は、POINTやLINESTRINGといった型情報の他に、GISを制御する上で必要となる各種のメタ情報も含んでいます。そのため、通常のINT型やTEXT型の様にCREATE TABLE時に定義するのではなく、PostGISで導入されるAddGeometryColumn() 関数を使い、既存のテーブルに必要となるジオメトリ型のカラムを足していく (ADD COLUMNのイメージ) ことになります。この関数を使わず、手動でGEOMETRY型を定義するのは推奨されません。
複数の点、線、ポリゴンは、まとめてひとつのインスタンスとすることができます。この場合、それぞれ MULTIPOINT, MULTILINESTRING, MULTIPOLYGON という型になります。 たとえば、ある市が島を持つ場合には、本来ならその市は複数のPOLYGONに分かれるので、複数のレコードに分割しなければなりませんが、MULTIPOLYGONとすることで、ひとつの市をひとつのレコードに納めることができます。
幾何関数
幾何関数とは、 たとえば、市区町村ポリゴンを都道府県単位にまとめて結合して、都道府県ポリゴンを作成する、といった、ジオメトリ型のデータを加工するためのものです。 また、二つのポリゴンが重なっているかを判定する関数や、球面上の二点の距離を求める関数 (これは意外とややこしい) など、空間を扱う関数が揃っています。
空間インデクス
インデクスによって検索のコストが劇的に変化する、ということを、たぶんデータベース初心者だったころにみなさん感じたことがあるかと思います。 空間インデクスは、ジオメトリ型に対してつけるインデクスです、付けると付けないでは、検索コストがまるきり異なってきます。 スカラ値に対するインデクスと異なり、2次元・範囲を持つものに対するインデクスですが、CREATE INDEX で付ける点は変わりありません。
ラスタデータは扱えない
さきほど、PostGISのジオメトリ型では、点、線、ポリゴンがある、と簡単に述べましたが、これらはベクタデータです。ラスタ (空中写真などのビットマップ) データについては、PostGISでは扱えません。ラスタデータを併用する際は、下記で述べるフロントエンドで動くGISツールに任せることになります。
地図が出てこないじゃないか
「GISとは」で述べたところによると、GISは「地図」を作るものです。PostGISの機能だけでは、地図はどこにも生まれてきません。 PostGISはGISのバックエンド部分を担うものですので、地図を表示する機能は持ち合わせていません。 フロントエンドは、一般的なGISを使用したりします。GIS業界全体で見るとPostGISはあまり浸透していませんが、 フリーのデスクトップGISであるQuantum GIS等は、同じフリー・オープンソース同士ということもあって、早くからPostGISを直接扱う機能を持っています。
PostGISはどう使われているか?
さて、「PostGISは本当に使われているのか?」と思われている方もいることでしょう。
使われているようです。
話によるとセカイカメラのバックエンドでPostGISが使われているんだそうです。 OSGeo財団日本支部のトップの方 (とぼやかしていますが、Orkneyという会社のオーナーさんです) に伺ったところ、社内でよく使われていて「PostGISが無いとやってられない」とのことです。
使い方としては、幾何関数を用いてデータ加工に使用する場合と、加工されたデータを格納して地図アプリケーションに使用する場合の2つに分かれます。
自分の例で言うと、簡易逆ジオコーディングサービスでは、 データ加工とデータ格納の両方に使っています。基盤地図情報25000 WMS配信サービスでは、 データ加工は行っていませんが、PostGISに格納したデータを使用しています。空間インデクスのおかげで日本全国の地図データを放り込んでも、瞬殺で必要箇所を抜き出してくれるので、「これが無いとやってられない」と感じています。
関連情報
PostGISに関連する情報は結構少ないのですが、ご参考にしてみて下さい。
- 「Yaskey - Windows で MapServer 。メモ」
- MapServerというソフトウェアが中心ですが、PostGISのインストール方法など説明して下さっています
- 「Bubble://ちずろぐ/別館/」
- PostGIS関数サンプル集では図で示してくれていて完成が望まれます
- PostGIS 1.3.6 マニュアル 日本語訳
- 現在は1.5ですので若干古い情報ですが、参考になります。最新版1.5のマニュアルは、英語ですがこちらにあります
- オープンソースの地理空間情報ソフトウェアに関する利用、開発を促進することを目的としたOSGeo財団という団体があります。PostGISプロジェクトもこれに参加しています。日本支部もあります。
おわりに
今回は、概要説明に留めました。
次回は、実際にPostGISをインストールをしてみたいと思います。
出典
本章では,次のデータを使用しました.
- 国土数値情報(農業地域) 国土交通省
- 基盤地図情報(精度レベル25000) 国土地理院