繁体   English   中英

如何在模型中获取用户的经纬度

[英]How to get the user latitude and longitude in model

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

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

我的用户模型具有一个称为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方法。

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

在移动设备上,您将能够使用它并获得准确的位置,在Mac上的计算机上,Mac可以使用wifi来获得更精确的位置,但是大多数计算机却无法。

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

我猜想这是一个小型个人网站,您可以做的是,自动登录更安全,那就是使用您的连接IP和登录来代替。

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

除非用户身处某个大城市并且对(GPS / AGPS)设置了定位,否则不要期望过高的准确性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM