GISデータの検索

SQLもしくは図形ファイルloader/dumperを使ってデータベースからデータ を抽出することができます.SQLの節では,比較に利用できる演算子と空間テー ブルのクエリのいくつかについて述べます.

SQLの利用

データベースからデータ引き出す最も直接的な方法は,SQLのselectクエリを使い,構文解析可能なテキストファイルに結果のカラムを出力することです:

  db=# SELECT id, AsText(geom) AS geom, name FROM ROADS_GEOM; 
  id | geom                                    | name 
  ---+-----------------------------------------+-----------
   1 | LINESTRING(191232 243118,191108 243242) | Jeff Rd  
   2 | LINESTRING(189141 244158,189265 244817) | Geordie Rd 
   3 | LINESTRING(192783 228138,192612 229814) | Paul St 
   4 | LINESTRING(189412 252431,189631 259122) | Graeme Ave 
   5 | LINESTRING(190131 224148,190871 228134) | Phil Tce 
   6 | LINESTRING(198231 263418,198213 268322) | Dave Cres 
   7 | LINESTRING(218421 284121,224123 241231) | Chris Way 
  (6 rows)

しかしながら,たくさんのフィールドを削減するために何種類かの制限が必要な場合があるでしょう.属性ベース(attribute-based)の制限の場合,通常の空間的でないテーブルと同じSQL構文を使ってください.空間的な制限の場合,以下の演算子が利用可能/便利です:

&&

この演算子は2つのジオメトリがジオメトリ的に一致するかどうかを見分けます.例えば,'POLYGON((0 0,1 1,1 0,0 0))'は'POLYGON((0 0,1 1,1 0,0 0))'と同じかどうか (同じです).

=

この演算子は,少しだけより単純で,ジオメトリのbounding boxが同じかどうかだけをテストします.

次に,クエリの中でこれらの演算子を使うことができます.SQLコマンドラインでジオメトリとboxを記述するときは,"GeometryFromText()"関数を使って文字列表現をジオメトリに明示的に変化させなければならないことに注意してください.例えば:

  SELECT 
    ID, NAME 
  FROM ROADS_GEOM 
  WHERE 
    GEOM ~= GeometryFromText('LINESTRING(191232 243118,191108 243242)',-1);

上記のクエリは,ROADS_GEOMテーブルから,ジオメトリが指定した値と等しい単一ののレコードを返すでしょう.

"&&"演算子を使う場合,比較の特徴としてBOX3DかGEOMETRYのどちらかを記述することができます.しかしながら,GEOMETRYを記述した場合,bounding boxが比較の為に使われるでしょう.

  SELECT 
    ID, NAME 
  FROM ROADS_GEOM 
  WHERE 
    GEOM && GeometryFromText('POLYGON((191232 243117,191232 243119,191234 243117,191232 243117))',-1);

上記のクエリは比較の目的としてポリゴンのbounding boxを使うでしょう

最も一般的な空間クエリは,データブラウザやWeb mapperのようなクライアントソフトウェアで使われる,表示するためのデータを取り込むための"frame-based"クエリになるでしょう.フレームに対して"BOX3D"オブジェクトを用いると,そのようなクエリはこのようになるでしょう:

  SELECT 
    AsText(GEOM) AS GEOM 
  FROM ROADS_GEOM 
  WHERE 
    GEOM && GeometryFromText('BOX3D(191232 243117,191232 243119)'::box3d,-1);

BOX3Dの投影法を記述する為にSRIDの使っていることに注意してください.-1はSRIDを指定しないことを示すために使われます.

Dumperの利用

pgsql2shpテーブルダンパはデータベースに直接接続し,テーブルを図形ファイルに変換します.基本的な文法は次のようになります:

  pgsql2shp [<options>] <database> <table>

コマンドラインオプションです:

-d

3次元図形ファイルを出力します.既定では2次元図形ファイルを出力します.

-f <filename>

特定のファイル名に出力します.

-h <host>

接続するデータベースのホスト.

-p <port>

データベースホストで接続するポート.

-P <password>

データベースに接続する際に用いるパスワード.

-u <user>

データベースに接続する際に用いるユーザ名.

-g <geometry column>

複数のジオメトリカラムのあるテーブルの場合に,図形ファイルを出力する際に用いるジオメトリカラム