我正在使用RQ和SQlite3,我试图从位置表中获得满足包含方形属性项的数学条件的结果。 "位置" table包含Latitude:float和Longitude:float Field。 这是我的搜索代码行:
@results = Location.where('Latitude > ? AND Latitude < ? AND Elevation > ? AND Elevation < ? AND ((Latitude-?)**2 +(Longitude - ?)**2 <= (?)**2)',@latitude_Range_Start,@latitude_Range_End,@elevation_Range_Start, @elevation_Range_End,@latitude_mycity.to_f, @longitude_mycity.to_f, @rad_range.to_f)
Rails显示此错误:
SQLite3::SQLException: near "*": syntax error: SELECT "locations".* FROM "locations" WHERE (Latitude > 20.7333148 AND Latitude < 40.7333148 AND Elevation > -651.3542785644531 AND Elevation < 1348.6457214355469 AND ((Latitude-30.7333148)**2 +
(Longitude - 76.7794179)**2 <= (1111.0)**2))
如何在where子句中查询我的条件。似乎将其中的术语平方化就是问题所在。我该怎么做?
答案 0 :(得分:0)
答案 1 :(得分:0)
SQLite没有**
运算符。
除非你有created a user-defined function,否则你必须手动计算平方:
...where('Latitude BETWEEN ? AND ? AND
Elevation BETWEEN ? AND ? AND
(Latitude - ?) * (Latitude - ?) +
(Longitude - ?) * (Longitude - ?) <= ? * ?', ...
(请注意,此公式假定地球是平坦的。)