Я использую Python и Sqlalchemy для хранения значений широты и долготы в базе данных Sqlite. Я создал гибридный метод для моего объекта Location,
@hybrid_method
def great_circle_distance(self, other):
"""
Tries to calculate the great circle distance between the two locations
If it succeeds, it will return the great-circle distance
multiplied by 3959, which calculates the distance in miles.
If it cannot, it will return None.
"""
return math.acos( self.cos_rad_lat
* other.cos_rad_lat
* math.cos(self.rad_lng - other.rad_lng)
+ self.sin_rad_lat
* other.sin_rad_lat
) * 3959
Все значения, такие как cos_rad_lat
и sin_rad_lat
, являются значениями, которые я предварительно рассчитал для оптимизации расчета. Во всяком случае, когда я запускаю следующий запрос,
pq = Session.query(model.Location).filter(model.Location.great_circle_distance(loc) < 10)
Я получаю следующую ошибку,
line 809, in great_circle_distance
* math.cos(self.rad_lng - other.rad_lng)
TypeError: a float is required
Когда я печатаю значения для self.rad_lng
и other.rad_lng
, я получаю, например,
self.rad_lng: Location.rad_lng
other.rad_lng: -1.29154947064
Что я делаю не так?