
Contents
実行環境 Windows 7 + PostgreSQL 9.5.0 に PL/v8 をインストール PostGIS 2.2 のインストールは 9.5 RC1 の時と同様(以上、昨日の記事) - PNG
ファイルをインポートして PostGIS ラスタのサンプルデータを作る - インポートしたラスタを再び
PNG ファイルに出力して確認 (以下、1 月 25 日) PostGIS ラスタで画像処理、続けて PNG ファイルに出力するテンプレート PostGIS の関数のソースを見て、PL/v8 への置き換えを考える (以下、1 月 26 日) コールバック関数 ST_Range4ma の PL/v8 版を作る PL/pgSQL の単純化バージョンも作る SQL でもコールバック関数を作る テストの全体 (以下、1 月 28 日) コールバック関数 4 つ × 周辺範囲 5 つ × 複数回テスト、を一つのクエリで テスト結果の TSV を PostgreSQL にインポート PL/v8 の方が、元からある PL/pgSQL の数倍速い (以下、1 月 31 日) テスト結果の PostgreSQL テーブルを R で読み込む 今回のテストと外れ値、95% 信頼区間について 全体を一つの棒グラフにまとめる(エラーバー付) ピクセル範囲から所要時間を予測する回帰式(関数別) 全体のまとめ
PNG ファイルをインポートして PostGIS ラスタのサンプルデータを作る
今回の主要部分は ↓ をなぞってます。違うのは実行環境(Win + Postgres 9.5- Writing PostGIS raster Map Algebra Callback Functions in PLV8(Postgres OnLine Journal, 2014.1.27)
画像処理の対象も同じ

PNG
-- on psql \! raster2pgsql RELEASE: 2.2.0 GDAL_VERSION=20 (r14208) USAGE: raster2pgsql [ ] [ [ ...]] [[ .] ] Multiple rasters can also be specified using wildcards (*,?). OPTIONS: -s
Set the SRID field. Defaults to 0. If SRID not provided or is 0, raster's metadata will be checked to determine an appropriate SRID. (...)
↓raster2pgsql の最も単純な使い方。取り込みたいファイル、取り込み先テーブル名を半角空白で区切って渡すと、インポート用 sql コマンドを標準出力に吐き出します。 raster2pgsql PNGファイル インポート先テーブル
上記コマンドの後にパイプでpsql をつなげれば一行でインポートできますが、今回は吐き出される SQL を確認するため、一時ファイルに出力。↓ raster2pgsql の実行、出力先フォルダの確認、そして SQL を画面表示した様子です。 \! raster2pgsql "R:/TMP/adbadge_tall.png" adbadge_tall > "R:/TMP/for_import.sql" Processing 1/1: R:/TMP/adbadge_tall.png INFO: Using default geotransform matrix (0, 1, 0, 0, 0, -1) for raster: R:/TMP/adbadge_tall.png \! dir "R:/TMP" (...) Jan 22 19:22 611,223 adbadge_tall.png Jan 22 19:41 4,214,681 for_import.sql 2 File(s) 4,825,904 bytes 2 Dir(s) 4,238,409,728 bytes free \! more "R:/TMP/for_import.sql" BEGIN; CREATE TABLE "adbadge_tall" ("rid" serial PRIMARY KEY,"rast" raster); INSERT INTO "adbadge_tall" ("rast") VALUES ('0100000400000000000000F03F000000000000 (...)
raster2pgsqlは処理完了のメッセージを出さないので、上のようにプロンプトなしの psql からファイル出力すると、終わったのかどうか一見分かりません ^^; psql で何かコマンドを打てる状態になっていれば終了済みで、エラーが出てないので OK と仮定し先に進みます。元の PNG が 600 x 878のフルカラーで、SQL は約 4 MB になりました。↓
psqlで外部 SQL ファイルの実行は、メタコマンド \i。SQL ファイルのパスを「スラッシュ区切り & 二重引用符でクォート」するとエラーで(普通の Windows コンソールと逆)↓ クォートせずに渡します。先ほど raster2pgsql コマンドで指定したテーブルが作成され、ラスタ 1 行が入力されました。メタコマンド \d でテーブル属性を確認すると主キーの連番 ID が自動的に付いており、raster2pgsql のデフォルトでそうなってます。 \i "R:/TMP/for_import.sql" "R:/TMP/for_import.sql: Invalid argument← クォートするとエラー \i R:/TMP/for_import.sql BEGIN CREATE TABLE INSERT 0 1 COMMIT \d adbadge_tall Table "public.adbadge_tall" +--------+---------+------------------------------------------------------------+ | Column | Type | Modifiers | +--------+---------+------------------------------------------------------------+ | rid | integer | not null default nextval('adbadge_tall_rid_seq'::regclass) | | rast | raster | | +--------+---------+------------------------------------------------------------+ Indexes: "adbadge_tall_pkey" PRIMARY KEY, btree (rid)インポートしたラスタを再び
ラスタをPNG ファイルに出力して確認 PNG ファイルに逆変換して出力することにより、正常に作成されたかどうか確認します。手順は(1)PostGIS の ST_AsPNG 関数でラスタを PNG 形式に変換、(2)結果の bytea 型データを1 月 2 日に書いた方法 ↓ でPNG ファイルにエクスポート。 copy ( 一つのbytea型データを返すクエリ ) to program 'xxd -r -p > "出力先バイナリファイルのパス"';
実際のクエリは ↓ こんな感じ。xxdコマンドは Git Portable 2.6.2 にあったものをそのまま使ってます。xxd のパスを短く書けないか少し試しましたが(psql 上でカレントフォルダを移動する等)うまくいかず、今回は絶対パスのまま。 copy ( select ST_AsPNG(rast) from adbadge_tall ) to program '"D:/AppsPortable/GitPortable/2.6.2/App/Git/usr/bin/xxd" -r -p > "R:/check_original.png"';
上のとおり元と同じPNG になりました。これでサンプル用ラスタの準備・確認終わり。次の画像処理が今回の本題で、明日以降書きます。 Recent Posts» Next» Prev 2017.1.29URL has moved to https://kenpg.bitbucket.io 2016.9.8コマンドラインだけでCygwin のポータブル環境構築と psql 9.6rc1 ビルド 2016.9.4PostgreSQLと OGR_FDW で SQLite3 にデータ入力・エクスポート(2) 2016.9.3PostgreSQLと OGR_FDW で SQLite3 にデータ入力・エクスポート(1) 2016.8.31改行や引用符のあるPostgreSQL データを SQLite3 にエクスポート TagsOfficial sites & docsAboutkenpg is an abbreviation for "kenkyu" (means research in Japanese) and postgres.
Main topics of this blog are how I use postgres, PostGIS, R and so on.