私たちは、空間データを扱うGISRoRベースのソフトウェア会社です。現在、Oracleで純粋なSQLを直接実行していますが、これは困難なプロセスであるため、GeoRubyに切り替えることを検討しています。
当社のOracleデータベースとRails環境でGeoRubyを採用したいと考えています。
おそらくご存知のように、この目的のための適切に構造化されたアダプターはありません。
現在、私は自分の空間オラクルアダプタに取り組んでいます。今のところ、移行を使用してテーブルとジオメトリ列を作成できます。また、テーブルのモデルを作成することもできます。
たとえば、2つのプロパティ(name:stringとgeom:geometry)を持つ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を使用してモデルを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)
誰かがこれを行うプロセスについて何か考えがありますか?
GeoRuby構造を対応するOracleSDO_Geometryにマップする必要があると思いますが、プロセスについてはわかりません。
ご協力ありがとうございます。