2

位置情報をデータストアに保存するアプリ エンジンでアプリケーションを開発しています。特定のポイントの指定された半径内のすべてのポイント (緯度、経度) をフェッチしようとしています。このSQLに関するStackOverflowの質問に似ています。GQLで同じことが達成できるかどうか知りたいです。(私が見つけたこの記事に似ています)

皆様のご提案をお待ちしております。

4

2 に答える 2

4

GQL ではなく、Search APIを使用してこれを行うことができますが、これは、エンティティを検索可能なドキュメントとして個別にインデックス化する必要があることを意味し、コストもはるかに高くなります (データストア クエリの場合は $0.06/100,000、複雑な検索の場合は $0.6/10,000 です)。クエリ、すべてのジオポイント検索クエリ)。

コメントで質問に答えるように編集してください:例あなたの問題を解決するように私には思えます:

"distance(survey_marker, geopoint(35.2, 40.5)) < 100"

と の座標を、円の中心の座標とインデックス100付きGeoPt プロパティの名前に置き換えます。500geopoint(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)

お役に立てれば。

于 2013-08-29T12:26:52.507 に答える