1

我们是一家基于 GIS RoR 的软件公司,它处理空间数据。目前,我们直接在Oracle中执行我们的纯SQL,但这是一个具有挑战性的过程,现在我们考虑切换到GeoRuby的想法。
我们希望在我们公司的 Oracle 数据库和 Rails 环境中采用 GeoRuby。
据您所知,没有用于此目的的结构良好的适配器。
目前,我正在开发自己的空间预言机适配器。现在,我可以使用迁移创建表和几何列。此外,我可以设法为表创建模型。
例如,假设有一个具有两个属性(名称:字符串和几何:几何)的 GeoShape 模型,我可以这样做:

g = GeoShape.new(:name => "Point1", geom: Point.from_x_y(-1.6, 2.8, 123))

执行上述语句后,我有:

=> #<GeoShape id: nil, name: "Point1", geom: <GeoRuby::SimpleFeatures::Point:0x6a3cb030 @srid=123, @with_z=false, @with_m=false, @y=2.8, @x=-1.6, @z=0.0, @m=0.0>, created_at: nil, updated_at: nil>

现在我想用 g.save 将我的模型保存到数据库中。

我收到以下完全合乎逻辑的错误,因为 GeoRuby 和 Oracle 类型之间的类型不匹配。

INSERT INTO "GEO_SHAPES" ("CREATED_AT", "GEOM", "ID", "NAME", "UPDATED_AT") VALUES (:a1, :a2, :a3, :a4, :a5)  [["created_at", Sun, 01 Jul 2012 04:34:34 UTC +00:00], ["geom", #<GeoRuby::SimpleFeatures::Point:0x6a3d3410 @srid=123, @with_z=false, @with_m=false, @y=2.8, @x=-1.6, @z=0.0, @m=0.0>], ["id", 10053], ["name", "Point1"], ["updated_at", Sun, 01 Jul 2012 04:34:34 UTC +00:00]]
ActiveRecord::StatementInvalid: OCIError: ORA-00932: inconsistent datatypes: expected MDSYS.SDO_GEOMETRY got CHAR: INSERT INTO "GEO_SHAPES" ("CREATED_AT", "GEOM", "ID", "NAME", "UPDATED_AT") VALUES (:a1, :a2, :a3, :a4, :a5)   


有人对这样做的过程有任何想法吗?
我想,我必须将我的 GeoRuby 结构映射到相应的 Oracle SDO_Geometry,但我对这个过程一无所知。

非常感谢您的帮助。

4

2 回答 2

1

有一个不错的宝石rgeo

其核心是行业标准 OGC 简单特征规范的实现,该规范提供了点、线和多边形等几何对象的数据表示,以及一组几何分析操作。这使其成为地理定位数据建模的理想选择。它还支持一套提供各种地理定位相关服务的可选附加模块。

于 2012-07-01T11:43:22.373 回答
0

我可以做到这一点。现在我可以直接从 GeoRuby 模型保存到 Oracle DB。该过程在线程中进行了说明。

于 2012-07-04T18:29:29.057 回答