サイトマップ
お知らせ、メモ
案内板
うちのヘッドライン
 




トップ  >  ソフトウェア豆知識  >  PostGIS豆知識  >  PostGIS:図形演算

図形演算


ポリゴン内にある点を抽出するには

以下では、 テスト用毎木調査データを作るには で作成したデータから適当に囲んだポリゴン内にある樹木を抽出する例を示します。



上記の図のデータがあり、樹木テーブルが「trees」、ポリゴンが「polygs」テーブルのgid=1のデータだったとして、 抽出するクエリは以下のようになります。



# select * from trees where 
   ST_Within( the_geom, ( select the_geom from polygs where gid = 1) );



抽出結果

テーブル内のある点が所属する図郭を検索する

POINTのテーブルと図郭のテーブルがあって、POINTテーブルの指定した点が所属する図郭を検索したい場合などでは 以下のようにすると良いでしょう。

# select name from zukaku where
	ST_WITHIN( ( select the_geom from points where gid = id ), zukaku.the_geom );

ST_Within以外にも図形演算用関数がいろいろとありますが、たぶん同じような要領で出来ると思います。


複数の連結している連続線分ををLINESTRINGにするには

始終点が一致している一連の連続線分を連結させてLINESTRINGにするには ST_LineMergeを使用します。 ただし、この関数の引数はMULTILINESTRING型なので、まず一連の連続線分をMULTILINESTRING型に合成する必要があります。

MULTILINESTRING型は連続線分の集合です。各連続線分に同じ属性を持たせたい場合に使うんだろうと思われます。

結果として、以下の様なSQLを実行します。

# select ST_LineMerge(ST_Multi(ST_Union(the_geom))) as new_geom from lines 何か条件;

条件節にはGROUP BYとかを指定するといいでしょう。

指定した連続線分が繋がっていない場合は、繋げられるところをつなげてMULTILINESTRING型を返すようです。 この場合はMULTILINESTRING型の各端点を調べて編集しましょう。

参考サイト


MULTILINESTRINGを分解するには

MULTILINESTRING型を分解して個別のLINESTRING型にする場合は以下のようにします。

# select (ST_Dump(the_geom)).geom as new_geom from multilines;

'( )'に注意してください。 ST_DumpはSETを返すそうです。 .pathとすると、分解した各要素の番号を参照します。

参考サイト


要素の長さを測るには

長さを測る関数はST_Length()関数を利用します。引数には長さを測りたいGeometry型を指定します。 経緯度座標で展開されているデータの場合は一度投影変換してから測る必要があります。

# select ST_Length(ST_Transform(geom, 3100)) ...;

ST_Tranformの第2引数は投影変換先のSRID番号を指定します。

球面距離で計算したい場合は直接的な方法はなさそうですが、以下のURLにGEOGRAPHY型の説明があります。

参考サイト


ちょいちょい続く...


クリエイティブ・コモンズ・ライセンス
This documents by Yamate,N is licensed under a Creative Commons 表示 - 継承 3.0 非移植 License.
login