2015/04/03

PostGIS メイン開発者でも知らない便利クエリがあったりする件

[PostGIS]
さらに、その便利クエリが公式マニュアルのサンプルにあり、日本語版でも読めるという話。改めてマニュアルをきちんと読むことと、PostgreSQL のバージョンアップをフォローして新しい構文やクエリを知るのが大事だと思い、自分のためにメモしておきます。

■ clever elephant - Making Lines from Points(2015/03/20)

上記は Paul Ramsey のブログで、planet.postgresql.org でも読めます。同僚のブログで GPS の点データを時刻順に一本線につなげる ↓ のクエリを見て「ファッ!?」となった由。

SELECT
gps_track_id,
ST_MakeLine(geom ORDER BY gps_time ASC) AS geom
FROM gps_poinst
GROUP BY gps_track_id

Those of you who already knew about placing ORDER BY within an aggregate function are going "duh", and the rest of you are, like me, going "whaaaaaa?"


クエリの二行目 ST_MakeLine が、複数の点を一本線につなげる集約関数。PostgreSQL はバージョン 9.0 から引数に ORDER BY を指定できます。合計や平均といった通常の(一つの値を返す)集約関数には無関係な一方、array_agg など集約順で結果が変わる関数には有益で、PostgreSQL の拡張である PostGIS の集約関数にもそのまま使えるというわけ。

Paul Ramsey の文章はこのクエリ紹介だけですが、「マニュアルに書いてあるよ :) 」とコメントが。関数リファレンスのページ ↓ で、日本語版もあります。

■ http://postgis.net/docs/manual-2.1/ST_MakeLine.html
■ http://www.finds.jp/docs/pgisman/2.2.0/ST_MakeLine.html(日本語版)

同じことを、これまでは WITH 句かサブクエリで行っていたと Paul Ramsey が書いています。そのように色々工夫すれば目的を達成できるのも PostgreSQL / PostGIS の良い所で、自分もつい無理矢理なクエリを作りがちですが、簡単に書ければそれに越したことはありません。
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。