我正在尝试在 Jruby 文件中运行http://www.savarese.com/software/libssrckdtree-j/ 。
我的代码看起来像这样:
require 'java'
require 'libssrckdtree-j-1.0.2.jar'
GenericPoint = Java::com.savarese.spatial.GenericPoint
KDTree = Java::com.savarese.spatial.KDTree
NearestNeighbors = Java::com.savarese.spatial.NearestNeighbors
tree = KDTree.new
def generate_points(tree, size)
size.times do
x = rand(100)
y = rand(100)
point = GenericPoint.new(x, y)
tree.put(point, point.to_s)
end
end
generate_points(tree, 20000)
nearest = NearestNeighbors.new()
point = [1,1]
nearest.get(tree, point, 1, false)
但是,当我运行此代码时,我得到
NameError: no method 'get' for arguments (com.savarese.spatial.KDTree,org.jruby.RubyArray,org.jruby.RubyFixnum,org.jruby.RubyBoolean) on Java::ComSavareseSpatial::NearestNeighbors
(root) at kdjava.rb:25
我没有得到,因为库的文档说要使用 get,我使用 put on tree 来表示 KDtree,它起作用了。
我想要做的是使用这个库将一系列 lat lngs 构建到一个 kd 树中,然后查询另一组 lat lngs 以查看它们在 KD 树中最近的邻居。
我在 Ruby 上还可以——但我在 Java 上很烂。我正在使用 Jruby 来利用这些更快的库。