ジオ検索

モデルにgeopointフィールドを置くと、ある地点に最も近いレコードを距離順に取得できます。クエリは地点と半径で動作します。

geopointフィールド

geopointフィールドは緯度と経度を保持し、コンソールではマップピッカーで編集します。1つのモデルに複数持たせることができ、それぞれ別名の地点になります。地点はレコードの書き込みと同じトランザクションでインデックスされるため、保存した直後からレコードを位置で検索できます。

地点またはレコードに最も近いもの

searchByLocationは緯度と経度を受け取り、その地点の近くにあるレコードを返します。findNearbyRecordsはレコードを受け取り、そのレコード自身を除いて最も近いレコードを返します。どちらも1つのモデルに絞り込めます。結果は近い順に並び、各結果にはメートル単位の距離が、レコードのid、モデルキー、自然キー、コンテンツとともに含まれます。

半径とページング

半径は任意です。指定すると、その距離までで結果が打ち切られます。指定しない場合は、どれだけ離れていても最も近いレコードを返します。結果はカーソルによるページネーションで、前方向のみ、既定で1ページ50件です。-90から90の範囲外の緯度や、-180から180の範囲外の経度は拒否されます。

アクセスルールと既存のレコード

クエリは呼び出し元の行レベルのアクセスルールに従って実行されます。すでにレコードがあるモデルにgeopointフィールドを追加しても、既存の行はインデックスされません。foir geometryには、インデックスに含まれていないレコードを一覧し、バックフィルするコマンドがあります。

地点と半径のみ

エリア、線、バウンディングボックスはサポートしていません。

詳細を読む

CLIリファレンスでは、geometryコマンドについて説明しています。地点の近くを検索する方法、別のレコードに最も近いレコードを探す方法、まだインデックスされていないレコードをバックフィルする方法です。