【问题标题】:Find Records with X Miles of a known point in rails在rails中查找已知点的X英里记录
【发布时间】:2010-07-10 18:17:40
【问题描述】:

我有一个表格,其中包含许多记录及其长/纬度坐标。我正在尝试进行常见的“在 X 英里内显示所有内容”类型搜索,其中我的原点是使用浏览器中的地理位置拉取的用户当前的经度/纬度。

有没有人知道一种有效的方法来计算我的起点和各个潜在目的地之间的距离,而无需从数据库中检索所有这些目的地并循环遍历它们来计算距离?随着我们在潜在目标表中获得越来越多的记录,这似乎真的效率很低。

如果有一个很棒的 ruby​​/rails orient 解决方案,否则任何建议都将不胜感激。

【问题讨论】:

  • ...也许使用支持 GIS(关键字!)的数据库...
  • 伙计,这很难 杰夫的回答是立即修复,但费萨尔确实更符合我们的长期需求。请给我一个分开的答案选项:-) 和费萨尔一起去,因为……他需要更多的代表,对不起杰夫。

标签: ruby-on-rails geolocation


【解决方案1】:

如果您的数据库支持空间数据,请务必使用它。我喜欢geokit,但我需要根据空间数据进行查询,而不是全选并通过GIS进行过滤。我们正在运行 SQL Server 2005,它不支持空间数据(2008 支持)。这是我必须做的:

  def self.within_distance(miles, from_longitude, from_latitude)
    self.scoped(:conditions => ["((DEGREES(ACOS(SIN(RADIANS(:from_latitude)) *
                                SIN(RADIANS(latitude)) + 
                                COS(RADIANS(:from_latitude)) *
                                COS(RADIANS(latitude)) * 
                                COS(RADIANS(:from_longitude - longitude))))) * 69.09) < :miles", 
                                {:from_longitude => from_longitude, :from_latitude => from_latitude, :miles => miles}])
  end

我希望你能够避免将这个或类似的东西放进去的痛苦,但到目前为止,它就像一个魅力。

【讨论】:

    【解决方案2】:

    查看用于 Rails 的 Thinking sphinx 搜索插件:http://freelancing-god.github.com/ts/en/geosearching.html

    【讨论】:

    • 哇,我不知道斯芬克斯能做到这一点。我们需要在这个项目的后期进行全文搜索,所以我打算使用 sphinx。感谢您帮助用一块石头杀死 2 只鸟。
    • 很高兴,如果这有助于您解决问题,请考虑接受答案
    【解决方案3】:

    您应该查看所选数据库的空间扩展,Postres 和 Mysql 都支持这些扩展。

    然后,您可以查看一些可用于向 Rails 添加 GIS 支持的 gem。 Geokit 就是一个例子。

    【讨论】:

      【解决方案4】:

      如果您的数据库不支持空间数据,优化搜索的一种直接方法是计算一个带有“网格正方形”坐标的表格 - 设置任意网格分辨率,例如 10 英里,找出哪个网格正方形每条记录都在其中,并存储该信息。然后查询可以说类似“其中 grid_x >= 5 and grid_x = 13 and grid_y

      【讨论】:

        猜你喜欢
        • 2013-11-26
        • 1970-01-01
        • 1970-01-01
        • 2014-10-01
        • 2011-07-16
        • 2011-07-16
        • 1970-01-01
        相关资源
        最近更新 更多