2014-11-11 6 views
0

Я использую ROR с SQlite3, и я пытаюсь получить результаты из таблицы местоположений, которые удовлетворяют математическому условию, содержащему квадратные члены атрибутов. Таблица «местоположения» содержит Локатор: float и Longitude: float Field. Вот моя строка кода для поиска:rails math query внутри where clause

@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)) 

Как запросить мое состояние в ИНЕКЕ. Кажется, что возведение в квадрат терминов внутри него является проблемой. Как мне это сделать?

ответ

0

В SQLite нет оператора **.

Если у вас нет created a user-defined function, вы должны вычислить квадраты вручную:

...where('Latitude BETWEEN ? AND ? AND 
      Elevation BETWEEN ? AND ? AND 
      (Latitude - ?) * (Latitude - ?) + 
      (Longitude - ?) * (Longitude - ?) <= ? * ?', ... 

(. Пожалуйста, обратите внимание, что эта формула предполагает, что земля плоская)

+0

Спасибо, решить мою проблему. –

0

Согласно этому сообщению:

How to find power of a number in SQLite

SQLite не имеет мощность/экспоненциальный математическую функцию.

Вам нужно будет сделать как можно больше математики в Ruby и передать исходные значения сравнения.