让用户通过GPS搜索的方法

时间:2012-10-12 04:32:28

标签: python google-app-engine gps geocoding datastore

我正在使用python在google app引擎上构建应用程序,我有一个具有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)

2 个答案:

答案 0 :(得分:0)

5 points搜索非常简单,因为这只是一个方形区域:

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

如果您的目标是圆形边界,那么您需要更多的数学运算。

请注意,您自己查询中的where条件无效,并会导致语法错误。 WHERE语法是

WHERE (condition) AND (condition) ...

WHERE (condition) AND WHERE (condition) ...
                      ^^^^^---syntax error

答案 1 :(得分:0)

您当前代码的问题是边界情况。首先你有经度从0到360的Prime Meridian。然后你有纬度不超过90或低于-90的极点。这可能不是一个问题(因为它们是没有人居住的地方),但你需要根据具体情况来决定。如果你需要附近的位置,经度和Prime Meridian会给你适合。