0

Pythonを使用してGoogleAppEngineでアプリケーションを構築していますが、GPSプロパティを持つLocationエンティティがあります。このプロパティは文字列として保存され(必要に応じて変更できます)、ユーザーが場所を入力して、プログラムが緯度または経度の5ポイント以内にあるすべてのサイトを返すようにします。

ユーザーが検索しているGPS内の位置を示す次のコードがありますが、そこから何ができるのか、範囲内のすべてのGPS位置をクエリする方法がわかりません。

class Map(BlogHandler):
    def get(self):
        #do some stuff here
    def post(self):
        inputlocation = self.request.get("q")

        #this returns the GPS location that the user searched for
        g = geocoders.Google()
        place, (lat, lng) = g.geocode(inputlocation)

        #I would like to be able to do something like this         
        bound = 5
        upper = GPSlocation + bound
        lower = GPSlocation - bound
        left = GPSlocation + bound
        right = GPSlocation - bound

locations = db.GqlQuery("select * from Location where GPSlocation.lat<:1 and where GPSlocation.lat>:2 and where GPSlocation.long <:3 and where GPSlocation.long >:4 order by created desc limit 20", upper, lower, left, right)

        self.render('map.html', locations=locations, centerlocation=GPSlocation)
4

2 に答える 2

0

現在のコードの問題は境界ケースです。最初に、経度が 0 から 360 になる本初子午線があります。次に、緯度が 90 度を超えたり、-90 度を下回ったりしない極があります。これはおそらくあまり問題ではありませんが (誰も住んでいない場所なので)、ケースバイケースで判断する必要があります。経度と本初子午線は、それに近い場所が必要な場合に適しています。

于 2012-10-12T13:46:43.113 に答える
0

searching by 5 points is pretty easy, since that's just a square area:

select ...
where (GPSlocation.lat BETWEEN (:1 - 5) AND (:2 + 5))
   and (GPSlocation.long BETWEEN (:3 - 5) AND (:4 + 5))

if you were targeting a circular boundary, then you'd be in for a bit more math.

note that your where condition in your own query is invalid and will cause a syntax error. WHERE syntax is

WHERE (condition) AND (condition) ...

not

WHERE (condition) AND WHERE (condition) ...
                      ^^^^^---syntax error
于 2012-10-12T04:36:59.847 に答える