ruby-on-rails - 在 Ruby 中计算大量 Lat/Lngs 到一组 2000 Lat/Lngs

标签 ruby-on-rails ruby gis

我正在尝试找到解决以下问题的最佳方法:

问题

我在集合 A 中有(最多)100,000 个纬度/经度点 我在 B 组中有(最多)2000 个纬度/经度点

我需要找到集合 B 中的点与集合 A 中的点最近的邻居。

一旦它们配对 - 然后我需要计算它们的距离,这将是: 2000 组 A 点到 2000 组 B 点。

这些点“在内存中”,它们不是来自数据库 - 它们是在系统中完成的其他计算的结果。

当前解决方案

使用 Ruby 中的 KDTree 实现,我可以创建一个 KDTree 查找来匹配我​​拥有的点。然后,我使用 Ruby 中的半正弦方法来计算点配对时的距离。

KDtree 代码:Ruby KDTree Code 半正弦代码:Haversine Code

平台

我正在运行 jruby - 以 rails 作为网络框架。

问题

它很慢!慢了 30 到 40 秒......我认为主要的瓶颈在 KDtree 中,但点查找也需要很长时间(我认为)。在 B 组中的分数越小,速度越快,但 B 组中的分数越高,它变得更快。

问题

有人会想出不同的做法吗?有什么我想念的吗?我认为 Java 库可能要快得多,但我将如何实现它,以及我会使用哪个(Java 不强 - 我使用 Jruby 在 JVM 中处理多线程 ruby​​ 代码)

最佳答案

是否可以将信息保存到数据库中?因为那样你就可以使用 GeoKit ,它利用地理感知数据库(MySQL、Postgres > 8.1 等),因此您可以执行以下操作:

Location.find(:all, :origin =>[37.792,-122.393], :within=>10, :order=>"distance asc")

此外,您还可以找到两点之间的距离等。响应时间将更接近于数据库查询,并且比您所看到的要快得多。

关于ruby-on-rails - 在 Ruby 中计算大量 Lat/Lngs 到一组 2000 Lat/Lngs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9888562/

相关文章:

css - Rails Font-Awesome 不显示 - 使用错误的文件名

ruby-on-rails - [13] :Array 的未定义方法 `assign_attributes'

html - 相同的部分在两个相同的应用程序中表现不同

ruby-on-rails - 使用 Ruby 通过嵌套 JSON 对象进行过滤并获取具有特定键的 JSON

ruby-on-rails - Heroku上传-预编译 Assets 失败

r - 与我的 shapefile 关联的 proj4 字符串是什么?

r - 在 Centos 上安装 rgdal 和 gdal 时遇到问题

ruby - 使单元测试快速失败以进行突变测试

ruby-on-rails - 使用 pagey gem 对哈希进行分页

php - 使用准备好的语句插入 GIS 几何图形