2015-03-14 3 views
0

Im пытается увидеть, находится ли точка в пределах круга. Я использую теорему Пифагора для проверки, но когда я использую это, я получаю undefined method - 'for "37.33259551999998": String`. Как вычесть эти переменные?Вычитание переменных в Rails

def getalerts 
      alerts = Alert.all 
      school = School.find_by_school_name(params[:school]) 
      latitude = params[:latitude] 
      longitude = params[:longitude] 
      radius = school.radius 
      alertArray = Array.new() 

      alerts.each do |alert| 
       d = Math.sqrt(((alert.latitude - school.latitude)**2) + (alert.longitude - school.longitude)**2) 

       if d < radius 
       alertArray["latlng"] = alert.latitude, alert.longitude 
       end 
      end 
      respond_to do |format| 
       format.json { render json: alertArray}  
      end 
    end 
+1

возможно дубликат [рельсы преобразования строки в число] (http://stackoverflow.com/questions/2778093/rails-convert-string-to-number) –

+0

Если вам нужно расстояние между двумя точками, заданное их долготами и широтами, вы хотите использовать [Haversine_Formula] (http://en.wikipedia.org/wiki/Haversine_formula). –

+1

@BradWerth, этот вопрос касается определения расстояния между точками, заданными долготой и широтой. OP не спросил, как преобразовать строку в число. ОП может пытаться разделить строки, но это не дубликат вопроса. Как вы думаете, что это дубликат ответа, на который вы ссылаетесь? –

ответ

0

Использование to_f на оповещениях и школьных широтах и ​​долготах.

Преобразование плавать будет сохранять номера десятичной запятой (в отличие от to_i)

d = Math.sqrt(
    ((alert.latitude.to_f - school.latitude.to_f)**2) 
    + (alert.longitude.to_f - school.longitude.to_f)**2) 
+0

Предполагая, что значения широты и долготы действительно широты и долготы, это просто неправильно, вы получаете число, но это __NOT__ расстояние, которое вы ищете. – nPn

+0

@nPn yep.Я рассчитываю, что OP хочет вычесть строки и избавиться от этих erros. Если требуется точный расчет расстояния, haversine_formula будет работать в тысячу раз лучше (как вы прокомментировали) –

0

Из сообщения об ошибке ясно, что функция вычитания выполняется для строк, и, следовательно, она недействительна. Вы можете преобразовать строки в целые числа, используя метод to_i. Так что попробуйте это:

d = Math.sqrt(((alert.latitude.to_i - school.latitude.to_i)**2) + (alert.longitude.to_i - school.longitude.to_i)**2) 

Кроме того, если вы хотите, чтобы они преобразованы в плавающих значения, вы должны будете использовать to_f метод.

+1

Долгота и широта - угловые измерения. Вы уверены, что хотите преобразовать их в целые числа и применить теорему Пифагора? –

+0

Простите, что я не знаю, но угловые измерения плавающие значения? – 0aslam0

0

Cary делает правильную точку. Даже если начальный вопрос касается технической проблемы с привязкой для вычитания строковых представлений чисел с плавающей запятой, реальная проблема заключается в том, что вам нужно рассчитать расстояние между двумя точками на земле. Вот реализация рубин формулы гаверсинуса

https://github.com/kristianmandrup/haversine/blob/master/lib/haversine.rb

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