我们是一家基于 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,但我对这个过程一无所知。
非常感谢您的帮助。