すべてのプロダクト
Search
ドキュメントセンター

:ST_UpdatePyramid

最終更新日:Mar 19, 2024

このトピックでは、ST_UpdatePyramid関数について説明します。 この関数は、いくつかのベクトルピラミッドを更新します。 更新範囲はupdate_extentパラメーターで指定します。 このパラメータの値はBox2Dでラベル付けされています。 この関数は、元のベクトルテーブルが変更されたときに呼び出すことができます。 たとえば、テーブルにデータが追加または削除された場合、座標の更新範囲をupdate_extentパラメーターに渡すことで、ST_UpdatePyramid関数を呼び出すことができます。 この方法で、更新結果を表示できます。

構文

boolean ST_UpdatePyramid(cstringテーブル、cstring geom_field、cstring id_field、BOX2D update_extent、cstringルール) ;

パラメーター

パラメーター

説明

テーブル

ベクトルテーブルの名前。

geom_field

ベクトルテーブルのGeometry属性を持つ列の名前。

id_field

ベクトルテーブルのID属性を持つ列の名前。

update_extent

更新する座標の範囲。 範囲はBox2D形式です。 EPSGフォーマットの座標は、ルールパラメータによって指定される。 デフォルト値: 4326

例えば、Box2D(ST_GeomFromText('LINESTRING(-120 -80, -100 -50)')) は、-120 <経度 < -100, -80 <緯度 < -50の更新範囲を指定する。

ルール

いくつかのベクトルピラミッドを更新するために使用されるルール。 このパラメーターの値はJSON形式で、updateBoxScaleフィールドとsourceSRSフィールドで構成されます。

  • updateBoxScaleフィールドは、更新が渡される最上層を指定する。 たとえば、updateBoxScaleが2に設定され、指定された更新範囲の最大幅が100の場合、ベクトルピラミッドのレベル1のタイルのみが更新されます。 その理由は、レベル1タイルの最大幅を100で割ったものが2未満であり、レベル0タイルの最大幅を100で割ったものが2より大きいためです。 この例では、グローバル範囲はグローバル経度および緯度を含む。 updateBoxScaleフィールドのデフォルト値は10です。

  • sourceSRSフィールドは、EPSG形式のupdate_extentパラメーターの値を指定します。 デフォルト値: 4326

説明

UpdateBoxScaleフィールドは、更新の精度と効率のバランスを取るために使用されます。

  • updateBoxScaleが小さい値に設定されている場合、少数のタイルが更新されますが、一部のタイルは更新の結果を反映できません。

  • updateBoxScaleを大きな値に設定すると、多数のタイルが更新されますが、更新結果はより多くのタイルに反映されます。 たとえば、updateBoxScaleが100000に設定され、maxLevelが16の場合、更新は下からルートノードに渡されます。

-- 他のテーブルと同じ名前のテーブルを削除します。
ドロップテーブルが存在する場合test_update_line;

-- テストテーブルを作成します。
CREATE TABLE test_update_line(id int primary key, geom geometry(LineString, 4326));

-テストテーブルにデータを挿入します。
INSERT INTO test_update_line(id, geom)
SELECT i,
    ST_GeomFromText (フォーマット ('LINESTRING (% s % s,% s % s)') 、
                        (floor(i/100)* 0.01 + 10) 、(floor(i % 100)* 0.01 + 10) 、
                        (floor(i/100 + 1)* 0.01 + 10) 、(floor(i % 100 + 1)* 0.01 + 10) 、4326)
FROM generate_series(1, 10000) i;

-geom列のインデックスを作成します。
gist(geom) を使用してtest_update_lineでインデックスを作成します。-ベクトルピラミッドを作成して、データの表示を高速化します。 さらに、Raster拡張機能がインストールされている場合は、競合を避けるために各パラメーターに::cstringを追加する必要があります。 
SELECT ST_BuildPyramid('test_update_line ', 'geom', 'id', '{"parallel":16}');

-テストデータを挿入します。
INSERT INTO test_update_line(id, geom)
SELECT i,
    ST_GeomFromText (
    フォーマット ('LINESTRING (% s % s,% s % s)',
          (フロア (i/100)* 0.01-10) 、(フロア (i % 100)* 0.01-10) 、
          (floor(i/100 + 1)* 0.01 + 10) 、(floor(i % 100 + 1)* 0.01 + 10)) 、
          4326)
  FROM generate_series(10001、15000) i;
  
-- ベクトルピラミッドの部分データを更新します。
SELECT ST_UpdatePyramid('test_update_line ', 'geom', 'id', Box2D(ST_GeomFromText('LINESTRING(-20-20,20)'))), '{"updateBoxScale":10}';