このトピックでは、ST_AsMVTEx関数について説明します。 この関数は、ST_AsMVT関数と同じ働きをする。 ST_AsMVT関数と比較して、ST_AsMVTEx関数は、異なるベクトル要素間の関係に基づいて、表示にほとんど影響を与えないベクトル要素をフィルタリングします。 これは、mapboxベクトルタイル (MVT) のサイズを縮小し、視覚化効率を向上させるのに役立ちます。 scale_factorパラメータは、フィルタリング効果を制御するために追加される。 mvt_size_limitパラメータは、MVTが含むことができるベクトル要素の最大数を制限するために追加されます。
構文
bytea ST_AsMVTEx(anyelement row);
bytea ST_AsMVTEx(anyelement row, int4 scale_factor);
bytea ST_AsMVTEx(anyelement row, int4 scale_factor, int4 mvt_size_limit);
bytea ST_AsMVTEx(anyelement row, int4 scale_factor, int4 mvt_size_limit, text name);
bytea ST_AsMVTEx(anyelement row, int4 scale_factor, int4 mvt_size_limit, text name, int4 extent);
bytea ST_AsMVTEx(anyelement row, int4 scale_factor, int4 mvt_size_limit, text name, int4 extent, text geom_name);
bytea ST_AsMVTEx(anyelement row, int4 scale_factor, int4 mvt_size_limit, text name, int4 extent, text geom_name, text feature_id_name);戻り値
タイルレイヤに対応するバイナリMVT表現を返します。 タイルの内容は、行のセットによって決まります。
Parameters
パラメーター | 説明 |
row | 少なくとも1つのジオメトリ列を持つ行データ。 |
scale_factor | フィルタリング効果。 値が大きいほど、より多くのベクトル要素がフィルタリングされ、MVTは小さくなります。 有効値: 1 to extent-1。 デフォルト値は 1 です。 |
mvt_size_limit | MVTに含めることができるベクトル要素の最大数。 制限を超えるベクトル要素は破棄されます。 デフォルト値は最大INTEGER値で、2147483647です。 |
name | レイヤーの名前。 デフォルト値は文字列 |
extent | 仕様で定義されている画面空間のタイル範囲。 デフォルト値: 4096 |
geom_name | 行データ内のジオメトリ列の名前。 デフォルト値は最初のジオメトリ列です。 |
feature_id_name | 行データのFeature ID列の名前。 Feature IDはNULLまたは負の値に設定されていません。 名前と、smallint、integer、およびbigintを含む有効な型と一致する最初の列が機能IDとして使用されます。 後続の列はすべてプロパティとして追加されます。 JSONプロパティはサポートされていません。 |
説明
この関数は、ST_AsMVT関数と同じ働きをする。 ST_AsMVT関数と比較して、ST_AsMVTEx関数は、表示にほとんど影響を与えないベクトル要素を除外して、MVTのサイズを縮小し、視覚化効率を向上させます。
scale_factorパラメーターは、フィルター効果を制御します。scale_factorの値は1からextent-1の範囲です。 値が大きいほど、より多くのベクトル要素がフィルタリングされます。mvt_size_limitパラメーターは、MVTに含めることができるベクトル要素の最大数を指定します。 フィルタリング後にベクトル要素の数がmvt_size_limit値より大きい場合、システムは余分なベクトル要素をランダムに選択して破棄します。extentパラメーターの値が非常に大きい場合、システムのパフォーマンスに影響します。この関数は、大きな平面で構成されるデータセットには適していません。
例
-- Create a vector data table and insert one plane, one line, and 9998 points.
CREATE TABLE example_table(id integer, geom Geometry);
INSERT INTO example_table(id, geom) VALUES
(1, ST_MakeEnvelope(150, 75, 170, 80, 4326));
INSERT INTO example_table(id, geom) VALUES
(2, ST_GeomFromText('LINESTRING(-160 -70, 160 -70)', 4326));
INSERT INTO example_table(id, geom)
SELECT i,
ST_SetSRID(ST_MakePoint((random() * 20) + 150, (random() * 10) + 70), 4326)
FROM generate_series(3, 10000) i;
-- Set scale_factor to 1.
WITH mvtgeom AS
(
SELECT ST_AsMVTGeom(geom, ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)) FROM example_table
WHERE geom && ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)
)
SELECT length(ST_AsMVTEx(mvtgeom.*, 1)) FROM mvtgeom;
length
-------
54237
(1 row)
-- Set scale_factor to 4.
WITH mvtgeom AS
(
SELECT ST_AsMVTGeom(geom, ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)) FROM example_table
WHERE geom && ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)
)
SELECT length(ST_AsMVTEx(mvtgeom.*, 4)) FROM mvtgeom;
length
-------
39211
(1 row)
-- Set scale_factor to 4, and the maximum number of vector elements that the MVT can contain to 100.
WITH mvtgeom AS
(
SELECT ST_AsMVTGeom(geom, ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)) FROM example_table
WHERE geom && ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)
)
SELECT length(ST_AsMVTEx(mvtgeom.*, 4, 100)) FROM mvtgeom;
length
-------
1117
(1 row)
-- Set scale_factor to 4, set the maximum number of vector elements that the MVT can contain to 100, set the tile resolution to 10000 × 10000, and set the layer name to layer_name.
WITH mvtgeom AS
(
SELECT ST_AsMVTGeom(geom, ST_Transform(ST_TileEnvelope(1, 1, 0), 4326), 10000) FROM example_table
WHERE geom && ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)
)
SELECT length(ST_AsMVTEx(mvtgeom.*, 4, 100, 'layer_name', 10000)) FROM mvtgeom;
length
-------
1220
(1 row)
-- Set scale_factor to 4, set the maximum number of vector elements that the MVT can contain to 100, set the tile resolution to 10000 × 10000, and set the layer name to layer_name.
-- Set the geometry column name to geom_field and the ID column name to id_field.
WITH mvtgeom AS
(
SELECT ST_AsMVTGeom(geom, ST_Transform(ST_TileEnvelope(1, 1, 0), 4326), 10000) AS geom_field, id AS id_field FROM example_table
WHERE geom && ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)
)
SELECT length(ST_AsMVTEx(mvtgeom.*, 4, 100, 'layer_name', 10000, 'geom_field', 'id_field')) FROM mvtgeom;
length
-------
1520
(1 row)