新規作成日 2019-02-25
最終更新日
PostGISレガシー型のプラグイン
4.0以降、Npgsqlは、外部nugetパッケージの型プラグインをサポートしています。Npgsqlが、PostgreSQL値のCLR型へのマッピングを、どのように変更するか、PostGIS空間型のための以前のサポートは、Npgsqlの外のNpgsql.LegacyPostgisプラグインに、移動しました。空間型を読み書きする推奨された方法は、現在、空間専用のより完全なライブラリのNetTopologySuiteにPostGIS型をマッピングする、Npgsql.NetTopologySuiteです。NetTopologySuiteプラグインは、現在、Npgsqlで空間を作成するために、推奨される方法ですが、Npgsql.LegacyPostgisは、依然として、以前の型をサポートするために、存在しています。
この時点で、レガシー型は、ジオグラフィと(XYZ、XYMやXYZMではなく)XYだけではなく、ジオメトリだけをサポートしています。
設定
Setup
PostGISの従来のプラグインを使用するために、単純に、Npgsql.LegacyPostgisへの依存関係を追加し、設定するだけです。:
using Npgsql;
// Place this at the beginning of your program to use legacy PostGIS everywhere (recommended):
// 従来のPostGISを、どこでも使用する(推奨)ために、これをプログラムの最初に置いてください。
NpgsqlConnection.GlobalTypeMapper.UseLegacyPostgis();
// Or to temporarily use legacy PostGIS on a single connection only:
// あるいは、単一の接続でのみで、従来のPostGISを一時的に使用するには:
conn.TypeMapper.UseLegacyPostgis();
使用法
Usage
あなたが、Npgsql 3.2以前に、内部のPostGIS型を使ったことがある場合、プラグインは、同じように動作します:
NpgsqlConnection.GlobalTypeMapper.UseLegacyPostgis();
// Write
var cmd = new NpgsqlCommand("INSERT INTO table (pg_point, pg_polygon) VALUES (@point, @polygon)", conn);
cmd.Parameters.AddWithValue("point", new PostgisPoint(3.5, 4.5));
cmd.ExecuteNonQuery();
// Read
var cmd = new NpgsqlCommand("SELECT * FROM table", conn);
var reader = cmd.ExecuteReader();
while (reader.Read()) {
var point = reader.GetFieldValue<PostgisPoint>(0);
var polygon = reader.GetFieldValue<PostgisPolygon>(1);
}