XYZのテキストデータを連続線分のShapeファイルに変換するには

XYZのテキストデータが連続線分をあらわすものだったりすることがたまにあります。
縦横断計測や、GPSで移動計測したりするとこうなるんじゃないでしょうか。

こんなとき、PostGISを通す場合とGRASSを通す場合がとりあえず思いつきます。

PostGISを通す場合

この方法の魅力的な点は、バッチファイルで自動化することが出来るところでしょうか(たぶん)。
あと、図形のほかに属性がついていたりする場合の処理も可能です。

テキストデータはそのままでは放り込めないので、テキストファイルを書き換えてSQL文にします。
例えば以下のようなデータがあったとします。

0.0  0.0 0.0
1.0  1.0 4.0
2.0  0.0 3.0
4.0  3.0 8.0
8.0 21.0 2.0

このデータを連続線分にしたいなら以下のようにします。


BEGIN;
create table "lines"( gid serial primary key, name varchar(20) );
select AddGeometryColumn('', 'lines', 'the_geom', '2454', 'LINESTRING', 3);
insert into lines ( gid, name, the_geom ) values (
'1', 'line_1', GeomFromEWKT('srid=2454;
LINESTRING(
0.0  0.0 0.0,
1.0  1.0 4.0,
2.0  0.0 3.0,
4.0  3.0 8.0,
8.0 21.0 2.0
)
')
);
END;

テーブル名等は適宜変更してください。
また、SRID番号も一応指定しておいたほうがいいでしょう。
nameフィールドは別になくてもいいですが、
フィールドもShapeファイルにエクスポートされるので、
データに属性を付加したいときはこのようにしておきます。

ちなみにマルチポイントデータにしたいのであれば以下のようにします。


BEGIN;
create table "points"( gid serial primary key, name varchar(20) );
select AddGeometryColumn('', 'points', 'the_geom', '2454', 'MULTIPOINT', 3);
insert into pointss ( gid, name, the_geom ) values (
'1', 'points_1', GeomFromEWKT('srid=2454;
MULTIPOINT(
0.0  0.0 0.0,
1.0  1.0 4.0,
2.0  0.0 3.0,
4.0  3.0 8.0,
8.0 21.0 2.0
)
')
);
END;

放り込みに成功したらpgsql2shpコマンドでShapeファイルに吐き出します。

吐き出したShape(ポイント、ライン)をQGISで表示したところ

以上のコマンドをすべてバッチファイルにすれば自動的に処理が出来るでしょう(たぶん)。

アーカイブ