第11章 ラスター リファレンス

目次

rasterは、ラスターデータを格納、解析するための PostGIS 型です。

ラスターファイルからラスターをロードするには「ラスターのロードと生成」を参照して下さい。

このリファレンスで使うダミーデータのラスターテーブルの作り方は次の通りです:

コード
CREATE TABLE dummy_rast(rid integer, rast raster);
INSERT INTO dummy_rast(rid, rast)
VALUES (1,
('01' -- little endian (uint8 ndr)
||
'0000' -- version (uint16 0)
||
'0000' -- nBands (uint16 0)
||
'0000000000000040' -- scaleX (float64 2)
||
'0000000000000840' -- scaleY (float64 3)
||
'000000000000E03F' -- ipX (float64 0.5)
||
'000000000000E03F' -- ipY (float64 0.5)
||
'0000000000000000' -- skewX (float64 0)
||
'0000000000000000' -- skewY (float64 0)
||
'00000000' -- SRID (int32 0)
||
'0A00' -- width (uint16 10)
||
'1400' -- height (uint16 20)
)::raster
),
-- Raster: 5 x 5 pixels, 3 bands, PT_8BUI pixel type, NODATA = 0
(2, ('01000003009A9999999999A93F9A9999999999A9BF000000E02B274A' ||
'41000000007719564100000000000000000000000000000000FFFFFFFF050005000400FDFEFDFEFEFDFEFEFDF9FAFEF' ||
'EFCF9FBFDFEFEFDFCFAFEFEFE04004E627AADD16076B4F9FE6370A9F5FE59637AB0E54F58617087040046566487A1506CA2E3FA5A6CAFFBFE4D566DA4CB3E454C5665')::raster);

下に示す関数は PostGIS ラスターのユーザにとって必要そうなものです。他にも一般的なユーザにとって興味のないラスター対応関数があります。

11.1. ラスターサポートデータ型

概要

本節では、ラスター機能をサポートするために作られた PostgreSQL データ型の一覧を挙げます。

  • geomval — geom (ジオメトリーオブジェクトを保持) と val (ラスターバンドからのピクセル値を倍精度浮動小数点数で保持) の 2フィールドからなるデータ型。
  • addbandarg — ST_AddBand の入力に使われる複合型で、新しいバンドの属性と初期値からなります。
  • rastbandarg — ラスターとそのバンドインデックスを表現する必要がある時に使われる複合型。
  • raster — ラスター空間データ型。
  • reclassarg — ST_Reclass 関数への入力として使われる再分類の振舞いを定義する複合型です。
  • summarystats — ST_SummaryStats 関数と ST_SummaryStatsAgg 関数の出力として使う複合型です。
  • unionarg — ST_Union 関数の入力に使う複合型です。処理するバンドと結合処理の挙動を定義します。

11.2. ラスター管理

  • AddRasterConstraints — ロードされたラスターテーブルの特定のカラムにラスター制約を追加します。制約には空間参照系、スケール、ブロックサイズ、アラインメント、バンド数、バンド型、ラスタカラムが規則正しいブロックかどうかを示すフラグがあります。テーブルは制約が推論されるためのデータがロードされなければなりません。制約の設定が完了するとtrue を返し、問題があると通知を返します。
  • DropRasterConstraints — ラスターテーブルカラムを参照する PostGIS ラスター制約を削除します。データの再読み込みやラスターカラムデータの更新の際に使えます。
  • AddOverviewConstraints — ラスターカラムに対して、他のオーバビューであることをタグ付けします。
  • DropOverviewConstraints — ラスターカラムに対して他のオーバビューであることをタグ付けしているのを解除します。
  • PostGIS_GDAL_Version — PostGIS で使っている GDAL ライブラリの版を報告します。
  • PostGIS_Raster_Lib_Build_Date — 完全なラスターライブラリをビルドした日付を報告します。
  • PostGIS_Raster_Lib_Version — 完全なラスターの版とビルドコンフィギュレーション情報を報告します。
  • ST_GDALDrivers — 使用している GDAL ライブラリが対応するラスター書式の一覧を返します。この一覧でcan_write=True となっているものだけが ST_AsGDALRaster で使えます。
  • UpdateRasterSRID — ユーザが指定したカラムとテーブルにあるラスターの全てについて SRID を変更します。
  • ST_CreateOverview — 与えられたラスターカバレッジから解像度を落としたものを生成します。

11.3. ラスターコンストラクタ

  • ST_AddBand — 与えられたタイプで、与えられた初期値にした新しいバンドを、与えられたインデックス位置に追加したラスターを返します。インデックス位置を指定していない場合には、バンドは末尾に追加されます。
  • ST_AsRaster — PostGIS ジオメトリーを PostGIS ラスターに変換します。
  • ST_AsRasterAgg — 集約関数です。PostGIS ジオメトリーを新しいラスターに変換します。
  • ST_Band — 既存のラスターの、一つ以上のバンドを新しいラスターとして返します。既存のラスターから新しいラスターを構築する際に使えます。
  • ST_MakeEmptyCoverage — 空のラスタータイルのグリッドでジオリファレンスを施されている領域を生成します。
  • ST_MakeEmptyRaster — 与えられたピクセル範囲 (width & height)、左上の X,Y、ピクセルサイズ、回転 (scalex, scaley, skewx, skewy) と空間参照系 (srid) が指定された空ラスター (バンドを持たないラスター) を返します。ラスターが渡されると、新しいラスターは渡されたラスターと同じサイズ、アラインメント、SRID になります。SRID が指定されていない場合には、空間参照系は不明 (0) とされます。
  • ST_Tile — 求められた出力ラスターのピクセル数に基づいて入力ラスターを分割した結果のラスター集合を返します。
  • ST_Retile — 任意のタイル化されたラスターカバレッジから構成されたタイルの集合を返します。
  • ST_FromGDALRaster — 対応する GDAL ラスターファイルからラスターを返します。

11.4. ラスターアクセサ

  • ST_GeoReference — GDAL 書式または一般的にワールドファイルでみられる ESRI 書式の地理参照メタデータを返します。デフォルトは GDAL です。
  • ST_Height — ラスターの高さをピクセル単位で返します。
  • ST_IsEmpty — ラスターが空 (幅が 0で高さが 0) の場合には TRUE を返します。他の場合には、FALSE を返します。
  • ST_MemSize — ラスターが取る領域の合計をバイト単位で返します。
  • ST_MetaData — ピクセル数、回転 (スキュー)、左上隅位置等のラスターオブジェクトに関する基本的なメタデータを返します。
  • ST_NumBands — ラスターオブジェクトのバンド数を返します。
  • ST_PixelHeight — 空間参照系の地理的な単位でのピクセルの高さを返します。
  • ST_PixelWidth — 空間参照系の地理的な単位でのピクセルの幅を返します。
  • ST_ScaleX — 空間参照系の地理的な単位でのピクセル幅の X 成分を返します。
  • ST_ScaleY — 空間参照系の地理的な単位でのピクセル幅の Y 成分を返します。
  • ST_RasterToWorldCoord — ラスターの指定した列と行における左上隅の地理座標 X 値と Y 値 (経度と緯度) を返します。列と行の番号は 1始まりです。
  • ST_RasterToWorldCoordX — ラスターの指定した列と行における左上隅の地理座標の X 値を返します。列と行の番号は1始まりです。
  • ST_RasterToWorldCoordY — ラスターの指定した列と行における左上隅の地理座標の Y 値を返します。列と行の番号は1始まりです。
  • ST_Rotation — ラスターの回転をラジアンで返します。
  • ST_SkewX — 空間参照の X スキュー (回転パラメータ) を返します。
  • ST_SkewY — 空間参照の Y スキュー (回転パラメータ) を返します。
  • ST_SRID — ラスターの spatial_ref_sys テーブルで定義されている空間参照系識別番号を返します。
  • ST_Summary — ラスターの中身の概要が文字列で返されます。
  • ST_UpperLeftX — 適用されている空間参照系でのラスターの左上隅の X 座標値を返します。
  • ST_UpperLeftY — 適用されている空間参照系でのラスターの左上隅の Y 座標値を返します。
  • ST_Width — ラスターの幅をピクセル単位で返します。
  • ST_WorldToRasterCoord — ラスターの空間参照系による地理座標の X 値と Y 値 (経度と緯度) またはポイントジオメトリに対応するピクセルの左上隅を返します。
  • ST_WorldToRasterCoordX — ラスターの空間参照系に基づくポイントジオメトリー (pt) または X,Y 座標値 (xw,yw) に対応するラスターの列を返します。
  • ST_WorldToRasterCoordY — ラスターの空間参照系に基づくポイントジオメトリー (pt) または X,Y 座標値 (xw,yw) に対応するラスターの行を返します。

11.5. ラスターバンドアクセサ

  • ST_BandMetaData — 指定したラスターバンドの基本的なメタデータを返します。バンド番号を指定しない場合には、1番と仮定します。
  • ST_BandNoDataValue — 指定されたバンドについてデータが無いことを表現する値を返します。バンド番号を指定しない場合には、1番と仮定します。
  • ST_BandIsNoData — 指定したバンドが NODATA 値だけで満たされている場合には、TRUE を返します。
  • ST_BandPath — ファイルシステムに格納されているバンドのシステムファイルパスを返します。バンド番号が指定されていない場合には、1番と仮定します。
  • ST_BandFileSize — ファイルシステムに格納されているバンドのファイルサイズを返します。バンド番号が指定されていない場合には、1番と仮定します。
  • ST_BandFileTimestamp — ファイルシステムに格納されているバンドのファイルタイムスタンプ返します。バンド番号が指定されていない場合には、1番と仮定します。
  • ST_BandPixelType — 指定したバンドのピクセルタイプを返します。バンド番号が指定されていない場合には、1番と仮定します。
  • ST_MinPossibleValue — このピクセルタイプが格納できる最小値を返します。
  • ST_HasNoBand — 指定したバンド番号のバンドが無い場合には、TRUE を返します。バンド番号を指定していない場合には、1番と仮定します。

11.6. ラスターピクセルアクセサとセッター

  • ST_PixelAsPolygon — 指定した行と列のピクセルの境界となるジオメトリーを返します。
  • ST_PixelAsPolygons — 全てのピクセルについて境界となるジオメトリーを、ピクセルごとのピクセル値とラスタ座標系の X と Y とを付けて返します。
  • ST_PixelAsPoint — ピクセルの左上隅のポイントジオメトリーを返します。
  • ST_PixelAsPoints — 全てのピクセルについてポイントジオメトリーを、ピクセルごとのピクセル値とラスター座標系の X と Y とを付けて返します。ポイントジオメトリーの座標はピクセルの左上隅です。
  • ST_PixelAsCentroid — ピクセルで表現される面の重心 (ポイントジオメトリー) を返します。
  • ST_PixelAsCentroids — 全てのピクセルについて重心 (ポイントジオメト) リを、ピクセルごとのピクセル値とラスター座標系の X と Y とを付けて返します。ポイントジオメトリーの座標はピクセルで表現される面の重心です。
  • ST_Value — 指定したバンドにおける columnx, rowy で指定したピクセルまたは指定したジオメトリーポイントに対応するピクセルの値を返します。 バンド番号は 1始まりで、指定しない場合には、1番と仮定します。exclude_nodata_valueが FALSE に設定された場合には、NODATA ピクセルを含む全てのピクセルがインタセクトするかが考慮され、値を返します。exclude_nodata_valueを渡さない場合には、ラスターのメタデータから読みます。
  • ST_NearestValue — 与えられたバンドの、columnx と rowy で指定されるか、またはラスターと同じ空間参照系で表現されたポイントで指定されたピクセルに最も近いNODATAでない値を返します。
  • ST_SetZ — 入力ジオメトリーと同じ X/y 座標値と、指定されたリサンプリングアルゴリズムを使ってラスターから複写された Z 値とを持つジオメトリーを返します。
  • ST_SetM — 入力ジオメトリーと同じ X/Y 値を持ち、かつ、指定されたリサンプリングアルゴリズムを使ってラスターから複写された M 値を持つジオメトリーを返します。
  • ST_Neighborhood — 与えられたバンドの columnX, columnY か、ラスターと同じ空間参照系のジオメトリーポイントで指定されたピクセルの周囲にある、NODATAでない 2次元倍精度浮動小数点数配列を返します。
  • ST_SetValue — 与えられたバンドの columnX, columnY か、ラスターと同じ空間参照系のジオメトリーポイントで指定されたピクセルの値または指定したジオメトリーとインタセクトするピクセル群の値を設定することから得られる、変更されたラスターを返します。バンド番号は 1始まりで、指定しない場合には、1番と仮定します。
  • ST_SetValues — 与えられたバンドに複数の値を設定して、変更されたラスターを返します。
  • ST_DumpValues — 指定したバンドの値を 2次元で得ます。
  • ST_PixelOfValue — 検索値と同じ値を持つピクセルの columnx, rowy ピクセル座標を得ます。

11.7. ラスターエディタ

  • ST_SetGeoReference — 地理参照 6パラメーターを一度に設定します。数値は空白で区切ります。GDAL またはESRI 書式の入力を受け付けます。デフォルトは GDAL です。
  • ST_SetRotation — ラスターの回転をラジアン単位で設定します。
  • ST_SetScale — ピクセルサイズの X 値と Y 値を空間参照系の単位で設定します。数値は単位/ピクセルの幅または高さです。
  • ST_SetSkew — 地理参照のスキュー (回転パラメーター) の X 値と Y 値を設定します。一つだけ渡した場合には、X 値と Y 値は同じ値に設定されます。
  • ST_SetSRID — スタの SRID を spatial_ref_sys に定義されている特定の整数値に設定します。
  • ST_SetUpperLeft — ラスターの左上隅の投影座標系の X 値と Y 値を設定します。
  • ST_Resample — 指定したリサンプリングアルゴリズム、新しいピクセル範囲、グリッドの隅、定義するか他のラスターから借りてきた地理参照属性を使ってリサンプリングを行います。
  • ST_Rescale — スケール (ピクセルサイズ) だけを調整するリサンプリングを行います。新しいピクセル値のリサンプリングアルゴリズムとして最近傍補間 ('NearestNeighbor' (英語または米式綴り方))、双線形補間 ('Bilinear')、3次補間 ('Cubic')、3次スプライン補間 ('CubicSpline')、ランチョス補間 ('Lanczos') を用います。デフォルトは最近傍補間です。
  • ST_Reskew — キュー (回転パラメーター) だけを調整するリサンプリングを行います。新しいピクセル値のリサンプリングアルゴリズムとして最近傍補間 ('NearestNeighbor' (米式綴り方))、双線形補間 ('Bilinear')、3次補間 ('Cubic')、3次スプライン補間 ('CubicSpline')、ランチョス補間 ('Lanczos') を用います。デフォルトは最近傍補間です。
  • ST_SnapToGrid — グリッドにスナップすることでラスターをリサンプリングします。新しいピクセル値のリサンプリングアルゴリズムとして最近傍補間 ('NearestNeighbor' (米式綴り方))、双線形補間 ('Bilinear')、3次補間 ('Cubic')、3次スプライン補間 ('CubicSpline')、ランチョス補間('Lanczos') を用います。デフォルトは最近傍補間です。
  • ST_Resize — ラスターを新しい幅、高さにサイズ再設定を行います。
  • ST_Transform — ラスターを既知の空間参照系から他の既知の空間参照系に、指定したリサンプリングアルゴリズムで投影変換します。新しいピクセル値のリサンプリングアルゴリズムとして最近傍補間 ('NearestNeighbor' (米式綴り方))、双線形補間 ('Bilinear')、3次補間 ('Cubic')、3次スプライン補間 ('CubicSpline')、ランチョス補間 ('Lanczos') を用います。デフォルトは最近傍補間です。

11.8. ラスターバンドエディタ

  • ST_SetBandNoDataValue — 指定したバンドに NODATA を表現する値を設定します。バンドを指定しない場合には、1番と仮定します。NODATA 値を持たないようにするには、nodatavalue に NULL を指定します。
  • ST_SetBandIsNoData — バンドの isnodata フラグを TRUE にします。
  • ST_SetBandPath — データベース外バンドの外部パスとバンド番号を更新します。
  • ST_SetBandIndex — データベース外バンドの外部バンド番号の更新

11.9. ラスターバンド統計情報と解析

  • ST_Count — ラスターまたはラスターカバレッジの指定したバンドのピクセル数を返します。バンドを指定しない場合には、1番と仮定します。exclude_nodata_value を TRUE に設定している場合には、NODATA 値と等しくないピクセルのみを数えます。
  • ST_CountAgg — 集約関数です。ラスター集合の与えられたバンドのピクセル数を返します。バンドが指定されていない場合には、1番と仮定します。exclude_nodata_value を TRUE に設定している場合には、NODATA 値と等しくないピクセルのみを数えます。
  • ST_Histogram — ラスターまたはラスターカバレッジのビン範囲で分割したデータ分布をまとめるヒストグラムの集合を返します。ビン数を指定しない場合には自動計算されます。
  • ST_Quantile — ラスターまたはラスターテーブルカバレッジのサンプルまたは母集団の分位数を計算します。値がラスターの 25%,50%,75%にあるかを調べることができます。
  • ST_SummaryStats — 与えられたラスターのバンドまたはラスターカバレッジの count, sum, mean, stddev, min, max からなる統計情報のサマリーです。バンドを指定しない場合には、1番と仮定します。
  • ST_SummaryStatsAgg — 集約関数。与えられたラスターのバンドの集合の count, sum, mean, stddev, min, max からなる統計情報のサマリーです。バンドを指定しない場合には、1番と仮定します。
  • ST_ValueCount — ラスター (またはラスターカバレッジ) の指定されたバンドで、指定した値を持つピクセルを対象として、ピクセルバンド値とピクセル数からなるレコードの集合を返します。バンドを指定しない場合には、1番と仮定します。デフォルトでは NODATA 値のピクセルは数えられず、ピクセルの他の値は出力され、ピクセルバンド値は最も近い整数に丸められます。

11.10. ラスター入力

  • ST_RastFromWKB — Well-Known Binary (WKB) ラスターからラスター値を返します。
  • ST_RastFromHexWKB — Well-Known バイナリ (WKB) ラスターの 16進数表現からラスターを返します。

11.11. 出力

  • ST_AsBinary/ST_AsWKB — ラスターの Well-Known Binary (WKB) 表現を返します。
  • ST_AsHexWKB — Well-Known Binary (WKB) ラスターを 16進数表現で返します。
  • ST_AsGDALRaster — 指定された GDAL ラスター書式でラスタータイルを返します。ラスター書式はコンパイルしたライブラリが対応するものです。ライブラリが対応する書式の一覧を得るにはST_GDALRasters() を使います。
  • ST_AsJPEG — ラスターの選択されたバンドを、単一の Joint Photographic Exports Group (JPEG) 画像としてバイト配列で返します。バンドを指定せず、1バンドか 3より多いバンドがある場合には、1番バンドを使用します。3バンドのみ指定した場合には、3バンドを使用し、RGB に対応付けます。
  • ST_AsPNG — ラスターの選択されたバンドを、単一の portable network graphics (PNG) 画像としてバイト配列で返します。バンドを指定せず、1バンドか 3バンドか 4バンドある場合には、全てのバンドを使用します。バンドを指定せず、2バンドか 4より多いバンドがある場合には、1番バンドを使用します。対象バンドは RGB または RGBA に対応付けられます。
  • ST_AsTIFF — ラスターの選択されたバンドを、単一の TIFF 画像 (バイト配列) として返します。バンドを指定しないか指定したバンドがラスター内に無い場合には、全てのバンドの使用を試みます。

11.12. ラスター処理: 地図代数

  • ST_Clip — 入力ジオメトリーで切り取ったラスターを返します。バンドが指定されていない場合には、全てのバンドが処理されます。cropが指定されていなかったり TRUE となっている場合には、出力ラスターは切り取られます。touchedが TRUE の場合には、接触するピクセルは取り込まれ、TRUE でない場合には、中心がジオメトリー内にあるピクセルだけが取り込まれます。
  • ST_ColorMap — 元のラスターと指定したバンドから 4個までの 8BUI バンド (grayscale, RGB, RGBA) からなる新しいラスターを生成します。
  • ST_Grayscale — 元のラスターと指定したバンドを赤、緑、青バンドとして一つの 8BUI バンドを持つラスタを生成します。
  • ST_Intersection — 二つのラスターの共有部分またはベクタ化したラスターとジオメトリーとのインタセクトした部分を表現する、ラスターまたはジオメトリーとピクセル値の組の集合を返します。
  • ST_MapAlgebra (callback function version) — コールバック関数版 - 一つ以上の入力ラスター、バンドインデックスと一つのユーザ定義コールバック関数から、一つのバンドからなるラスターを返します。
  • ST_MapAlgebra (expression version) — 数式版 - 一つか二つの入力ラスター、バンド番号、一つ以上のユーザ定義SQL 式から一つのバンドを持つラスターを返します。
  • ST_MapAlgebraExpr — 1バンド版: 入力バンドに対する妥当な PostgreSQL 代数演算で形成された、指定したピクセルタイプとなる 1バンドラスターを生成します。バンドを指定しない場合には、1番を仮定します。
  • ST_MapAlgebraExpr — 2バンド版: 二つの入力バンドに対する妥当な PostgreSQL 代数演算で形成された、指定したピクセルタイプとなる 1バンドラスターを生成します。バンドを指定しない場合には、どちらも 1番と仮定します。結果ラスターは、一つ目のラスターのアラインメント (スケール、スキュー、ピクセル角位置) にあわされます。範囲は"extenttype"引数で定義されます。取りうる"extenttype"の値は INTERSECTION, UNION, FIRST, SECOND です。
  • ST_MapAlgebraFct — 1バンド版 - 入力バンドに対する妥当な PostgreSQL 関数で形成された、指定したピクセルタイプとなる 1バンドラスターを生成します。バンドを指定しない場合には、1番と仮定します。
  • ST_MapAlgebraFct — 2バンド版 - 二つの入力バンドに対する妥当な PostgreSQL 関数で形成された、指定したピクセルタイプとなる 1バンドラスターを生成します。バンドを指定しない場合には、1番と仮定します。"extenttype"のデフォルトは INTERSECTION です。
  • ST_MapAlgebraFctNgb — 1バンド版: ユーザ定義 PostgreSQL 関数を使用する最近傍地図代数関数です。入力ラスタバンドの近傍の値を与えた PL/pgSQL ユーザ定義関数の結果からなるラスターを返します。
  • ST_Reclass — 元のラスターから再分類したバンドタイプからなるラスターを生成します。nband は変更するバンドです。nband が指定されていない場合には、1と仮定します。他の全てのバンドは変更せずに返します。可視画像の書式としてより単純な描画を行うために、16BUIバンドを 8BUI バンドに変換する、等のために使います。
  • ST_ReclassExact — 元ラスターから再分類したバンドからなる新しいラスターを生成します。元ラスターのバンド内の値から新たに生成されるラスターのバンド内の値への 1対 1のマッピングを使います。
  • ST_Union — ラスタータイルの集合を結合して 1以上のバンドからなる単一ラスターを返します。

11.13. 組み込み地図代数コールバック関数

  • ST_Distinct4ma — 近隣のピクセル値のうち一意となるものを数えるラスター処理関数です。
  • ST_InvDistWeight4ma — 近隣のピクセル値の内挿補間を行うラスター処理関数です。
  • ST_Max4ma — 近隣のピクセル値の最大値を計算するラスター処理関数です。
  • ST_Mean4ma — 近隣のピクセル値の平均値を計算するラスター処理関数です。
  • ST_Min4ma — 近隣のピクセル値の最小値を計算するラスター処理関数です。
  • ST_MinDist4ma — 対象ピクセルと値を持つ近隣ピクセルとの最短距離をピクセル単位で返すラスター処理関数です。
  • ST_Range4ma — 近隣のピクセル値の範囲を計算するラスター処理関数です。
  • ST_StdDev4ma — 近隣のピクセル値の標準偏差を計算するラスター処理関数です。
  • ST_Sum4ma — 近隣のピクセル値の合計を計算するラスター処理関数です。

11.14. ラスター処理: DEM (標高)

  • ST_Aspect — 標高ラスターバンドの傾斜方向 (デフォルトの単位は度) を返します。地形解析に使えます。
  • ST_HillShade — 与えられた方位、高度、明度、スケールの入力を使って標高ラスターバンドの仮想照明を返します。
  • ST_Roughness — DEM の「粗度」を計算したラスターを返します。
  • ST_Slope — 標高ラスターバンドの傾斜角 (デフォルトでは度単位) を返します。地形解析に使えます。
  • ST_TPI — 地形的位置指数を計算したラスターを返します。
  • ST_TRI — 起伏指標を計算したラスターを返します。
  • ST_InterpolateRaster — X 値と Y 値を使用してグリッド上のポイントを配置し、ポイントの Z 値をサーフェス標高として配置し、3次元ポイントの入力セットに基づいてグリッドサーフェスを補間します。
  • ST_Contour — 与えられたラスターバンドから等高線ベクタを生成します。GDAL等高線生成アルゴリズムを使います。

11.15. ラスター処理: ラスターからジオメトリー

  • Box3D — ラスターを囲むボックスの box3d 表現を返します。
  • ST_ConvexHull — BandNoDataValue と等しいピクセル値を含むラスターの凸包ジオメトリーを返します。一般的な形状でスキューのないラスターでは、ST_Envelope と同じ結果になります。不規則な形状をしているか回転しているラスターでのみ使います。
  • ST_DumpAsPolygons — 指定されたラスターバンドから geomval (geom,val) 行の集合を返します。バンドを指定しない場合のデフォルトは 1です。
  • ST_Envelope — ラスターの範囲のポリゴン表現を返します。
  • ST_MinConvexHull — NODATA 値を除いたラスターの凸包ジオメトリーを返します。
  • ST_Polygon — NODATA 値でないピクセル値を持つピクセルの結合で形成されるマルチポリゴンジオメトリを返します。バンドを指定しない場合のデフォルトは 1です。
  • ST_IntersectionFractions — ラスター上の個々のセルのうち与えられたジオメトリーで覆われたものの断片を計算します。

11.16. ラスター演算子

  • && — A のバウンディングボックスが B のバウンディングボックスとインタセクトする場合にTRUEを返します。
  • &< — A のバウンディングボックスが B のバウンディングボックスをオーバラップするか、B のバウンディングボックスの左にある場合にTRUEを返します。
  • &> — A のバウンディングボックスが B のバウンディングボックスをオーバラップするか、B のバウンディングボックスの右にある場合に TRUE を返します。
  • = — A のバウンディングボックスが B のバウンディングボックスと同じ場合にTRUEを返します。倍精度浮動小数点数のバウンディングボックスを使います。
  • @ — A のバウンディングボックスが B のバウンディングボックスに含まれる場合にTRUEを返します。倍精度浮動小数点数のバウンディングボックスを使います。
  • ~= — A のバウンディングボックスが B のバウンディングボックスと同じ場合に TRUEを返します。
  • ~ — A のバウンディングボックスが B のバウンディングボックスを含む場合にTRUEを返します。倍精度浮動小数点数のバウンディングボックスを使います。

11.17. ラスターとラスタバンドの空間関係関数

  • ST_Contains — rastA の外に rastB の点が無く、rastA の内部に rastB の内部の点が一つ以上ある場合にTRUE を返します。
  • ST_ContainsProperly — rastB が rastA の内部でインタセクトし、かつ rastA の境界とも外部ともインタセクトしない場合に TRUE を返します。
  • ST_Covers — rastB が rastA の外部に点を持たない場合に TRUE を返します。
  • ST_CoveredBy — rastA が rastB の外部に点を持たない場合に TRUE を返します。
  • ST_Disjoint — rastA が rastB とインタセクトしない場合に TRUE を返します。
  • ST_Intersects — rastA が rastB とインタセクトする場合に TRUE を返します。
  • ST_Overlaps — rastA と rastB がインタセクトして、かつ一方がもう一方に完全には包含されない場合には TRUE を返します。
  • ST_Touches — rastA と rastB が少なくとも一つの共通の点を持ち、かつ二つのラスターの内部同士がインタセクトしない場合に TRUE を返します。
  • ST_SameAlignment — ラスターが同じスキュー、スケール、空間参照系、オフセットを持つ (ピクセルが分割されることなく同じグリッドに置かれている) 場合に TRUE を返し、そうでない場合は問題を詳述する通知とともに FALSE を返します。
  • ST_NotSameAlignmentReason — ラスターが同じアラインメントを持つかどうか、また、持たない場合にはその理由を示す文字列を返します。
  • ST_Within — rastA が rastB の外部に点を持たず、rastA の内部の少なくとも一つの点が rastB の内部にある場合に TRUE を返します。
  • ST_DWithin — rastA と rastB が指定した距離内にある場合に TRUE を返します。
  • ST_DFullyWithin — rastA と rastB が指定した距離内に完全に収まる場合に TRUE を返します。

11.18. ラスターに関する技法

概要

本節では、PostGIS ラスターに関連する様々な落とし穴や技法について説明します。

11.18.1. データベース外ラスター

11.18.1.1. 多数のファイルを持つディレクトリ

GDAL はファイルを開く時に、そのファイルのディレクトリを熱心にスキャンして、他のファイルのカタログを構築します。このディレクトリに多数のファイル (千とか万とか) あるとします。一つのファイルを開くと動作が非常に遅くなります (特に NFS のようなネットワークドライブの場合)。

この振舞いを制御するために、GDAL にはGDAL_DISABLE_READDIR_ON_OPENという環境変数があります。GDAL_DISABLE_READDIR_ON_OPENTRUEに設定すると、ディレクトリのスキャンを無効にします。

Ubuntu では (Ubuntu 用 PostgreSQL のパッケージを使っていると仮定します)、GDAL_DISABLE_READDIR_ON_OPEN/etc/postgresql/POSTGRESQL_VERSION/CLUSTER_NAME/environment内で設定できます (POSTGRESQL_VERSION は 9.6等の PostgreSQL のバージョンで、CLUSTER_NAME は maindb 等のクラスタ名です)。PostGIS 環境変数もここで同じく設定できます。

コード
# environment variables for postmaster process
# This file has the same syntax as postgresql.conf:
#  VARIABLE = simple_value
#  VARIABLE2 = 'any value!'
# I. e. you need to enclose any value which does not only consist of letters,
# numbers, and '-', '_', '.' in single quotes. Shell commands are not
# evaluated.
POSTGIS_GDAL_ENABLED_DRIVERS = 'ENABLE_ALL'

POSTGIS_ENABLE_OUTDB_RASTERS = 1

GDAL_DISABLE_READDIR_ON_OPEN = 'TRUE'
                    

11.18.1.2. 開くことができるファイルの最大数

Linux と PostgreSQL が許している、開くことができるファイルの最大数は、通常は増加していません (通常、プロセスあたり 1024ファイルです)。システムは人間のユーザが使用するという仮定に立っているからです。データベース外ラスターは、一つの妥当なクエリで簡単に制限超過させることができます (例えば、10年分のラスターからなるデータセットで、個々のラスターは日別最低気温、最大気温を持っていて、データセット内の最大値と最小値を得たい場合などです)。

最も簡単な変更方法は、PostgreSQL 設定max_files_per_processです。デフォルトとして 1000が設定されていますが、データベース外ラスターとしては非常に低い値です。安全な開始値は 65536でしょう。ただし、実際には、これはデータベースとデータベースに対して実行されるクエリに依存します。サーバ開始時のみ、かつ PostgreSQL コンフィギュレーションファイル (例: Ubuntu 環境では/etc/postgresql/POSTGRESQL_VERSION/CLUSTER_NAME/postgresql.conf) 内のみで設定できます。

コード
...
# - Kernel Resource Usage -

max_files_per_process = 65536           # min 25
                                        # (change requires restart)
...
                    

主な変更は Linux カーネルのファイルを開く制限です。次の通り、二つに分かれます:

  • システム全体で開くことができるファイルの最大数

  • プロセスごとに開くことができるファイルの最大数

11.18.1.2.1. システム全体で開くことができるファイルの最大数

次の例で、システム全体の、現在の開くことができるファイルの最大値を調べることができます:

コード
$ sysctl -a | grep fs.file-max
fs.file-max = 131072
                    

返された値が十分には大きくない場合には、次に示す例に従って、/etc/sysctl.d/にファイルを追加します。

コード
$ echo "fs.file-max = 6145324" >> /etc/sysctl.d/fs.conf

$ cat /etc/sysctl.d/fs.conf
fs.file-max = 6145324

$ sysctl -p --system
* Applying /etc/sysctl.d/fs.conf ...
fs.file-max = 2097152
* Applying /etc/sysctl.conf ...

$ sysctl -a | grep fs.file-max
fs.file-max = 6145324
                    
11.18.1.2.2. プロセスごとの開けるファイルの最大数

PostgreSQL のサーバプロセスごとに開けるファイルの最大数を増やす必要があります。

現在の PostgreSQL サービスのプロセスは開くことができるファイルの最大数を使っていて、次の例のようになっています (PostgreSQL が実行されていることを確認して下さい)。

コード
$ ps aux | grep postgres
出力
postgres 31713  0.0  0.4 179012 17564 pts/0    S    Dec26   0:03 /home/dustymugs/devel/postgresql/sandbox/10/usr/local/bin/postgres -D /home/dustymugs/devel/postgresql/sandbox/10/pgdata
postgres 31716  0.0  0.8 179776 33632 ?        Ss   Dec26   0:01 postgres: checkpointer process
postgres 31717  0.0  0.2 179144  9416 ?        Ss   Dec26   0:05 postgres: writer process
postgres 31718  0.0  0.2 179012  8708 ?        Ss   Dec26   0:06 postgres: wal writer process
postgres 31719  0.0  0.1 179568  7252 ?        Ss   Dec26   0:03 postgres: autovacuum launcher process
postgres 31720  0.0  0.1  34228  4124 ?        Ss   Dec26   0:09 postgres: stats collector process
postgres 31721  0.0  0.1 179308  6052 ?        Ss   Dec26   0:00 postgres: bgworker: logical replication launcher
コード
$ cat /proc/31718/limits
出力
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             15738                15738                processes
Max open files            1024                 4096                 files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       15738                15738                signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us
                    

上の例では、プロセスに対する開くことができるファイルの制限が 31718になっています。どのプロセスがどうするかは問題ではありません。関心を持っている応答はMax open filesです。

Max open filesSoft LimitHard Limitを PostgreSQL の設定で指定したmax_files_per_processよりも多くなるようにしたいと思っています。この例では、max_files_per_processを 65536にしています。

Ubuntu (かつ、Ubuntu 用 PostgreSQL パッケージを使用しているものとします) では、Soft LimitHard Limitの変更については、/etc/init.d/postgresql (SysV) または/lib/systemd/system/postgresql*.service (systemd) を編集するのが簡単な方法です。

まず、SysV Ubuntu を扱います。ulimit -H -n 262144ulimit -n 131072/etc/init.d/postgresqlに追加します。

コード
...
case "$1" in
    start|stop|restart|reload)
        if [ "$1" = "start" ]; then
            create_socket_directory
        fi
    if [ -z "`pg_lsclusters -h`" ]; then
        log_warning_msg 'No PostgreSQL clusters exist; see "man pg_createcluster"'
        exit 0
    fi

    ulimit -H -n 262144
    ulimit -n 131072

    for v in $versions; do
        $1 $v || EXIT=$?
    done
    exit ${EXIT:-0}
        ;;
    status)
...

Ubuntu の systemd を扱います。LimitNOFILE=131072/lib/systemd/system/postgresql*.serviceの各ファイルの[Service]セクション内に記述します。

コード
...
[Service]

LimitNOFILE=131072

...

[Install]
WantedBy=multi-user.target
...

必要なシステムの変更を行った後、デーモンのリロードを必ず行ってください。

コード
systemctl daemon-reload