【问题标题】:Geocoder,s gem near method not working on rails 5Geocoder,s gem near 方法在 Rails 5 上不起作用
【发布时间】:2017-11-13 20:29:35
【问题描述】:

一直在尝试使用 geocoder gem 来查找位置,使用 geocoders 方法 near 来查找某些点附近的某些位置。

def index
  @data = Datum.all

   @emergency = Emergency.last
   @data_near = Datum.near([@emergency.longitude,@emergency.latitude],100,:units => :km)

  @geojson = Array.new

  @data_near.each do |mapdata|
     @geojson << {
          type: 'Feature',
          geometry: {
            type: 'Point',
            coordinates: [mapdata.longitude, mapdata.latitude]
          },
          properties: {
            name: mapdata.description,
            address: mapdata.address,
            BusType: 'hospital',
            popupContent: "#{mapdata.address} is a #{mapdata.description}",
            :'marker-color' => '#00607d',
            :'marker-symbol' => 'circle',
            :'marker-size' => 'medium'
          }
        }
  end
  respond_to do |format|
     format.html
     format.json{ render json: @geojson }
  end

结束

这就是我要运行的代码,即使指定参数内的位置附近存在,它也会返回一个空数组。当我尝试使用真实点直接在rails控制台中运行代码时。例如。

data = Datum.near([36.7689503,-1.381776],10,:units => :km)

我没有生成任何错误,但我得到的输出不可读或难以理解。输出是:

Datum Load (0.3ms)  SELECT  data.*, (111.19492664455873 * ABS(data.latitude - 36.7689503) * 0.7071067811865475) + (96.29763124613503 * ABS(data.longitude - -1.381776) * 0.7071067811865475) AS distance, CASE WHEN (data.latitude >= 36.7689503 AND data.longitude >= -1.381776) THEN  45.0 WHEN (data.latitude <  36.7689503 AND data.longitude >= -1.381776) THEN 135.0 WHEN (data.latitude <  36.7689503 AND data.longitude <  -1.381776) THEN 225.0 WHEN (data.latitude >= 36.7689503 AND data.longitude <  -1.381776) THEN 315.0 END AS bearing FROM "data" WHERE (data.latitude BETWEEN 36.67901813940813 AND 36.85888246059187 AND data.longitude BETWEEN -1.4940430256783075 AND -1.2695089743216923) ORDER BY distance ASC LIMIT ?  [["LIMIT", 11]]




 => #<ActiveRecord::Relation []> 

我们将不胜感激。

【问题讨论】:

    标签: ruby-on-rails ruby google-maps geocoder


    【解决方案1】:
    t.string "longitude"
    t.string "latitude"
    

    在数据库中使用错误的字符串数据类型保存了我的坐标,应该使用浮点数据属性保存坐标。这为可能遇到相同问题的任何人解决了我的问题。这是一个很好的地方开始检查。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-28
      • 1970-01-01
      • 2013-12-26
      • 1970-01-01
      相关资源
      最近更新 更多