35.30 SDO_UTIL.GET_VECTORTILE
書式
SDO_UTIL.GET_VECTORTILE( TABLE_NAME IN VARCHAR2, GEOM_COL_NAME IN VARCHAR2, TILE_X IN NUMBER, TILE_Y IN NUMBER, TILE_ZOOM IN NUMBER, ATT_COL_NAMES IN MDSYS.SDO_STRING_ARRAY DEFAULT NULL, SIMPLE_PREDICATE IN MDSYS.SDO_STRING_ARRAY DEFAULT NULL, LAYER_NAME IN VARCHAR2 DEFAULT 'LAYER', TILE_EXTENT IN NUMBER DEFAULT 4096, GOOGLE_TS IN BOOLEAN DEFAULT TRUE, MAX_FEATURES IN NUMBER DEFAULT 20000, ROWID_FLG IN BOOLEAN DEFAULT FALSE ) RETURN BLOB;
または
SDO_UTIL.GET_VECTORTILE( TABLE_NAME IN VARCHAR2, GEOM_COL_NAME IN VARCHAR2, TILE_X IN NUMBER, TILE_Y_PBF IN VARCHAR2, TILE_ZOOM IN NUMBER, ATT_COL_NAMES IN MDSYS.SDO_STRING_ARRAY DEFAULT NULL, SIMPLE_PREDICATE IN MDSYS.SDO_STRING_ARRAY DEFAULT NULL, LAYER_NAME IN VARCHAR2 DEFAULT 'LAYER', TILE_EXTENT IN NUMBER DEFAULT 4096, GOOGLE_TS IN BOOLEAN DEFAULT TRUE, MAX_FEATURES IN NUMBER DEFAULT 20000, ROWID_FLG IN BOOLEAN DEFAULT FALSE ) RETURN BLOB;
または
FUNCTION GET_VECTORTILE( CUR IN SYS_REFCURSOR, TILE_X IN NUMBER, TILE_Y IN NUMBER, TILE_ZOOM IN NUMBER, LAYER_NAME IN VARCHAR2 DEFAULT 'LAYER', TILE_EXTENT IN NUMBER DEFAULT 4096, GOOGLE_TS IN BOOLEAN DEFAULT TRUE, MAX_FEATURES IN NUMBER DEFAULT 20000 ) RETURN BLOB;
説明
Mapbox Vector Tile (MVT)を表すBLOBを生成します。
パラメータ
- table_name
-
名前付きジオメトリ列および属性列リストで名前が付いたすべての列を含む有効な表またはビューの名前。
表(またはビュー)に対して
READ
アクセス権があることを確認してください。必要な権限がない場合、または表が存在しない場合は、例外が発生します。 - geom_col_name
-
table_name
のSDO_GEOMETRY型列またはファンクションベースの空間索引の名前。列が
table_name
に存在しない場合、またはSDO_GEOMETRY型でない場合は、例外が発生します。 - cur
-
APEXアプリケーションで使用されるSQL問合せの
CURSOR
。書式は
CURSOR(<user_SQL_query>)
です。また、SQL問合せについて、次のことに注意してください。
SELECT
句の最初の列は、ジオメトリ列である必要があります。WHERE
句にmask=anyinteract
、min_resolution=' || res || '
およびbypass_point=true
パラメータを指定して、SDO_RELATEをコールする必要があります。WHERE
句には、必要に応じて、SQL問合せの他の述語も含めることができます。min_resolution
パラメータの値は、((40075016.0/(2<tile_zoom>)) * .001)
という式を使用して計算できます。ここで40075016
はズーム・レベル0
のタイルのX
軸およびY
軸に沿ったメートル数を示すデフォルト値、tile_zoom
はリクエストされるタイルのズーム、.001
は変更されない定数です。WHERE
句にSDO_RELATEメソッドのコールが指定されていない場合でも、結果のタイルは同じままになります。ただし、関心のあるジオメトリのみでなく、すべてのジオメトリが処理されるため、タイルの計算コストは大幅に高くなります。- オプションで、ベクター・タイルに必要な分布情報の量に応じて、SQL問合せに
ORDER BY
句およびFETCH FIRST ROWS ONLY
句を指定できます。
CURSOR
がNULL
の場合、または指定された問合せが無効である場合は、例外が発生します。 - tile_x
-
フェッチするタイルの原点のX座標。
このパラメータの有効最小値はゼロです。有効最大値は、指定されたズームに依存し、
max(X) = (2^tile_zoom) - 1
で計算できます。有効範囲外のX座標を指定すると、例外が発生します。 - tile_y
-
フェッチするタイルの原点のY座標(
NUMBER
形式)。このパラメータの有効最小値はゼロです。有効最大値は、指定されたズームに依存し、
max(Y) = (2^tile_zoom) - 1
で計算できます。有効範囲外のY座標を指定すると、例外が発生します。 - tile_y_pbf
-
フェッチするタイルの原点のY座標(
VARCHAR2
形式)。tile_y_pbf
値は、数値とその後の任意のファイル拡張子を指定するVARCHAR2
文字列です。Y縦座標値は、文字列内のファイル拡張子を削除した後に抽出されます。たとえば、文字列値‘23.pbf’
または‘23.XYZ’
を考えてみます。次に、23
がY座標値として抽出され、'.
'の後のすべてが削除され、無視されます。このパラメータの有効最小値はゼロです。有効最大値は、指定されたズームに依存し、
max(Y) = (2^tile_zoom) - 1
で計算できます。有効範囲外のY座標を指定すると、例外が発生します。 - tile_zoom
-
地図の分割に必要なタイルの数を決定します。これらのセグメントは、地図全体を読み取ることなく、より高い解像度で結合できます。
たとえば、ゼロの
tile_zoom
は、詳細がそれほど表示されずに、地図全体が単一のタイルとなります。n
のtile_zoom
は、地図を2^n x 2^n
個のタイル(つまり、X軸に沿ったタイルの数にY軸に沿ったタイルの数を乗算した数)に分割します。たとえば、8
のtile_zoom
では、65,536
個のタイルになります。n
の値が大きいほど、タイル内の詳細度が高くなることを意味します。有効範囲外のパラメータ値では例外が発生することに注意してください。 - att_col_names
-
フィーチャの非空間データを含む属性列名。
これはオプションのパラメータです。たとえば、郡ポリゴンを問い合せる場合、郡名、郡が存在する都道府県、およびその郡の総人口にも関心がある場合があります。これらの列は、
ATT_COL_NAMES => sdo_string_array('COUNTY','STATE','TOTPOP')
のようにSDO_STRING_ARRAY
として指定されます。配列の各項目は、表内(
table_name
)で一意の有効な列名である必要があります。ただし、これらの制限に違反しても、次の理由により致命的ではありません。- 項目名が表内の列で見つからない場合、その項目名は単に無視されます。
- 同じ項目名の複数の列が指定されている場合は、最後の項目値のみが使用されます。
また、配列にリストされている項目値は、Oracleの標準の大/小文字ルールに従っており、
'COUNTY'
、'County'
および'county'
は重複とみなされ、これらはすべて'COUNTY'
に解決されることに注意してください。ただし、'"COUNTY"'
、'"County"'
および'"county"'
は重複とはみなされないため、これら3つはすべて競合することなく表の列名として指定できます。att_col_names
リストに指定される列でサポートされるデータ型(ANSIとOracleの組込みの両方)を次の表に示します。表35-1
att_col_names
リストの列でサポートされるデータ型カテゴリ データ型 文字データ型 CHAR
CHARACTER
CHAR VARYING
CHARACTER VARYING
NATIONAL CHAR
NATIONAL CHARACTER
NATIONAL CHAR VARYING
NATIONAL CHARACTER VARYING
NCHAR
NCHAR VARYING
NVARCHAR2
VARCHAR
VARCHAR2
数値データ型 DEC
DECIMAL
DOUBLE PRECISION
FLOAT
INT
INTEGER
NUMBER
NUMERIC
REAL
SMALLINT
日付と時間 DATE
TIMESTAMP
att_col_names
リストに指定される列でサポートされないデータ型を次に示します。BINARY FLOAT
BINARY DOUBLE
LONG
LONG RAW
RAW
INTERVAL YEAR TO MONTH
INTERVAL DAY TO SECOND
BLOB
CLOB
NCLOB
BFILE
ROWID
UROWID
SDO_GEOMETRY
、SDO_TOPO_GEOMETRY
およびSDO_GEORASTER
を含むユーザー定義のデータ型
ノート:
SDO_GEOMETRY
は引き続き有効であり、実際、ベクター・タイル・リクエストで指定するgeom_col_name
に必要なデータ型です。att_col_names
リストにサポートされていないデータ型の列が1つ以上指定されている場合、それらの列は無視され、タイルは列が要求されなかったかのように返されます。
- simple_predicate
-
述語を形成する3つの要素(オペランド、演算子、値)で構成される書式設定された
SDO_STRING
配列。3つの組を形成する要素については、次の点に注意してください。
- 3つの最初の要素であるオペランドは、表内(
table_name
)の有効な列名である必要があります。列名が有効でない場合は、例外が発生します。 - 3つの要素の2番目は演算子で、次の演算子のみがサポートされています。
=
,!=
,<
,>
,<=
,>=
IS [NOT] NULL
AND
[NOT] LIKE
- 3つの要素の3番目は値で、文字列または数値である必要があります。たとえば、'answer'は文字列として扱われます。一方で、'42'と42は両方とも数値として扱われます。
- 3つの要素が複数ある場合は、
AND
演算子で結合された複数の述語が形成されます。たとえば、次のSIMPLE_PREDICATE
配列があるとします。SIMPLE_PREDICATE => sdo_string_array('STATE', '=', 'WI', 'COUNTY', 'LIKE', 'B*', 'TOTPOP', '>', '50000')
これは、
"STATE"='WI' AND "COUNTY" LIKE 'B*' AND "TOTPOP" > 50000
という述語が形成されます。
- 3つの最初の要素であるオペランドは、表内(
- layer_name
-
ベクター・タイルのレイヤーの名前。
これはオプションのパラメータです。ベクター・タイルでは、デフォルトの
'LAYER'
値を持つ単一のレイヤーのみがサポートされます。 - tile_extent
-
タイルの幅と高さを表す整数座標。
これはオプションのパラメータです。デフォルト値の
4096
は、ベクター・タイルの高さが4096
単位で、幅が4096
単位であることを示します。これらの単位の実際のサイズは、タイルのズーム・レベルによって異なります。タイル内の2つの座標間の距離は、ズーム・レベル0のほうがズーム・レベル12よりもはるかに大きくなります。標準以外のタイル処理方法を使用する場合のみ、デフォルトのパラメータ値を変更することをお薦めします。 - google_ts
-
Googleタイル処理方法が使用されているかどうかを示すブール値。
これはオプションのパラメータです。デフォルト値は
TRUE
で、これはGOOGLEタイル処理方法を示します。タイル住所の読取り時には、次の2つのタイル処理方法がサポートされています。
- GOOGLE (デフォルト): このタイル処理方法では、タイルの原点(X,Y)が北西の角になります。X座標はタイルが西から東に読み取られるにつれて増加します。Y座標はタイルが北から南に読み取られるにつれて増加します。
- TMS: このタイル処理方法では、タイルの原点(X,Y)が南西の角になります。X座標はタイルが西から東に読み取られるにつれて増加しますが、Y座標はタイルが南から北に読み取られるにつれて増加します
- max_features
-
レイヤーに含まれるフィーチャの最大数。
これはオプションのパラメータであり、デフォルト値は20000です。
ベクター・タイルはレイヤーで構成されます。レイヤーはフィーチャで構成されます。フィーチャは、タイル・エンベロープと相互作用するジオメトリおよびその属性列です。州全体または国全体を覆う大規模なタイル・エンベロープの場合、建物の数とその属性は非常に多くなる可能性があります。過剰な数のフィーチャの処理は、CPUとメモリーの両方でリソースを大量に消費する可能性があります。
したがって、このパラメータを使用すると、レイヤーに含めるフィーチャの最大数を制御できます。
- rowid_flg
-
ROWID
を属性列として取得するかどうかを示すブール値。これはオプションのパラメータであり、デフォルト値は
FALSE
です。FALSE
の場合、ROWID
はタイル・フィーチャに列属性として含まれません。TRUE
の場合は、ROWID
がタイル・フィーチャに列属性として含まれます。詳細は、「使用上のノート」を参照してください。
使用上のノート
SDO_UTIL.GET_VECTORTILEファンクションは、次の3つの書式をサポートしています(項の先頭を参照してください)。
- 最初の書式では、特定のズーム・レベルでX座標とY座標(両方とも
NUMBER
形式)を入力として受け取り、指定されたタイル住所によって定義されたタイル・エンベロープと相互作用するすべてのフィーチャを含むBLOBを返します。 - 2番目の書式では、特定のズーム・レベルでX座標(
NUMBER
形式)と、.PBF
接尾辞が付いたY座標(VARCHAR2
形式)を入力として受け取り、BLOBベクター・タイル・データを返します。 - 3番目の書式は、SQL問合せを使用したベクター・タイルの生成に適用されます。ベクター・タイルの作成に必要な行をフェッチするには、カーソル入力が必要です。出力ベクター・タイル・データはBLOBとして返されます。
BLOBの各フィーチャは、タイル・エンベロープと相互作用するジオメトリと、そのジオメトリに関連付けられているリクエストされた属性列で構成されることに注意してください。
タイルは、地図の一部を記述するポリゴン(正方形)です。タイル・エンベロープは、X軸とY軸の両方の両端を2.5%ずつ追加してタイルを覆う正方形でもあります。ユーザーから見ると、タイルとタイル・エンベロープは両方とも同じです。タイル・エンベロープは、MASK=ANYINTERACT
が設定されたSDO_RELATEのコールでフィルタとして使用されます。
SDO_UTIL.GET_VECTORTILEファンクションでは、タイル・エンベロープのかわりにX、Y原点、ズーム・レベルおよびタイル方法が渡されることに注意してください。このファンクションは、タイル・エンベロープを形成するSDO_UTIL.GET_TILE_ENVELOPEを内部的にコールします。
SQL問合せ内でSDO_UTIL.GET_VECTORTILEファンクションをコールする場合は、次の点を考慮する必要があります。
- タイル・エンベロープの作成に使用されるタイル住所(
tile_x
、tile_y
およびtile_zoom
)およびタイル処理方法(google_ts
)が、ベクター・タイル・ファンクションに渡されるものと同じであることを確認します。そうしないと、異なる住所または方法によって異なるタイル・エンベロープが提供される場合があるため、ファンクションでデータが返されない可能性があります。 - 同様に、フェッチする行数を決定するためにSQL問合せに
max_features
を指定する場合は、問合せの最大フィーチャ値がベクター・タイル・ファンクションに渡される値と同じであることを確認します。また、次の点にも注意してください。- 問合せで指定された
max_features
値がベクター・タイルAPIで指定された値より大きい場合、問合せは引き続き多数の行の読取りが試行しますが、フィーチャの処理はAPIに渡されたmax_features
値に制限されます。 - 問合せで指定された
max_features
値がベクター・タイルAPIで指定された値より小さい場合、問合せは指定された行数をフェッチして終了します。
- 問合せで指定された
rowid_flg
パラメータは、カーソル入力をサポートするSDO_UTIL.GET_VECTORTILEファンクション書式には含まれません。この場合、SELECT句にROWIDTOCHAR(<table_alias>.rowid) "ROWID"を追加することで、ROWID列属性を取得できます。この属性列は、取得する列のリストの任意の場所に配置できます。また、取得するリスト内の唯一の列にすることもできます。-
"ROWID"
疑似列名は単なる提示です。任意の名前を選択できます。 ROWIDTOCHAR
ファンクション・コールでは、ROWIDの生成元の表の別名をROWID
の接頭辞として付ける必要があります。問合せにはデータ表とタイル・エンベロープ表の2つの表があるため、どちらの表からROWIDが生成されるかを明確にするためにこの別名が必要です。- 問合せから返される行数を制限する場合は、
WHERE NUMROW <= :x
を使用する必要があります(:x
はmax_features
パラメータの値)。
-
例
NUMBER
形式のX座標とY座標の両方を使用してベクター・タイル・データを取得します。この例では、各ベクター・タイルに対して10000レコードのサイズ制限も保持しています。SQL> SELECT SDO_UTIL.GET_VECTORTILE( TABLE_NAME=>'states', GEOM_COL_NAME=>'geom', ATT_COL_NAMES=>sdo_string_array('totpop', 'name', 'state_abbrv'), SIMPLE_PREDICATE=>sdo_string_array('totpop','>', '50000'), TILE_X=>1192, TILE_Y=>1579, TILE_ZOOM=>12, MAX_FEATURES=>10000); SDO_UTIL.GET_VECTORTILE(TABLE_NAME=>'US_STATE',GEOM_COL_NAME=>'GEOM',ATT_COL_NAMES=>SDO_STRING_ARRAY('TOTPOP','NAME','STATE_ABBRV'),SIMPLE_PREDICATE=>SDO_STRING ---------------------------------------------------------------------------------------------------------------------------------------------------------------- 1A150A0E084E59414E205350415449414C0828802078021ABE010A054C41594552122C080012060000010102021803221E09CB01AE233AA80919AE2845B2010CFC06FD0B94098912009F069743000F12
次の例では、SQL問合せを使用してベクター・タイル・データを取得するステップを説明します。
SELECT SDO_UTIL.GET_VECTORTILE( CURSOR( WITH tet(tec) AS (SELECT SDO_UTIL.GET_TILE_ENVELOPE(tile_zoom=>12, tile_x=>1192, tile_y=>1579)) SELECT geom, totpop, state, state_abrv FROM states, tet WHERE totpop > 200 and ROWNUM <= 10000 and SDO_RELATE(geom, tet.tec, 'mask=anyinteract min_resolution=9.7839 bypass_point=true')), tile_zoom=>12, tile_x=>1192, tile_y=>1579) FROM DUAL; SDO_UTIL.GET_VECTORTILE(CURSOR(WITHTET(TEC)AS(SELECTSDO_UTIL.GET_TILE_ENVELOPE(T -------------------------------------------------------------------------------- 1A150A0E084E59414E205350415449414C0828802078021A620A054C41594552121C080012060000 010102021803220E09CB01B81B128E10851D8D10000F1A06544F54504F501A0553544154451A0A53 544154455F4142525622091900000000673D5241220A0A084D6172796C616E6422040A024D442880 207802
前述の例では、次のようにmin_resolution
値が計算されます:
SQL> SELECT ((40075016.0/POWER(2, 12)) * .001) FROM DUAL; ((40075016.0/POWER(2,12))*.001) ------------------------------- 9.78393945
次の例では、タイル・フィーチャの列属性としてROWIDを返します。ベクター・タイルは、次に示すように、SQL問合せ(cursor
入力あり)を使用して生成されます。
SELECT SDO_UTIL.GET_VECTORTILE( cursor( WITH tet(tec) AS (SELECT SDO_UTIL.GET_TILE_ENVELOPE(tile_zoom=>12, tile_x=>1192, tile_y=>1579)) SELECT geom, totpop, state, state_abrv, ROWIDTOCHAR(vtt.rowid) "ROWID" FROM states, tet WHERE totpop > 200 and ROWNUM <= 10000 and SDO_RELATE(geom, tet.tec, 'mask=anyinteract min_resolution=9.7839 bypass_point=true')), tile_zoom=>12, tile_x=>1192, tile_y=>1579) FROM DUAL;
次の例では、ROWID_FLG
パラメータがTRUE
に設定されているため、このプロシージャはタイル・フィーチャの列属性としてROWIDを返します。
SELECT SDO_UTIL.GET_VECTORTILE( TABLE_NAME=>'states', GEOM_COL_NAME=>'geom', ATT_COL_NAMES=>sdo_string_array('totpop', 'state', 'state_abbrv'), SIMPLE_PREDICATE=>sdo_string_array('totpop','>', '200'), TILE_X=>1192, TILE_Y=>1579, TILE_ZOOM=>12, ROWID_FLG=>TRUE, MAX_FEATURES=>10000);
親トピック: SDO_UTILパッケージ(ユーティリティ)