ruby-on-rails - geokit——在 Rails 中使用原始经纬度

标签 ruby-on-rails ruby ruby-on-rails-3 geolocation geokit

我一直在使用 GeoKit for Rails,效果很好。但是,我注意到在提取大量列表时加载速度非常慢。

我想知道是不是因为它在返回结果之前查询了谷歌或一些外部资源。如果是这样,有没有办法使用原始经纬度坐标(我有)来简单地在内部计算距离?

或者一个简单的 ruby​​ 公式可以为我做这件事?

最佳答案

距离方面:

Geokit-gem提供了一种计算两点间距离的方法:

# model has acts_as_mappable
Model.distance_between obj1, obj2, :units => :kms, :formula => :sphere

Finder-wise:

Geokit-rails(一个插件)有一个查找器,可以生成 SQL(用于 mysql、postgres 和 SQL server)来计算距离,让你找到一定距离内的行:

Model.find_within(100, :units => :kms)

它计算所有行的距离,但不需要查询外部资源。如果你的表格真的很大,它可能会帮助(但我不太确定它会)通过首先预先计算 lat/lng 范围来缩小它:

Model.where(:lat => (x-0.05)..(x+0.05), :lng => (y-0.05)..(y+0.05)).find_within(z, :units => :kms)

如果仍然没有帮助,您将不得不编写一些自定义的 SQL。 geokit-rails 的 sql 距离计算在这里: https://github.com/andre/geokit-rails/tree/master/lib/geokit-rails/adapters

关于ruby-on-rails - geokit——在 Rails 中使用原始经纬度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6859892/

相关文章:

ruby-on-rails - 带有 Rails 5.1 的 Redis 打破了 Rspec

ruby-on-rails - Rake 或 Rails 数据库 :migrate

javascript - Rails Ajax 搜索

css - 已加载但未在 rails 4 中应用的 Assets

php - ruby openssl hmac php 等价物

ruby-on-rails - 将字符串转换为Datetime Rails

c# - 使用 Ruby 连接到需要用户名、密码和安全证书(.cer 文件)才能连接到它的 Microsoft SOAP Web 服务

ruby - elsif 包含在数组中的字母

javascript - Jquery Tokeninput 和动态嵌套表单

ruby-on-rails-3 - 将模板传递给 "rails new"