位置情報をデータストアに保存するアプリ エンジンでアプリケーションを開発しています。特定のポイントの指定された半径内のすべてのポイント (緯度、経度) をフェッチしようとしています。このSQLに関するStackOverflowの質問に似ています。GQLで同じことが達成できるかどうか知りたいです。(私が見つけたこの記事に似ています)
皆様のご提案をお待ちしております。
位置情報をデータストアに保存するアプリ エンジンでアプリケーションを開発しています。特定のポイントの指定された半径内のすべてのポイント (緯度、経度) をフェッチしようとしています。このSQLに関するStackOverflowの質問に似ています。GQLで同じことが達成できるかどうか知りたいです。(私が見つけたこの記事に似ています)
皆様のご提案をお待ちしております。
GQL ではなく、Search APIを使用してこれを行うことができますが、これは、エンティティを検索可能なドキュメントとして個別にインデックス化する必要があることを意味し、コストもはるかに高くなります (データストア クエリの場合は $0.06/100,000、複雑な検索の場合は $0.6/10,000 です)。クエリ、すべてのジオポイント検索クエリ)。
コメントで質問に答えるように編集してください:例があなたの問題を解決するように私には思えます:
"distance(survey_marker, geopoint(35.2, 40.5)) < 100"
と の座標を、円の中心の座標とインデックス100
付きGeoPt プロパティの名前に置き換えます。500
geopoint(35.2, 40.5)
survey_marker
したがって、次のようにドキュメントにインデックスを付けた場合:
from google.appengine.api import search
query = #something
index = search.Index(name="myIndex")
for entity in query:
my_document = search.Document(
doc_id = entity.key,
fields=[
search.GeoField(name='location', value=search.GeoPoint(entity.point))
])
index.put(document)
次のようにクエリを記述します。
coords = (lat, long)
query_string = "distance(location, geopoint(%s, %s)) < 500" % (lat, long)
index.search(query.string)
お役に立てれば。