我希望能够使用各种三角函数来使用SQLite数据库从ruby中找出纬度和经度之间的距离。 SQLite不提供三角函数(cos
,sin
,pow
)所以我正在寻找如何实现这些函数 - 任何想法?
我知道我可以使用其他数据库(PostgreSQL,MySQL等),但我需要使用SQLite,因此不需要安装数据库。关于如何编译我可以插入sqlite3 gem的SQLite扩展的任何想法?
谢谢!
答案 0 :(得分:1)
如果编写扩展名的工作太多,我通常会针对这个问题做的是通过使用lat / lng边界框来近似我想要选择的距离(并估算一点),这样可以显着减少样本空间,然后迭代在ruby中的那个集合,找到正确距离内的精确点集。
编辑:看起来有人已经编写了一个库,可以让您轻松地定义函数,就好像它们是存储过程一样。我不知道它是否是一个ruby实现,或者它是否有一些技巧,首先将它编译为C,所以我不知道性能,但它似乎很容易使用。 https://github.com/copiousfreetime/amalgalite
require 'rubygems'
$: << "../lib"
$: << "../ext"
require 'amalgalite'
db = Amalgalite::Database.new( "mydb.sqlite" )
db.define_function( 'geo_dist' ) do |lat1, lng1, lat2, lng2|
# Haversine formular here to calculate the distance
end
这是完整的例子 https://github.com/copiousfreetime/amalgalite/blob/master/examples/define_function.rb