Traffic API 開発者ガイド(交通情報)

クォードキー

メルカトル図法 」で説明されているように、ズーム レベルのグリッド位置をマップ タイル、列、行で指定することは、わかりやすく、実際には直感的に操作できます。 ただし、グリッドは 2 次元の配列であるため、効率的なストレージおよび取得は提供されません。 より適切な解決策は、 1 次元の配列です。この配列では、各アイテムを 1 つの値で一意にアドレス指定できます。 これは、ズーム レベルのタイル、列、行の情報を 1 つの値に結合する quadkeys によって可能になります。

実際、 quadkey は数値を含む文字列です。 この値は、指定したズーム レベルのグリッド内のタイルの行および列の座標のビットをインターリーブしてから、結果を 4 進数の基数に変換することによって取得されます ( 先頭のゼロは保持されます ) 。 quadkey 文字列の長さ ( 桁数 / 文字数 ) は、タイルのズーム レベルと同じです。

たとえば、次のように、列 3 のマップ タイルの quadkey と、ズーム レベル 5 の行 5 を取得できます。

// Convert the column (x) and row (y) values
// to their binary (b) equivalents:
x = 3 -> 011b

y = 5 -> 101b

// Interleave the binary values (b), convert the
// combined result to a base-4 (q) number and
// finally convert that to a string:
quadkey = 100111b -> 213q -> "213"

以下のコードは、 4 つのキーを計算するアルゴリズムの JavaScript 実装を示しています。 入力は、 A マップ タイルおよびズーム レベルの座標です。 戻り値は、 quadkey を含む文字列です。 コードブロックの下部には、ズーム レベル 16 の quadkey を計算するために呼び出される関数が表示されます。この関数は、最後の行に表示されている出力文字列の長さでもあります。

--- input ---
xTile: 35210  // Column
yTile: 21493  // Row
z: 16     // Zoom Level

--- JavaScript ---
function tileXYToQuadKey(xTile, yTile, z) {
  var quadKey = "";
  for (var i = z; i > 0; i--) {
    var digit = "0",
    mask = 1 << (i - 1);
    if ((xTile & mask) != 0) {
      digit++;
    }
    
    if ((yTile & mask) != 0) {
      digit = digit + 2; 
    }
    quadKey += digit;
  } // for i return quadKey; 

  return quadKey;
}
quadKey = tileXYToQuadKey(35210, 21493, 16);

--- output ---
quadKey = "1202102332221212"

quadkey アドレスを使用する場合、マップ タイルイメージのサイズまたは形式を指定することはできません。 応答には、常に 256 x 256 ピクセルの画像が含ま png32れ、形式はです。