PostGIS out-dbラスターの使用に制限はありますか?


8

大きなラスターをPostGIS 2.0データベースにインポートして、いくつかの障害にぶつかっています。

最初にraster2pgsqlを使用してラスターをインポートしようとすると、次のエラーが表示されます 。rt_band_set_pixel_line:座標が範囲外です

見つけたら、このページを、そしてgdalinfoを使用して、私は、ラスタが65535 X 65535の最大許容サイズを超えたことがわかりました。

gdalinfoの出力:

$ gdalinfo ari100.tif
ドライバー:GTiff / GeoTIFF
...サイズは42971、77138
座標系は:
GEOGCS ["WGS 84"、
...
AUTHORITY ["EPSG"、 "4326"]] Origin =(152.741676637167842、-26.215302802012008 )
ピクセルサイズ=(0.000009239757419、-0.000009239757419)
メタデータ:
AREA_OR_POINT =エリア
イメージ構造メタデータ:
INTERLEAVE = BAND
コーナー座標:
左上(152.7416766、-26.2153028)(152d44'30.04 "E、26d12'55.09" S)
左下(152.7416766 、-26.9280392)(152d44'30.04 "E、26d55'40.94" S)
右上(153.1387183、-26.2153028)(153d 8'19.39 "E、26d12'55。09 "S)
右下(153.1387183、-26.9280392)(153d 8'19.39 "E、26d55'40.94" S)
センター(152.9401974、-26.5716710)(152d56'24.71 "E、26d34'18.02" S)
バンド1ブロック= 42971x1タイプ=フロート32 、ColorInterp = Gray
...

そのため、raster2pgsqlで-Rフラグを使用してout-db機能を使用することにしました。

ドキュメントから:ラスタをファイルシステム(out-db)ラスタとして登録します。 ラスタのメタデータとラスタへのパスの場所のみがデータベースに保存されます(ピクセルではありません)。

次のコマンドを使用してラスターをインポートしました。

raster2pgsql /gis/Flood/ari100.tif -R | psql -U username database

しかし、私がクエリを試したとき:

SELECT ST_Value(rast, ST_PointFromText('POINT(152.9632 -26.4878)')) FROM ari100

次のエラーが発生します。

NOTICE:  Attempting to get pixel value with out of range raster coordinates: (23975, 29491)  
CONTEXT:  PL/pgSQL function "st_value" line 13 at RETURN  

ただし、GDAL(Pythonを使用)を使用して、このスクリプトを直接使用してラスターをクエリすると、

python val_at_coord.py 152.9632 -26.4878

値を正しく取得できます。

データベースでラスターの範囲を見つけることにしました。

SELECT ST_Height(rast) As rastheight, ST_Width(rast) As rastwidth from ari100;

rastheight | rastwidth  
11602      | 42971  

高さが完全に正しくありません(77138である必要があります)。

だから私の質問は:(raster2pgsqlを使用して)何か間違ったことをしたのですか、それともPostGISでout-dbラスターを使用するのに制限がありますか?

ありがとう


4
ただのメモ:77138 = 65536 + 11602なので、うまくオーバーフローしたように見えます。
lynxlynxlynx 2012

回答:


8

あなたは間違いなくあなたのラスターをタイルにしたいと思うでしょう。PostGISラスタータイプに許可される最大の幅x高さは、ラスターがin-dbであるかout-dbであるかに関係なく、65535 x 65535です。ラスターをタイリングするもう1つの理由(これはあなたのケースでは当てはまらないかもしれません)は、PostgreSQLで許可されている最大フィールドサイズが1 GBであることです[1]。

最適なタイルサイズについては、2つのことしか提案できません。

  1. 100 x 100以下のタイルサイズが最適です。小さいほど高速ですが、より多くのストレージ領域を消費します。

  2. 可能であれば、ラスターの寸法から完全に割り切れるタイルサイズを見つけます。したがって、42971 x 77138のラスターの場合、100 x 100以下のタイルサイズは正常に機能しません。これらの状況では、私は通常、その近所に50 x 50か何かを行きます。

-ボボリー

[1] http://www.postgresql.org/about/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.