0

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

搜索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
于 2012-10-12T04:36:59.847 回答
0

当前代码的一个问题是边界情况。首先你有经度从 0 到 360 的本初子午线。然后你有纬度不高于 90 或低于 -90 的两极。这个问题可能不太重要(因为它们是没有人居住的地方),但您需要根据具体情况做出决定。如果您需要附近的位置,经度和本初子午线将为您提供合适的位置。

于 2012-10-12T13:46:43.113 回答