【问题标题】:MySql drivers for .NET doesn't support Polygon struct, does it?.NET 的 MySql 驱动程序不支持 Polygon 结构,是吗?
【发布时间】:2013-10-09 00:16:56
【问题描述】:

我正在尝试从 MySQL 获取 Polygon 数据到我的 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,但很遗憾,似乎就是这样MySQL 库将此对象标识为POINT,而不是POLYGON

证明:

但是!!!通过下一个 SQL 查询,我在 MySQL 中有确切的 POLYGON 对象:

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

证明:

那是关于 BLOB 对象的。

从 System.String 解析几何

现在...让我们想象一下带有评论的BLOB fetching 的原始来源。

让我们看看行:

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 服务器的数据绑定提供完整的结构。

【问题讨论】:

    标签: c# mysql serialization geometry blob


    【解决方案1】:

    我也在MySQL官方论坛上问过类似的问题,在这里:

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

    Oracle 团队的一个人...Roberto Ezequiel Garcia Ballesteros 回答我说 MySQL .NET 驱动程序目前不支持这种类型的几何:

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

    嗨,奥列格,

    恐怕我们只支持 Point 而 Polygon。为...抱歉 不便。

    干杯,罗伯托

    【讨论】:

      猜你喜欢
      • 2011-03-15
      • 2021-08-22
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-24
      相关资源
      最近更新 更多