我正在使用Android应用程序,该应用程序必须与服务器通信才能在数据库中存储/检索模型。模型有两个参数纬度和经度,即FloatProperty
class Model(ndb.Model):
latitude = ndb.FloatProperty()
longitude = ndb.FloatProperty()
现在我有一个请求处理程序,当它收到带有某个标志的GET请求以及经度和纬度参数时,它应该查询数据库以查找某个距离的所有模型。
我做的是
latitude = float(self.request.get('latitude'))
longitude = float(self.request.get('longitude'))
max_fetch = 20
...
sin_lat = math.sin(latitude)
cos_lat = math.cos(latitude)
R = 6371 * math.pow(10, 3)
max_distance = 1000
around_you = Model.query(math.acos(sin_lat*math.sin(Model.latitude) +
cos_lat*math.cos(Model.latitude)*math.cos(longitude - Model.longitude)) *
R <= max_distance).fetch(max_fetch)
但这样做会给我一个
TypeError: a float is required
当我尝试
时math.sin(Model.latitude)
有关如何解决此问题的任何提示?
答案 0 :(得分:0)
数据存储本身不支持任何数学运算。你可以隐藏ComputedProperty
中的任何一个(因为它实际上是在你的应用程序的Python代码中使用.put()
将数据发送到商店之前计算的),但是不支持外部“参数” - 它必须完全根据实例上的值的属性计算。
因此,ComputedProperty
可以是例如math.sin
的{{1}} - 但是在这里您似乎需要根据“外部参数”FloatProperty
和{ {1}}。
相反,在App Engine搜索API中,https://cloud.google.com/appengine/docs/python/search/ - 而不是数据存储区似乎提供了您需要的功能(特别是通过{{1} } type和latitude
字段类型。