【问题标题】:Writing a GeoRuby Oracle Adapter for Ruby 1.9 and Rails 3.2.5为 Ruby 1.9 和 Rails 3.2.5 编写 GeoRuby Oracle 适配器
【发布时间】:2012-07-05 02:29:29
【问题描述】:

我们是一家基于 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,但我对这个过程一无所知。

非常感谢您的帮助。

【问题讨论】:

    标签: ruby-on-rails ruby oracle activerecord georuby


    【解决方案1】:

    有一颗不错的宝石rgeo

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

    【讨论】:

    • 很遗憾 rgeo 缺乏对 Oracle 的支持,也没有兼容的适配器;所以这个问题是不可撤销的。
    • 所以你必须为 oracle 创建自己的适配器并分享给社区)
    • 是的,我有这个想法,但是,首先我更喜欢 GeoRuby,不是因为它“好”,而是只有一些现有的 oracle 适配器可供我借鉴。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-30
      • 2012-02-17
      • 1970-01-01
      • 2010-11-12
      • 2011-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多