このトピックでは、ST_AsMVTEx関数について説明します。 この関数は、ST_AsMVT関数と同じ働きをする。 ST_AsMVT関数と比較して、ST_AsMVTEx関数は、異なるベクトル要素間の関係に基づいて、表示にほとんど影響を与えないベクトル要素をフィルタリングします。 これは、mapboxベクトルタイル (MVT) のサイズを縮小し、視覚化効率を向上させるのに役立ちます。 scale_factorパラメータは、フィルタリング効果を制御するために追加される。 mvt_size_limitパラメータは、MVTが含むことができるベクトル要素の最大数を制限するために追加されます。
構文
bytea ST_AsMVTEx(anyelement行);
bytea ST_AsMVTEx(anyelement行、int4 scale_factor);
bytea ST_AsMVTEx(anyelement行、int4 scale_factor、int4 mvt_size_limit);
bytea ST_AsMVTEx(anyelement行、int4 scale_factor、int4 mvt_size_limit、テキスト名);
bytea ST_AsMVTEx(anyelement行、int4 scale_factor、int4 mvt_size_limit、テキスト名、int4エクステント);
bytea ST_AsMVTEx(anyelement行、int4 scale_factor、int4 mvt_size_limit、テキスト名、int4エクステント、テキストgeom_name);
bytea ST_AsMVTEx(anyelement行、int4 scale_factor、int4 mvt_size_limit、テキスト名、int4エクステント、テキストgeom_name、テキスト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
パラメーターの値が非常に大きい場合、システムのパフォーマンスに影響します。この関数は、大きな平面で構成されるデータセットには適していません。
例
-ベクトルデータテーブルを作成し、1つの平面、1つの線、および9998の点を挿入します。
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((ランダム () * 20) + 150, (ランダム () * 10) + 70), 4326)
FROM generate_series(3, 10000) i;
-- scale_factorを1に設定します。
mvtgeomとAS
(
SELECT ST_AsMVTGeom(geom, ST_Transform(ST_TileEnvelope(1, 1, 0), 4326))
WHERE geom && ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)
)
SELECT長さ (ST_AsMVTEx(mvtgeom.*, 1)) mvtgeomから;
長さ
-------
54237
(1行)
-- scale_factorを4に設定します。
mvtgeomとAS
(
SELECT ST_AsMVTGeom(geom, ST_Transform(ST_TileEnvelope(1, 1, 0), 4326))
WHERE geom && ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)
)
SELECT長さ (ST_AsMVTEx(mvtgeom.*, 4)) mvtgeomから;
長さ
-------
39211
(1行)
-- scale_factorを4に設定し、MVTが含むことができるベクトル要素の最大数を100に設定します。
mvtgeomとAS
(
SELECT ST_AsMVTGeom(geom, ST_Transform(ST_TileEnvelope(1, 1, 0), 4326))
WHERE geom && ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)
)
SELECT長さ (ST_AsMVTEx(mvtgeom.*, 4, 100)) mvtgeomから;
長さ
-------
1117
(1行)
-- scale_factorを4に設定し、MVTに含めることができるベクトル要素の最大数を100に設定し、タイルの解像度を10000 × 10000に設定し、レイヤー名をlayer_nameに設定します。
mvtgeomとAS
(
SELECT ST_AsMVTGeom(geom, ST_Transform(ST_TileEnvelope(1, 1, 0), 4326), 10000)
WHERE geom && ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)
)
SELECT length(ST_AsMVTEx(mvtgeom.*, 4, 100, 'layer_name', 10000)) mvtgeomから;
長さ
-------
1220
(1行)
-- scale_factorを4に設定し、MVTに含めることができるベクトル要素の最大数を100に設定し、タイルの解像度を10000 × 10000に設定し、レイヤー名をlayer_nameに設定します。
-ジオメトリ列名をgeom_fieldに、ID列名をid_fieldに設定します。
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の長さ (ST_AsMVTEx(mvtgeom.*, 4, 100, 'layer_name', 10000, 'geom_field', 'id_field')) mvtgeomから;
長さ
-------
1520
(1行)