8

我正在尝试将Polygon数据从 MySQL 提取到我的 C# 应用程序中。

我已经在一张表中准确定义了Polygon地理数据所在的字段。

证明:

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对象,然后将其转换为System.Byte[]数组,然后我才MySqlGeomerty尝试POINT构建POLYGON.

证明:

在此处输入图像描述

但!!!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

甲骨文团队的一位男士... 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 回答