Ruby on rails Haversine gem: конвертировать рассчитанное расстояние в км

Я работаю над задачей, которая вычисляет расстояние между двумя точками GPS, и я хочу преобразовать расстояние в км:

def distances
    site     = Site.find params[ :id ]
    stores   = Store.current
    distances = []

    stores.map do |store|
      distance = Haversine.distance(site.address.latitude, site.address.longitude, store.address.latitude, store.address.longitude)
      distances << {
        name: store.name,
        value: distance
      }
    end

    render json: {
      distances: distances.to_json
    }

  end

пример вычисляемого элемента:

магазин2 : 5527.654499076738

в документе haversine gem есть метод конвертации: Distance.to_kilometers, но у меня он не работает! любая помощь ?


person Community    schedule 14.11.2018    source источник
comment
в какой единице вы получаете расстояние прямо сейчас?   -  person Sikandar Tariq    schedule 14.11.2018
comment
это Haversine::Distance unit   -  person    schedule 14.11.2018
comment
как это у вас не работает? Что он делает вместо этого? Можете ли вы показать, как вы пытались вызвать его?   -  person Simple Lime    schedule 14.11.2018
comment
привет @SimpleLime: вот так: расстояние = Haversine.distance(сайт.адрес.широта, сайт.адрес.долгота, магазин.адрес.широта, магазин.адрес.долгота).до_километров   -  person    schedule 14.11.2018
comment
переменная расстояния должна быть Haversine::Distance как тип класса, но при проверке она находится на Float ‹ Numeric!   -  person    schedule 14.11.2018
comment
а из числа с плавающей запятой вы можете легко преобразовать его в любую единицу измерения расстояния.   -  person Sikandar Tariq    schedule 14.11.2018
comment
как это ? потому что я не знаю, в какой единице это возвращаемое число с плавающей запятой!   -  person    schedule 14.11.2018


Ответы (1)


Вероятно, вам нужно вызвать метод to_kilometers для полученного Haversine::Distance, иначе будет использоваться его метод to_s:

def distances
  site = Site.find params[ :id ]

  distances = Store.current.map do |store|
    {
      name: store.name,
      value: Haversine.distance(
               site.address.latitude,
               site.address.longitude,
               store.address.latitude,
               store.address.longitude
             ).to_kilometers
    }
  end

  render json: {
    distances: distances
  }
end

Что вам действительно нужно сделать, так это добавить distance_in_km к вашему Address классу...

person eikes    schedule 14.11.2018
comment
в документации по драгоценным камням я обнаружил, что метод .to_kilometers существует, но он не работает, он показывает ошибку неопределенного метода - person ; 14.11.2018
comment
Вы забыли require 'haversine'? - person eikes; 14.11.2018