8 POIの使用例 マスターデータ (アイテム) ●スポット1 ▲スポット2 POIデータ (座標) X 1 , Y 1 X 2 , Y 2 X 3 , Y 3 X 4 , Y 4 X 5 , Y 5 「どこに」「何が」あるのかを割り当てる マスターデータ (敵) ■スポット1 ◆スポット2 各機能で異なる 各機能で共通
POIの使用例 POIデータ (座標) X 1 , Y 1 X 2 , Y 2 X 3 , Y 3 X 4 , Y 4 X 5 , Y 5 各機能で異なる 各機能で共通 「どこに」「何が」あるのかを割り当てる マスターデータ (アイテム) ●スポット1 ▲スポット2 マスターデータ (敵) ■スポット1 ◆スポット2
10 POIの使用例 POIデータ (座標) X 1 , Y 1 X 2 , Y 2 X 3 , Y 3 X 4 , Y 4 X 5 , Y 5 各機能で異なる 各機能で共通 ● ▲ ■ ▲ ◆ 現実世界 「どこに」「何が」あるのかを割り当てる マスターデータ (アイテム) ●スポット1 ▲スポット2 マスターデータ (敵) ■スポット1 ◆スポット2
位置に基づいたコンテンツの提供 ● 緯度 Y a , 経度 X a に〇〇を表示 ● 緯度 Y b , 経度 X b に〇〇を表示 ● 緯度 Y c , 経度 X c に〇〇を表示 どのように検索する? 11 ■ ■ ■ ■ POIの検索における課題 SELECT * FROM POIデータ WHERE ??? ■ ■ ■
■ ■ ■ ■ 位置に基づいたコンテンツの提供 ● 緯度 Y a , 経度 X a に〇〇を表示 ● 緯度 Y b , 経度 X b に〇〇を表示 ● 緯度 Y c , 経度 X c に〇〇を表示 どのように検索する? 12 POIの検索における課題 SELECT * FROM POIデータ WHERE 緯度 BETWEEN Y 1 AND Y 2 AND 経度 BETWEEN X 1 AND X 2 X 1 X 2 Y 2 Y 1 緯度経度に複合インデックスを張る ● キャッシュが効きにくい ● 境界を含む?含まない? → もっと良い方法はないだろうか? ■ ■ ■
■ ■ ■ ■ 位置に基づいたコンテンツの提供 ● 緯度 Y a , 経度 X a に〇〇を表示 ● 緯度 Y b , 経度 X b に〇〇を表示 ● 緯度 Y c , 経度 X c に〇〇を表示 どのように検索する? 13 POIの検索方法 SELECT * FROM POIデータ WHERE エリア IN (A, B, C, D) ■ ■ ■ 分割した領域に対してindexを張る ● キャッシュしやすい ● カラムとして持つため どこに属しているかは一意 (境界が明確) A C D B
緯度経度に沿った直線で碁盤目状の矩形に分割する 特徴 ● 矩形のため直感的で隣接するグリッドの探索も容易 ● 実際の地球は球状(回転楕円体)のため 地図(メルカトル図法)を緯度経度に沿って直線で区切ると 赤道から離れるほど1マス当たりの面積が小さくなっていく ● 日本国内でも北海道と沖縄で1マスあたりの面積にある程度誤差が生じる → 面積や方向があまり重要でないときに使用 → バッチ処理などで地域ごとにある程度分割したいときなどに有効 15 地域メッシュ A B C D
六角形(Hex)の組み合わせで地球を表現する 特徴 ● 六角形のため探索がやや複雑 ● 赤道から離れたときの誤差が矩形よりも小さい ● 中心から端までの距離がほぼ均一のため扱いやすく 隣接するマスまでの距離も一定 ● 六角形の組み合わせで円を近似できる = 視界を表現できる → どの地域でも均一に処理したいときに使用 → 方向の影響を受けにくいため画面表示物の制御などにも有効 16 GeoHex B C D A E G F