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型の説明があります。

参考サイト


球面距離を求めるには

2点間の楕円体上に置ける距離や球面距離を求める場合、ポイントをgeography型にしてst_distanceでいいらしいです。以下の例はWeb Tile Mercator座標系上にある図郭の横、縦の距離を求めるものです。

select
st_distance(TL, TR) as BWIDTH,
st_distance(TL, BL) as BHEIGHT
from (
select
st_transform('SRID=3857;POINT(左上X座標 左上Y座標)'::geometry, 4326)::geography as TL,
st_transform('SRID=3857;POINT(右上X座標 右上Y座標)'::geometry, 4326)::geography as TR,
st_transform('SRID=3857;POINT(左下X座標 左下Y座標)'::geometry, 4326)::geography as BL
)
as hoge;

上記の場合は楕円体距離が求まります。球面距離にする場合はst_distance()の第3引数にfalseを指定します。

厳密には図郭の上辺と下辺で球面距離は変わるので注意してください。

参考サイト


ちょいちょい続く…

アーカイブ