ジオ検索
モデルにgeopointフィールドを置くと、ある地点に最も近いレコードを距離順に取得できます。クエリは地点と半径で動作します。
geopointフィールド
geopointフィールドは緯度と経度を保持し、コンソールではマップピッカーで編集します。1つのモデルに複数持たせることができ、それぞれ別名の地点になります。地点はレコードの書き込みと同じトランザクションでインデックスされるため、保存した直後からレコードを位置で検索できます。
地点またはレコードに最も近いもの
searchByLocationは緯度と経度を受け取り、その地点の近くにあるレコードを返します。findNearbyRecordsはレコードを受け取り、そのレコード自身を除いて最も近いレコードを返します。どちらも1つのモデルに絞り込めます。結果は近い順に並び、各結果にはメートル単位の距離が、レコードのid、モデルキー、自然キー、コンテンツとともに含まれます。
半径とページング
半径は任意です。指定すると、その距離までで結果が打ち切られます。指定しない場合は、どれだけ離れていても最も近いレコードを返します。結果はカーソルによるページネーションで、前方向のみ、既定で1ページ50件です。-90から90の範囲外の緯度や、-180から180の範囲外の経度は拒否されます。
アクセスルールと既存のレコード
クエリは呼び出し元の行レベルのアクセスルールに従って実行されます。すでにレコードがあるモデルにgeopointフィールドを追加しても、既存の行はインデックスされません。foir geometryには、インデックスに含まれていないレコードを一覧し、バックフィルするコマンドがあります。
地点と半径のみ
エリア、線、バウンディングボックスはサポートしていません。
詳細を読む
CLIリファレンスでは、geometryコマンドについて説明しています。地点の近くを検索する方法、別のレコードに最も近いレコードを探す方法、まだインデックスされていないレコードをバックフィルする方法です。