Jruby ファイル内でhttp://www.savarese.com/software/libssrccdtree-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を使用するように記載されているため、取得できません。KDtreeにput on treeを使用すると機能しました。
私がやろうとしているのは、このライブラリを使用して一連の緯度経度を kd ツリーに構築し、別の緯度経度のセットをクエリして、KD ツリー内の最も近い隣人を確認することです。
Ruby は大丈夫ですが、Java は苦手です。これらのより高速なライブラリを利用するために Jruby を使用しています。