0

Я работаю над Android-приложением, которое должно взаимодействовать с сервером для хранения/извлечения моделей в базе данных. Модели имеют два параметра широты и долготы, которые FloatPropertyTypeError при использовании cos/sin на 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

Что делать, если вы использовали 'math.sin (широта)' вместо 'math.sin (Model.latitude)'? – Kevin

+0

Этот тип запроса невозможен с хранилищем данных – Greg

ответ

0

Хранилище данных само по себе не поддерживает никаких математических операций. Вы можете запрограммировать любой из них в ComputedProperty (так как это фактически вычисляется в коде Python вашего приложения непосредственно перед отправкой данных в хранилище с помощью .put()), , но, который не поддерживает внешние «параметры» - он должен быть вычислен полностью с точки зрения свойств значений на экземпляре.

Таким образом, ComputedProperty может например быть math.sin из FloatProperty - но здесь вы, кажется, требуют смешивания вещи, основанную на «внешних параметрах» latitude и longitude.

Посмотрите, скорее, в App Engine Search API, https://cloud.google.com/appengine/docs/python/search/ - что, а не хранилище данных, по-видимому, обеспечивают необходимую функциональность (в частности, с помощью подобного типа GeoPoint и GeoField поля).

Смежные вопросы