我正在使用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)
答案 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会给你适合。