ormlite と jdbc を postgresql データベースに接続しました。私のデータ構造は事前定義されており、geometry と呼ばれる Postgis データ型が含まれています。このデータ型には、GIS アプリケーション用のさまざまなジオメトリ構造 (ポイント、ライン ストリング、ポリゴンなど) を含めることができます。ネイティブに Postgis は、このデータ型を geoJson またはその他の stringtyped gis 関連の形式に変換できます。
ormLite を Postgis で (文字列として) 直接使用すると、バイナリ形式になります。したがって、postgis 関数を使用して、このバイナリ形式を geoJson、KML などに変換したいと思います。
SQL では次のようになります。
select ST_AsGeoJson(geometrycolumn) from table;
また
update table set geometrycolumn = ST_GeomFromGeoJSON('{"type":"Point","coordinates":[-5.5,7.2]}')
モデルでは、このジオメトリ列に文字列としてアクセス (読み取り/書き込み) する必要があります。
ormlite 永続化を使用しようとしましたが、これでは遅すぎます。この時点で、永続化が (resultToSqlArg
またはを介してparseDefaultString
) 使用され、クエリがデータベースに送信され、postgres から要求された列を編集できません。Mrogには、これに関連する問題の解決策がありましたが、永続化も使用されていました。
また、特定のクラスを jdbc でオーバーライドしようとしました。しかし、SQL関数を「注入」する方法がわかりません。
または、生の SQL クエリを使用することもできます。しかし、使用する必要があるテーブルには他にも多くの属性があります。そして、データベースに対して 2 つのクエリを使用する必要があります (通常の属性に対して 1 回、ジオメトリ列に対して 1 回)。そして、私のオームの感覚は、生のSQLステートメントを使用しないことです。
別の解決策は、データベース側で geoJson 列を作成することです。ormLite はこれから読み取り、SQL トリガーを使用して元の列に書き込むことができます。しかし、それは悪い解決策です。
カスタム データ型を作成し、データベースではなくサーバー側で変換する必要がありますか? または、ネイティブのデータベース機能を使用するソリューションはありますか?