だんだん難しくなってきた?

ところで上のSQL例はさも自明なことのようにさらりと書いてますが、誰にでも直観的な書き方とは言えないと思います。
ピクセル操作しようとした人がまずマニュアルを見ると、ST_Value() と ST_SetValue() というのが最初に目にはいってきます。名前からして「Rasterに対するGetter/Setterは当然こいつらだろ」と誰しも思うはずです。しかし驚くべきことにST_SetValueの実際の機能はラスタデータの丸コピーをGETする関数だったりします。
たとえば今回の例では、GeoTIFFのロード時に250x250ピクセルで分割したラスタを作る指定をしましたが、これにST_SetValue()した場合、元の250x250の画像のうち「1ピクセルだけ」値が変更された、コピー画像を返す、というのが仕様です。
・・・使えねえ!ていうかどんなシチュで使うんだよこれ?
PL/PGSQLを駆使してST_PixelAsPolygons()とかループとか組み合わせればST_SetValue()で値を加工することも夢ではないですがそんな明後日方面に向けて努力しても誰もほめてはくれません*1。そんなわけで、ベクトルとラスタで演算する場合は、現状ではまず最初にベクトルを一旦ラスタに変換してST_MapAlgebraExpr()を上手に使って処理する方向で考えるのがよいようです。

…つづく

*1:OpenSource的な模範解答は「なければ作れ(作れないなら金を出せ)」ですが、PostGIS 2.1.xとかの時代まで待てばST_SetValues()といったより使いやすいインターフェースが追加されるかもしれません。