質問1:地域内の場所のデータストアクエリ
私はApp Engine FlexでGoogle Datastore(Javaクライアントライブラリ)を使用しており、場所データを保存しています。私は矩形領域内の場所のリストを照会したいと思います。
現在地エンティティは次のようになります。
Location
- lat (eg. -56.1)
- long (eg. 45.6)
私はこのようなGQLを使用して照会することはできませんので、Googleのデータストアが異なる性質上、複数の不平等を照会するための制限があります。
SELECT * FROM Location WHERE lat <= @maxLat AND lat >= @minLat AND long <= @maxLong AND long >= @minLong
maxLat
minLat
,maxLong
およびminLong
は、場所を検索する境界矩形を表します。
現在、私はただ一つのフィルタ使用して照会しています:
SELECT * FROM Location WHERE lat <= @maxLat AND lat >= @minLat
を、返された結果から、私は同様に経度の範囲内のものを除外する。この戦略に頼ることなくこれを行うより良い方法はありますか?
質問2:
IをGoogleデータストアにGeopointとして緯度/経度の組み合わせを格納する場合には、どのように緯度と経度を確認することができますか?私はJavaクライアントライブラリを使用してGeopoint内緯度/経度でフィルタリングすることができない
Location
- location (Geopoint)
:場所がこのように格納されている場合、例えば
。
SELECT * FROM Location WHERE location.long <= @maxLong
Datastore Geopointプロパティの回避策はありますか?
私はこの戦略の意味を理解していません。このようなGQLクエリを書くことはできません。 lat = -90.0〜-89.0、long:-180.0〜-179.0を表すセル0の1度セルを使用します。細胞数は緯度が上がるたびに増加し、緯度が89.0〜90.0に達すると-90.0〜-89.0に戻り、長さは1度上がります。次に、位置(0、0)はセル32,399内にあることで表されます(位置は4つの異なるセルの角です。これはあなたが示唆していることですか?バウンディングボックスが非常に小さなボックスである場合、セルは非常に特異的でなければなりませんか? (0.0001度のブロック) – Kookz
私はこれについて長い間懸命に考えてきましたが、私はまだあなたの解決策を完全には把握していません。少し拡大して、サンプルソリューションを見せてもらえますか?ありがとう! – Kookz