Home > C# > Npgsql > ドキュメント

PostGIS/GeoJSON型のプラグイン

新規作成日 2019-02-25
最終更新日

PostGIS/GeoJSON型のプラグイン

PostGIS/GeoJSON Type Plugin

4.0以前は、Npgsqlは、いくつかのバンドルされた.NETクラスを通して、PostGIS型の読み書きをサポートしています。:PostgisPoint、PostgisLineStringなど。このモデルは、いくつかの基本的なサポートを提供していますが、空間型の適切な表示は、複雑な作業です。それは、Npgsqlの範囲を超えています。そして、代わりに、特殊な空間ライブラリによって処理する必要があります。

Npgsql.GeoJSONプラグインは、Npgsqlを読み込みを作成します。そして、GeoJSON.NETライブラリを通して、GeoJSON(RFC7946)型として、PostGISに空間型を記述します。

代わりに、あなたは、多くの機能を持った、本格的な.NET空間ライブラリのNpgsql.NetTopologySuiteを使用することができます。あなたが、4.0より前の型の作業を優先する場合、あなたは、依然として、Npgsql.LegacyPostgisプラグインを使用することにより、それを行うことができます。

設定

Setup

GeoJSONプラグインを使用するために、単純に、Npgsql.GeoJSONへの依存関係を追加し、設定するだけです。:

using Npgsql;

// Place this at the beginning of your program to use NetTopologySuite everywhere (recommended)
// どこでもNetTopologySuiteを使う(推奨)ために、あなたのプログラムの先頭に、これを配置します。
NpgsqlConnection.GlobalTypeMapper.UseGeoJSON();

// Or to temporarily use GeoJSON on a single connection only:
// あるいは、単一の接続でのみで、GeoJSONを一時的に使用するには:
conn.TypeMapper.UseGeoJSON();

ジオメトリ値の読み書き

Reading and Writing Geometry Values

データベースから、PostGIS値を読み込むとき、Npgsqlは、適切な、GeoJSON型を自動的に返します。:Point、LineStringなど、Npgsqlは、自動的に、パラメータのGeoJSONの型も認識します。そして、自動的に、対応するPostGIS型をデータベースに送信します。次のコードは、GeoJSON Pointとデータベースの往復を説明します。:

var point = new Point(new Position(51.899523, -2.124156));
conn.ExecuteNonQuery("CREATE TEMP TABLE data (geom GEOMETRY)");
using (var cmd = new NpgsqlCommand("INSERT INTO data (geom) VALUES (@p)", conn))
{
    cmd.Parameters.AddWithValue("@p", point);
    cmd.ExecuteNonQuery();
}

using (var cmd = new NpgsqlCommand("SELECT geom FROM data", conn))
using (var reader = cmd.ExecuteReader())
{
    reader.Read();
    Assert.That(reader[0], Is.EqualTo(point));
}

あなたは、NpgsqlDbType.Geometryを設定して、パラメータの型を明示的に指定することもできます。

地理(測地)のサポート

Geography (geodetic) Support

PostGISは、2つの型を持っています。:(直角座標のための)ジオメトリーと(測地や球状座標のための)地理。幾何学/地理学の違いについては、あなたは、PostGISのドキュメントこのブログ記事で読むことができます。一言で言えば、長距離にわたって計算する場合、地理は、遙かに正確ですが、更に、計算が、高くつきます。そして、ジオメトリーによって、サポートされている空間操作の小さなサブセットだけをサポートします。

Npgsqlは、ジオメトリーと地理を表現するために、同じ、GeoJSON型を使用します。-Point型は、Cartesianや測地空間の点を示します。PostgreSQLが、通常、必要に応じて、前後に型をキャストするため、あなたは、通常、この違いについて気にする必要ありません。しかしながら、通常の要件であるため、デフォルトで、Npgsqlが、Cartesian幾何を送信する価値があります。あなたは、代わりに、NpgsqlDbType.Geographyを指定することによって、Npgsqlにジオメトリ送信するように指示するオプションを持っています。:

using (var cmd = new NpgsqlCommand("INSERT INTO data (geog) VALUES (@p)", conn))
{
    cmd.Parameters.AddWithValue("@p", NpgsqlDbType.Geography, point);
    cmd.ExecuteNonQuery();
}

あなたが、既定で、どこでも、ジオメトリを使用したい場合、あなたは、プラグインを設定するとき、それを指定することもできます:

NpgsqlConnection.GlobalTypeMapper.UseGeoJSON(geographyAsDefault: true);
このエントリーをはてなブックマークに追加

Home PC C# Illustration

Copyright (C) 2011 Horio Kazuhiko(kukekko) All Rights Reserved.
kukekko@gmail.com
ご連絡の際は、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません。」