PostGIS_DropBBox — ジオメトリからバウンディングボックスのキャッシュを削除します。
geometry PostGIS_DropBBox(geometry geomA);
ジオメトリからバウンディングボックスのキャッシュを削除します。これによりジオメトリのサイズは小さくなりますが、バウンディングボックスを基にした検索が遅くなります。破損したバウンディングボックスを削除する際にも使われます。ST_Intersectsや他の関係関数がジオメトリを正しくtrueを返すべきジオメトリを無視すると、それが、バウンディングボックスのキャッシュが破損したことを示す合図です。
|
|
|
バウンディングボックスは自動的にジオメトリに追加されるので、通常はこの関数は不要ですが、生成されたバウンディングボックスが何らかの理由で破損するか、バウンディングボックスを欠く古い版をインストールしている場合に使われます。古いものを削除し、再追加する必要があります。この種類の破損は8.3-8.3.6で観察されました。ジオメトリが変更された際に常にキャッシュされたバウンディングボックスが再計算されておらず、ダンプと再読み込みを行わずに新しい版へのアップグレードを行うと、既に破損したバウンディングボックスが訂正されないためです。次に示すように手動で収集してバウンディングボックスを再追加するか、ダンプとリロードを使います。 |
このメソッドは曲線ストリングと曲線に対応しています。
この例では、キャッシュとして格納されているバウンディングボックスがおかしい時にキャッシュを削除します。 Box2D を ST_AsBinary に適用することで、新しいボックスを強制的に計算させることができますが、その一方で、テーブル上のジオメトリーの Box2D はキャッシュのボックスを読みます。
UPDATE sometable SET geom = PostGIS_DropBBox(geom) WHERE Not (Box2D(ST_AsBinary(geom)) = Box2D(geom));
UPDATE ...
邪悪なボックスのキャッシュを削除してから必要な時に追加する。
UPDATE sometable SET geom = PostGIS_AddBBox(geom) WHERE Not PostGIS_HasBBOX(geom);
UPDATE ...