PostGISに大きなラスターを保存し、QGISで視覚化するとパフォーマンスが低下する


23

私の質問は、PostgreSQL、PostGIS、QGIS、およびGDALなど、いくつかのソフトウェアツールを組み合わせて使用​​およびパフォーマンスすることに関するものです。

私は、ArcGIS、Python、Rの長年のユーザーであり、無料のオープンソースGISエコシステムとLinuxへの多様化にも関心があります。最近、QGIS(ver 2.8)をPostgreSQL(ver 9.4)およびPostGIS(ver 2.1)と一緒に使用することに非常に興味があり、Windows 8.1 x64を搭載したコンピューターにコンピューターにソフトウェアをインストールしました(コンピューターの仕様:ThinkPad 2.1GHzコア2、8GB RAM、および240GB SSDを搭載したX200)。空間データ(〜100GB相当)の管理方法を学んだら、このマシンでUbuntuを実行したいと思います。

現時点では、シェープファイルとラスターを確実に保存および取得しようとしています。これまでのところ、シェープファイルをPostGISに読み込むことに成功していますが、ラスターはより問題が多いことが判明しています。小さなgeoTIFFおよびGRIDファイルの単一およびバッチインポートを正常に完了しましたが、大きなラスター(たとえば、ディスク上のサイズが156MBの15619x14655セルIMGまたはTIFFファイル)がPostGISにロードされるまでに時間がかかります。空間インデックスを構築し、これらのパラメーターを使用してタイルによってラスターを読み込むために、raster2pgsqlツールを読んで構成しました。

raster2pgsql -s 3161 -C -I D:\PostGIS_data\dem.img -t auto raster.dem | psql -h localhost -U postgres -p 5432 -d postgres

インポートのパフォーマンスは依然として非常に低く、ハードウェアは問題ではありません。QGISでのPostGISラスターの視覚化はさらに悪く、せいぜい小さなラスターをゆっくりロードするか、完全にフリーズします。私が述べたような大きなラスターは、QGISで視覚化することは不可能です。ドキュメントとフォーラムの議論から、この欠点はQGIS自体ではなく、GDALのPostGISラスタードライバーによるものと思われます。フォーラムでの議論ではこの問題について簡単に言及しており、ラスタをPostGISに保存すべきではないと示唆する人もいます(ラスタをスムーズに処理できない空間データベースのポイントは何ですか?)。それでも、私は日常的にESRIのファイルジオデータベースを使用して、非常に大きな(〜70GB)ラスターをすばやく簡単に保存、視覚化、分析し、ArcGIS 10.1はそのような日常的な操作によってフリーズまたはスローダウンすることはありません。

ここで不足しているもの、対処していないボトルネックはありますか?PostGISのパフォーマンス上の利点を実現するために、PostgreSQLをチューニングする必要がありますか?探してコンパイルする必要があるGDALのバージョンがありませんか?特に、QGISでのシェープファイルとラスターのPostGISパフォーマンスと視覚化を改善するにはどうすればよいですか?Linuxターミナルを使用して、包括的かつ迅速な空間データ管理の栄光を享受するにはどうすればよいですか?この問題に関する助けを歓迎します!


Duncan Golicherがこのガイドに従いました:https ://duncanjg.wordpress.com/2012/11/20/the-basics-of-postgis-raster/

私は元々自動設定のタイルを使用していましたが、タイルを行ごとに100x100セルにリセットし、ガイドに示されているようにピラミッドを含めました。

raster2pgsql -s 3161 -d -C -I -M -l 4 D:\PostGIS_data\dem.img -t 100x100 raster.dem100 | psql -h localhost -U postgres -p 5432 -d postgres

870MB IMGラスターを適切なタイミングで正常にインポートし、アプリケーションを遅くしたりクラッシュさせたりすることなく、QGISで表示することができました。レンダリング時間は思ったほど簡単ではありませんが、許容範囲内です。適切に使用するために、-lパラメーターについて詳しく説明します。

ちなみに、dem.imgファイルをdem100テーブルとしてインポートすると、「o_4_dem100」という別のラスタテーブルが作成されました。QGISでレイヤーとしてインポートすると、201から524の範囲の値を持ち、dem100レイヤーの範囲は36から524の範囲になります。より低い解像度に集約された結果としての値の範囲?


不十分なハードウェアが問題だとは思わない。ここに私がこれまでに見つけたものの簡単な要約があります。

GDALのPostGISラスタードライバーには、過去のパフォーマンスの問題がありますこちらも参照)。これらの問題は2012年に指摘されましたが、QGIS 2.8で見つかったGDAL 1.11.2にはまだこの問題があるのでしょうか。ラスターの視覚化と保存にQGISとPostGISを使用している他のユーザーはいますか?

関連する可能性のあるメモでは、QGISでPostGIS属性テーブルを〜4.7mレコードのテーブルで開くときにパフォーマンスの問題が発生しました。そのスレッドでいくつかの提案を行った後、問題を修正せずに、最終的にQGISにバグレポートを提出しましたが、最終的には閉じられ、次の同様のバグレポートにリンクされました。バグレポートは閉じられていますが、修正されていないようです...

これまでの私の努力をまとめると:

  • 空間データ用にPostgreSQLサーバーを最適化しました。
  • ジオメトリテーブルの空間インデックスを作成し、VACUUMを実行しました。
  • 大きな属性テーブル(約4.7mレコード)を開くためのQGISの動作は、瞬時に表示するためのサブセットを返すのではなく、すべてのレコードを読み取ろうとするようです。これはパフォーマンスの低下につながります。
  • 大規模なPostGISジオメトリテーブルのレンダリングのパフォーマンスは問題ではないようです。

  • raster2pgsqlを使用すると、PostGISでラスターにインデックスが付けられ、タイル化され、ピラミッドを持つラスターテーブルとしてインポートされました。

  • 妥当なサイズのラスターは、PostGISへのインポートが非常に遅く、QGISで開いたり移動したりするのはもちろんです。

また、大きなラスターをインポートしたり、PostGISで大きな属性テーブルを開いたりすると、raster2pgsqlとqgis-binのメモリ消費量が1GBを超えることにも注意してください。@Michaelと@Paulが私の最初の質問への回答で言及したように、PostGISはラスターの格納に利点があるとしても、それをもたらすものではないようです。ただし、その時点で、特にESRI fileGDBがラスター属性、モザイクデータセット、およびジオデータベースによって促進されるその他のラスター操作を有効にしている場合、GISニーズに合わせてQGIS + PostGISを実行する理由を疑問視します。そのため、何かが本当に不足しているか、QGISとPostGISがGISのニーズを満たしていない可能性があります。後者は信じがたいと思う。


ラスター PostGISにある必要がありますか?これからどのような利点/追加機能を獲得したいですか?PostGisベクターは許容範囲内であり、マルチユーザー編集が可能であることがわかりましたが、PostGisラスターはファイルベース(サーバーに格納された)ラスターに比べて実質的な利点はありませんでした。いい質問です。...私は、私の評価では見逃しているいくつかの利点があることは十分に可能である
マイケル・スティムソン

PostGISラスターにより、ラスター計算が高速化され、ラスター/ベクター操作のパフォーマンスが向上したと考えました。これは、空間DBの利点に加えて、信頼性、アクセス可能性、バックアップ機能、よりコンパクトなストレージなどです。いずれの場合でも、ファイル/タイルアプローチでは、検索機能、事前に構築されたピラミッド、タイル、ラスターの使用方法と視覚化方法を改善するその他の機能。
mbcaradima

ラスタ計算でPostGISラスタが高速であるというメトリックはありません。いずれの場合でも、240GB SSD(適切な選択BTW、RAIDに比べてわずかなコスト/労力)で、ラスタを非常にすばやく埋めることができます。... 8ビットのECW / JP2またはLZW / Deflate圧縮を使用したGeoTIFFは、これらのボックスのほとんど、事前に構築されたピラミッド、タイリング(VRT経由)、ファイルとしてのバックアップなど...唯一の利点は検索機能です。私はトピックから少し外れていることを理解していますが、PostGISラスタが期待どおりに動作しない場合は、表示のためにファイルラスタを使用しないのはなぜですか?
マイケルスティムソン

3
PostGISラスターが何より速いと誰が言ったことがありますか?より便利に(便利なSQLアクセスAPI)、分析(同じバケット内のラスターとベクトル)には便利ですが、より高速になりますか?決して。
ポールラムジー

1
私はPostGIS(PostGIS in Action、第2版)の本を扱っていますが、空間DBにシェープファイルを保存する利点はラスターにも及ぶと考えるのは自然なことのように思えました。もちろん、データモデルが異なることを考えると、この仮定は純粋に直感的であることがわかります。それでも、ラスターは一般にArcGISを使用してジオデータベースに格納され、ピラミッドの構築、ジオプロセシングの高速化、モザイクの構築を可能にします。オープンソースソフトウェアを使用したワークフローでは、GISユーザーはどのようにしてラスターを操作することになっていますか?ところで、私は正式に顔を打ちます。
mbcaradima

回答:


9

QGISで大きなラスターを表示する場合は、ファイルシステムのtifイメージまたはPostgisに登録されたイメージのいずれかのために、ピラミッドを構築する必要があります。

ファイルシステムまたはPostgisの大きなラスター間でのQGISレンダリングのパフォーマンスの違いはごくわずかです。ユーザーは違いに気付かないでしょう。しかし、もしそうである場合のみ-オプションでピラミッドを構築します-l

-lオプションを指定せずにイメージを単純にインポートした場合、または-l 4 それだけでは機能しません

たとえば、を使用する場合、-l 2,4,8,16下のレイヤーのように、4つのレベルのピラミッドが作成されます。

-l 2,4,8,16で生成されたピラミッド

より優れたユーザーエクスペリエンスを実現するには、などのピラミッドレベルを追加する必要があります-l 2,4,8,16,32,64,128,256。これにより、8レベルのピラミッドが作成されます。

ここに画像の説明を入力してください

要約すると、この質問に対する答えは、オプション-lを使用してラスタをインポートし、ファイルシステム上の同じラスタに使用するのと同じ数のピラミッドレベルを使用することです。

例えば:

raster2pgsql -s 3161 -d -C -I -M -l 2,4,8,16,32,64,128,256 D:\PostGIS_data\dem.img -t 100x100 raster.dem100 | psql -h localhost -U postgres -p 5432 -d postgres

5

PostGISからQGISでラスターをレンダリングするのとまったく同じ問題があります(最近の質問を参照)。この投稿は役に立ち、次の改善されたラスターレンダリングを少し増やしました。

shared_buffers = 5000MB work_mem = 100MB maintenance_work_mem = 100MB

しかし、そうは言っても、QGISでのPostGISラスターのパフォーマンスはそれほど良くないということに完全に同意します。私は、VRTとしては負荷が大きいが、PostGISでは基本的に使用できない608の圧縮ジオティーフを扱っています。dbaseサーバーのパフォーマンスを向上させようとしますが、それを超えてもあまり役に立ちません。私も、組織内でラスタを提供するためにファイルシステムに頼らなければならない場合があります。


コメントありがとう、クリフ。変更内容の一部を適用しましたが、主要なパフォーマンスの改善点を報告します。全体として、PostGISラスターの視覚化と属性テーブルのロード/クエリに関して、QGISのパフォーマンスは期待はずれだと言わざるを得ません。PostGISのラスターパフォーマンスも期待はずれです。ファイルジオデータベースにこれらの問題はないので、何が問題なのでしょうか。
mbcaradima

1
まさに私の感情。私はこれを実現しようとして1週間を費やしましたが、単に実行できませんでした。現在、10個のプロセッサと10GBのRAMを使用してVM(Ubuntu Server)をテストしています。それでもまだ遅い場合は、何か他のことを間違っているはずです。また、レンダリング速度が遅いためにQGISのWMSレイヤーが基本的に使用できない理由もわかりません。両方が同じボートにいるので、これについてもっと接続する必要があります。
クリフ

VRTとしての負荷が大きい場合、なぜそこで停止しなかったのですか?この素晴らしいラスタージャーニーに期待することは何ですか?
ポールラムジー

これに対する私の答えは、Paul氏がOPが次の投稿で述べたこととまったく同じだと思います。 、およびジオデータベースによって促進されるその他のラスター操作。したがって、何かが本当に足りないか、QGISとPostGISがGISのニーズを満たしていない可能性があります。後者は信じがたいと思います。」
クリフ

1
さらに、私が行う分析の約70%はラスターに関するものであり、QGISを介して組織に提供したいデータの約40%はラスターデータです。ユーザーが1つの接続を設定し、組織のデータベース全体にアクセスできるように、すべてのラスターデータとベクターデータを1つのデータベースに保持するのが理にかなっています。代わりに、dbaseの資格情報とファイル共有の資格情報を作成する必要があります。代わりに、QGISを廃棄し、GeoserverでWebアプリケーションを構築することを真剣に検討しています(ps:関心のある人と常にこれに協力してくれます)。
クリフ

4

それがあなたのケースであったかどうかはわかり-Iませんが、データの追加と一緒に使用すべきではないことがわかりました-a

多くのTIFファイルをDBにインポートし、-I実際にインデックスを再作成し、analyse各ファイルのテーブルで実行します。これには10倍の時間がかかります。

-I-pオプションを使用して、テーブルを作成するときにのみ使用してください。

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