3

我正在使用 Ruby 1.8.7 和 Rails 2.3.8,并且有多个位置由纬度和经度表示。我正在使用 SQLite SpatiaLite 扩展将坐标转换为众所周知的二进制 (WKB) 格式。我关心的是如何让 ActiveRecord 执行插入或更新,调用适当的 SpatiaLite 转换方法。我想做这样的事情:

obj.geometry = "AsBinary(MakePoint(4, 51))"
obj.save
# ActiveRecord would now do something like:
# INSERT INTO objects (geometry) VALUES (AsBinary(MakePoint(4, 51)))

这可能与 ActiveRecord 吗?

我已经尝试过 GeoRuby,但是虽然它能够正确读取 WKB blob,但它无法将它们保存为与 SpatiaLite 相同的格式。

谢谢!

4

2 回答 2

0

我还没有使用GeoRuby,但是对于空间数据我使用了thinking-sphinx 和@geodist 功能,使用工具非常好。

您可以阅读一些资源:

于 2011-11-11T08:02:53.453 回答
0

经过几天的搜索并没有找到解决方案,我决定简单地利用原始连接来执行实际的插入:

rc = ActiveRecord::Base.connection.raw_connection
rc.execute("INSERT INTO objects (geometry)
            VALUES (MakePoint(#{obj.lng}, #{obj.lat}))")
于 2011-11-14T12:13:43.417 回答