Playable Locations API の基本概念

ここでは、Playable Locations API を理解し、適切に使用するために必要な基本概念を説明します。

プレイアブル ロケーションについて

一般的なロケーションは地図上の地理的位置ですが、プレイアブル ロケーションは、リアルワールド ゲームでゲーム オブジェクトの配置場所(賞品などのスポーン地点)として使用されます。

プレイアブル ロケーションの種類

2 種類のプレイアブル ロケーションのセットを取得できます。

キュレート済み
キュレート済みのプレイアブル ロケーションは、特定の場所に存在するオブジェクトに関連付けられた地理的ポイントです。Google のデータベースから取得したスポットの位置を表します。このロケーションは、Google マップで検索できるお店やスポットと同じです。たとえば、自由の女神、エッフェル塔などの有名なランドマークに加え、人々が利用する地元のレストラン、ホテル、ショップなどが含まれます。
自動生成
キュレート済みのプレイアブル ロケーションでは条件を満たせない場合、Playable Locations API によって追加のプレイアブル ロケーションが生成されます。新しく生成されるプレイアブル ロケーションは、既存のオブジェクトに関連付けられていない地理的ポイントです。これらの地理的ポイントはプログラムによってリアルタイムで生成され、歩道、公園、ビーチ、遊び場、広場などの公共の場にランダムに配置されます。

これら両方のタイプのプレイアブル ロケーションを使用して、パワーアップ アイテム、戦利品、戦場、物資供給基地など、さまざまな種類のゲーム オブジェクトを配置します。

Playable Locations API は、指定した地理的エリアに含まれ、かつ指定したフィルタ条件を満たす一連のプレイアブル ロケーションを提供します。Google の目標は、次の条件を考慮したうえで、最低限の密度以上でプレイアブル ロケーションを提供することです。

条件
プレーヤーの安全性 ゲームの賞品が、高速道路上や軍事基地の中に現れることがない。
ゲームプレイにふさわしい場所 プレーヤーが墓所や礼拝所に侵入することがない。

PlayableLocation のプロパティ

samplePlayableLocations は、PlayableLocation オブジェクトのコレクションを返します。これは、次のプロパティを持つ JSON オブジェクトです。

JSON

{
  "name": string,
  "placeId": string,
  "plus_code": string,
  "types": [
    string
  ],
  "centerPoint": {
    object(LatLng)
  },
  "snappedPoint": {
    object(LatLng)
  }
}
      
name
プレイアブル ロケーションを一意に識別する文字列。
placeId
ロケーションを一意に識別する英数字の文字列。キュレート済みプレイアブル ロケーションの Place ID(e66ef376f790adf8a5af7fca9e6e422c03c9143f)です。キュレート済みプレイアブル ロケーションの PlaceId を使って、ゲーム固有のメタデータをロケーションに追加します。他の Google API で Place ID を使用することもできます。

plus_code
生成されたプレイアブル ロケーションを一意に識別する Plus Code。Plus Code は英数字の文字列(例: PXRV+XJ)です。
types
プレイアブル ロケーションの種類を指定するプレイアブル ロケーションの種類(文字列)の配列です。配列の最初の種類は「主な種類」と見なされます。たとえば、entertainmentoutdoor_recreation の両方のプレイアブル ロケーションを設定できます。
centerPoint
ロケーションの中心点に対応する地理座標。中心点は、ロケーションが samplePlayableLocations メソッドで指定した関心のある地域内にあるかどうかを判断するために使用されます。
snappedPoint
最寄りの道路(最寄りの道路がある場合)の歩道にスナップしたロケーションに対応する地理的座標です。ビジネスの所有者が施設内にゲーム プレーヤーが入って欲しくない場合、スナップ ポイントを使用してゲーム オブジェクトを配置します。知名度が 1 と 2 のロケーションにはスナップ ポイントはありません。

間隔

SpacingOptions を指定することで、キュレート済みプレイアブル ロケーションの密集を避けることができます。間隔オプションを設定するには、隣接するプレイアブル ロケーションとの最小間隔(メートル単位)を指定し、ポイントの種類(中心点またはスナップ点)を指定します。samplePlayableLocations メソッドは、200~1,000 m の間隔オプションをサポートしています。デフォルトは 200 m です。

デフォルトの間隔オプション(200 m)の例

密度オプションなし

最小間隔が 400 m の例

密度オプションあり

ランキング

samplePlayableLocations を呼び出して、プレイアブル ロケーション セットのサンプルをリクエストする場合、返されるプレイアブル ロケーションは、知名度に基づいて自動的にランキングされます。場所の知名度は、Google の地図上の場所に関するデータベースでの人気度によって決まります。

対象年齢

Playable Locations API は、あらゆる年齢層のプレーヤーに適したプレイアブル ロケーションを提供します。

S2 セル

プレイアブル ロケーションを取得する際の検索対象エリアを指定するには、S2 セルを使用します。このセクションでは、S2 セルについて簡単に説明します。

球体が四角い箱(立方体)で囲まれており、この箱の 6 つの面が球体上に投影されている様子を思い浮かべてください。この球体は地球であり、その地表が、周りを囲む 6 つの正方形に等分割されるとしましょう。これらの正方形を「S2 セル」といい、実際には各辺が湾曲しています。

この 6 つの大きなセルは、「基本セル」または「レベル 0 のセル」と呼ばれます。これが S2 セルの基本概念です。次に、それぞれの基本セルを 4 つに等分割します。6×4=24 のサブセル(レベル 1 のセル)ができます。6 つの基本セルは、それぞれに属するサブセルの「親」になります。

同様に、各サブセルをさらに小さな 4 つのセルに分割すると、「レベル 2 のセル」になります。このプロセスをさらに 28 回繰り返すと、6×430 個のセルが地球上を覆い、各セルは 1 辺が約 10 cm になります。これらはレベル 30 のセル(最も細かいセル)です。

S2 セル(すべてのレベルの S2 セル)には、それぞれ一意の識別子(s2CellId)が割り当てられます。Playable Locations API ではこの識別子(64 ビットの整数)を使用して、プレイアブル ロケーションの対象エリアを指定します。S2 セルには親子関係があり、階層構造になっています。そのため、空間インデックスに容易に対応でき、データベースからプレイアブル ロケーションをすばやく取得できます。

S2 セルの平均面積

Playable Locations API は、11~14 レベルの S2 セルに対応しています。各 S2 セルの平均面積は次のとおりです。

S2 セルのレベル平均面積(km²)
11 20
12 5
13 1
14 0.3

S2 Geometry Library

S2Geometry Library は、3 次元の球面上のデータを表す地理情報システムです。このライブラリには次の特長があります。

  • 空間インデックスのサポート。

    • 任意に分散している S2 セルの面積を集合として概算できます。

    • ポイント、ポリライン、ポリゴンの集合を、メモリ内で高速に空間インデックス処理できます。

  • 堅牢な構成演算(積、和、簡約など)とブール値の述語(含有のテストなど)。

  • 効率的なクエリ操作(周辺オブジェクトの検索、距離の測定、重心の計算など)。

  • 数学的述語のコレクションにより、ジオメトリック プリミティブ間の関係をテスト。

  • スナップ丸め。

S2 Cell Statistics

S2 Cell Statistics は、特定の QPS でデータセットをダウンロードする際にかかる時間などを計算するときに役立ちます。

S2 Geometry コード リポジトリ

S2 セルの使用を開始するときは、これらのリポジトリのクローンを作成します。

S2 セルのカバー範囲の確認

プレイアブル ロケーション セットを取得する際、場合によっては、特定の地理的エリアをカバーする S2 セル セットを計算する必要があります。その場合、Sidewalk Labs の Region Coverer ウェブアプリ、または s2map.com の Coordinate Plotter ウェブアプリを使用できます。

S2 セルのカバー範囲をプログラムで確認する方法

すべての S2 ジオメトリ ライブラリに S2RegionCoverer クラスが含まれています。このクラスを使用して、任意の領域をカバーする S2 セルのリストを計算できます。 Playable Locations API がサポートしている最小レベル(レベル 14)に相当する子 S2 セルの ID を取得するには、`S2CellId' クラスを使用します。

関連情報

S2 セルについて詳しくは、次のリソースをご覧ください。