我们是一家基于GIS RoR的软件公司,负责处理空间数据。
目前,我们直接在Oracle中执行纯SQL,但这是一个具有挑战性的过程,现在我们考虑切换到GeoRuby的想法。
我们希望将GeoRuby与我们公司的Oracle数据库和Rails环境一起使用。
据您所知,没有结构良好的适配器用于此目的。
目前,我正在开发自己的空间oracle适配器。
现在,我可以使用迁移创建表格和几何列。此外,我可以设法为表创建模型。
例如,假设GeoShape模型具有两个属性(名称:string和geom:geometry),我可以这样做:
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将我的模型保存到DB。
我收到以下错误,这是完全合乎逻辑的,因为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)
<小时/> 有人知道这样做的过程吗?
非常感谢您的帮助。