8

PolygonMySQL から C# アプリケーションにデータを取得しようとしています。

Polygon地理データが保持されるフィールドを 1 つのテーブルに正確に定義しました。

証拠:

SELECT GeometryType(GeomFromText(AsWKT(object))) as `type` FROM geo.data;

戻り値:

ここに画像の説明を入力

したがって、テーブル内のオブジェクトは問題なく、正しく定義されています。

C# のソース コードがあります。

http://ideone.com/bn1urQ

主な行は (73-76) です。

//var polygon = (byte[])reader["object"];
//var obj = new MySqlGeometry(MySqlDbType.Blob, polygon);
var polygon = reader["object"].ToString();
var obj = MySqlGeometry.Parse(polygon);

コメントしましたが、これは両方の操作について説明するのに支障はありません。

  • BLOB次の逆シリアル化と同様に取得する
  • MySqlGeometry.Parse(System.String)メソッドを介してフェッチされた文字列を解析する

BLOB の取得

さて、コードのコメント部分から始めましょう。想像してみましょう。これらの行はコメント解除されており、75 行目と 76 行目は文字列解析されていません。

また、別の修正があります。MySQL サーバーに送信する SQL クエリは次のようになります。

SELECT AsWKB(object) as 'object' FROM geo.data

SQLクエリで関数AsWKT()AsWKB()(MySQLのテキストからバイナリフォーマッタに)変更しました。

したがって、このクエリの結果は次のようになります。

ここに画像の説明を入力

行で:

var polygon = (byte[])reader["object"];
var obj = new MySqlGeometry(MySqlDbType.Blob, polygon);

私がそのオブジェクトを取得してから配列BLOBに変換し、それからを構築しようとしていることがわかりますが、非常に残念で、MySQL ライブラリがこのオブジェクトをではなくとして識別しているようです。System.Byte[]MySqlGeomertyPOINTPOLYGON

証拠:

ここに画像の説明を入力

しかし!!!POLYGON次の SQL クエリによって、MySQL に正確にオブジェクトがあります。

SELECT GeometryType(GeomFromText(AsWKT(object))) as `type`,
                    AsWKT(object) as `data` FROM geo.data

証拠:

ここに画像の説明を入力

それはBLOBオブジェクトについてでした。

System.String からのジオメトリ解析

BLOBさて... コメント化されたフェッチを含む元のソースを想像してみましょう。

行を見てみましょう:

var polygon = reader["object"].ToString();
var obj = MySqlGeometry.Parse(polygon);

また、C# アプリのソース コードの SQL クエリを次のように変更する必要があります。

SELECT AsWKT(object) as 'object' FROM geo.data

はい... .NET 用の MySQL ライブラリは、System.String.

しかし、var polygon上記のように正しく取得されている を解析しようとすると、次のエラーが発生します。

System.FormatException: String does not contain a valid geometry value

証拠:

ここに画像の説明を入力 ここに画像の説明を入力

これらはすべて、MySQL ライブラリが MySQL サーバーからのデータ バインディングに完全な構造を提供していないように見えます。

4

1 に答える 1

0

MySQL公式フォーラムでも同様の質問をしました。ここにあります:

http://forums.mysql.com/read.php?38,596620,596620

Oracle チームの 1 人... Roberto Ezequiel Garcia Ballesterosは、MySQL .NET ドライバーは現在、そのようなタイプのジオメトリをサポートしていないと答えました。

http://forums.mysql.com/read.php?38,596620,596746#msg-596746

こんにちはオレグ、

申し訳ありませんが、サポートしているのは Point のみで、Polygon はサポートしていません。ご不便をおかけして申し訳ありません。

乾杯、 ロベルト

于 2013-10-28T13:14:49.860 に答える