HEREtile タイリング方式
HEREtile マップのタイリング方式は、 4 つのツリーに基づいています。このツリーでは、各高レベルの詳細情報によって、親タイルが 4 つの等しい子タイルに分割されます。 子タイルの番号は 0 ~ 3 の固定の逆 "Z" パターンで割り当てられます。
上の図では、
- タイル 0 は南西部のサブタイルです
- タイル 1 は南東部のサブタイルです
- タイル 2 は北西側の補助タイルです
- タイル 3 は北東部のサブタイルです
このタイリングの例で は、未加工の非投影の WGS84 緯度 / 経度座標値に基づいています。したがって、各子のタイル は、各側の親の緯度 / 経度範囲の半分を正確にカバーします。
特別なルートタイル
レベル 1 のタイルの特別な処理を避けるために、ワールド全体を表すレベル 0 のルートタイルは少し変わっています。
世界中のわかりやすい -180 ° ~ +180 ° 経度および -90 ° ~ +90 ° 緯度の範囲が、北極の北にある仮想の対応範囲で拡張されています。 この結果、基準座標範囲は -180 ° ~ +180 ° 経度 、 -90 ° ~ +270 ° 緯度 になり、レベル 0 のワールドタイル は側面が 360 ° の正方形になります。
HERE からは、ルートワールドタイルが標準的な方法でレベル 1 の 4 つのタイルに分割され、既知のワールドをカバーするタイル 0 と 1 が作成され、一般的には 2 と 3 が未使用のタイルが作成されます。
このスキームでは、特定のタイルレベルで、タイルの緯度および経度範囲を次のように計算できる簡単な式が作成されます。
360 ° /2 タイルレベル = 緯度 および経度 のタイル あたりの度数。
レベル 14 のタイルの場合 :
360 ° /214 = 360 ° /16384 = 0.02197265625 ° / タイル 。
2 つのタイルの境界上に位置がある場合、どのタイル に位置しますか ? HEREtile スキーマの場合、タイルの南西境界にある場所がそのタイルに属します。
その他の特殊なケース :
- +180 ° の経度値は -180 ° に変換されるため、タイルは反子午線を「覆い」として参照します。
- +90 ° の緯度値は、その南のタイルが所有しています。
HEREtile 識別子
HEREtile タイル 識別子は、パックされたバイナリ表現を使用します。通常は値として保存されます。 これらの値は、論理 タイル quadkey 文字列から計算されます。
タイル 四角形
タイル の 4 つのキーは、レベル 1 からターゲットタイル レベルまでの親子タイルの階層をキャプチャするタイル 番号の文字列 (0 ~ 3) です。
そのため、以下のサンフランシスコを含むレベル 5 のタイル では、論理 quadkey は「 02123 」になります。
その後、 タイル quadkey の「レベル」は、値の桁数から直接推測できます。 したがって、レベル 14 タイル の 4 つのキーには 14 桁の数字が使用され、 0 、 1 、 2 、 3 のみが使用されます。
四角形を計算しています
特定のタイル レベルにおける任意の緯度 / 経度位置の タイル quadkey は、モートンコーディングのバージョンを使用してアルゴリズム的に計算できます。 この例では、中央駅の Berlin Hauptbahnhof ( 座標 52.52507/13.36937) を使用します。
レベル 14 の HEREtile ID を計算してみましょう。 まず、目的のタイル (X, Y) の座標をワールドマップで計算する必要があります。 タイル (X, Y) 座標は緯度 / 経度の値ではありません。これらは、世界地図の南西の角にある (0,0) からインデックス化された、タイルの積分位置座標です。
-
経度 値からインデックス化された水平( X )タイル を探します。そのためには、ワールドマップの経度 範囲( -180 ° ~ +180 ° )を、目的のズーム レベル に基づいてタイルサイズの範囲に分割します。 上記の Special Root タイル によると、各レベル 14 タイル カバー 0.02197265625 度 / タイル : 南西端から 180 ° + 13.36937 ° = 193.36937 ° 絶対 経度 オフセット 。 193.36937 ° /0.02197265625 ° = 8 、 800.45 = タイル X : 8,800 ( 0 ベースのインデックス作成の場合は切り捨て)
-
同様に、垂直( Y )タイル インデックスも検索され、次の特別な -90 ° ~ +270 ° の緯度 範囲を使用してください。 南西コーナーから 90 ° +52.52507 ° = 142.52507 ° 絶対緯度 。 142.52507 ° /0.02197265625 ° = 6,486.47 = タイル Y : 6,486 ( 0 ベースのインデックス作成では切り捨て)
次に、タイル X 、 Y インデックス (8800 、 6486) およびタイル レベル (14) をモートンコード quadkey に変換する必要があります。
-
タイル 座標インデックスの単純なバイナリ表現を使用します。ビット数「タイル level 」の値に 0 を埋め込みます : タイル X 座標 : 8800 = 100010011000002 - すでに 14 ビットのタイル Y 座標 : 6486 = 0110010101102 - ゼロパディングから 14 ビット
-
バイナリ値のビットを Y 座標の最初のビットからインターリーブします。インターリーブ Y / X = 01101000011000110110001010002
-
quadkey 文字列を取得するには、結果のバイナリ値をベースの 4 基数の整数として解釈します。 01101000011000110110001010002 = 122012031202204 = quadkey string "12201203120220"
最後に、目的のタイル レベルと同じ桁数の quadkey を使用します。使用できるのは、 0 ~ 3 の数字のみです。 HERE は地図上の quadkey です。
最後のステップは、タイルの論理 quadkey を HEREtile ID としてエンコードすることです。
HEREtile ID のバイナリエンコード
タイル 論理 quadkey 文字列をパックされた HEREtile ID にエンコードするには、次の単純なアルゴリズムを使用します。
「 1 」で quadkey の序文を作成します。 '1' の後に quad-key"12201203120220"="112201203120220" が続きます
ベース 4 の基数を使用して結果の文字列から整数値を解析し、ベース 10 の基数に変換します。 1122012031202204 = 37789444010 = HEREtile エンコードされたタイル ID : 377894440
これにより、レベル 15 までのタイル ID を 32 ビットの符号なし整数、および 64 ビットの符号なし整数で最大レベル 30 で保存できる場合、コンパクトなバイナリエンコーディングになります。 ほとんどの HERE マップ製品では、タイルはレベル 14 で公開されるため、タイル ID はすべて値として公開されます。 HERE は、そのタイル のマップコンテンツの例です。