【问题标题】:How to get the user latitude and longitude in model如何在模型中获取用户的经纬度
【发布时间】:2016-01-28 00:02:07
【问题描述】:

我打算在验证当前用户是否位于某个区域之后执行一些 ruby​​ on rails 代码。我的问题是,当使用request.location 值时,我得到的纬度和经度与我从谷歌地图得到的不对应。 还有其他方法可以获取用户位置吗?我想避免使用 JavaScript 代码,因为我需要在该位置的某些条件下编辑一个 ruby​​ 模型,而我已经为此奋斗了一段时间.

顺便说一句,我正在为用户模型使用设计。

我的用户模型有一个名为 signed_in 的字段,它是一个布尔值,用于存储用户是否仅在一个指定区域登录。

class User < ActiveRecord::Base

 def is_at_place(lat, lon)
      #place = [-17.792365,-63.182531] #this is the actual place
      place = [-17.0000, -63.0000] #this is my home
      delta = 0.003000
      #latitude range
      rlat = (place[0]+delta)..(place[0]-delta)
      #longitude range
      rlon= (place[1]+delta)..(place[1]-delta)
      if rlat.include?(lat) and rlon.include?(lon)
        return true
      else
        return false
      end
    end

def set_signed_in(latitude, longitude)
    if is_at_place(latitude, longitude)
      user = User.find(session["warden.user.user.key"][0][0])
      user.signed_in = true
      user.save
      flash.alert = "Succesfully logged in"
    else
      flash.alert = "Succesfully logged in but as a outside user"
    end
  end

我需要将纬度和经度传递给用户模型中的set_signed_in 方法。

【问题讨论】:

  • 您能否展示一下您将使用user model 制作的版本以及何时制作?
  • 好的。我现在就编辑它。
  • I get latitude and longitude that do not correspond to the ones I got from google maps. 你在谷歌地图中输入了一个地址,然后将它的经度、纬度与你得到的进行比较?因为那做不到。除了提供准确位置的设备(如智能手机),返回的位置不会是确切位置,而是近似位置。
  • @eXa Google 地图为我提供了非常精确的当前位置。使用 Javascript 函数也会返回正确的纬度和经度。但是当使用request.location.latituderequest.location.longitude 时,我得到不同的值,因为我的IP 地址是从其他地方引用的,而不是我的实际位置。你明白我了吗?

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


【解决方案1】:

我不知道你是要手机还是电脑。

在移动设备上,您可以使用它并获得准确的位置,在计算机上,Mac 可以使用 wifi 获得更精确的位置,但大多数计算机不会。

问题是,如果您的服务器可以从外部访问,这将是一个安全问题,因为位置欺骗很容易。

我猜这是一个小型个人网站,如果使用自动登录更安全,您可以使用您的连接 IP 并在此基础上登录。

【讨论】:

    【解决方案2】:

    还要查看 maxmind 的 geoip 数据库,以防浏览器不向您发送标头;他们有一个基于网络的版本,还有一个您可以在本地存储的版本。还有 Teliza 和 Freegeoip.net。

    不要期望太高的准确度,除非用户在某个大城市并开启了位置服务 (GPS/AGPS)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-04
      • 2015-04-15
      • 1970-01-01
      • 2012-06-06
      • 2011-08-26
      • 1970-01-01
      • 2022-12-19
      • 1970-01-01
      相关资源
      最近更新 更多