.NET的MySql驱动程序不支持Polygon结构,是吗?

8 c# mysql geometry serialization blob

我正在尝试Polygon从MySQL 获取数据到我的C#应用​​程序中.

我在一个表中确切地定义了Polygon地理数据所在的字段.

证明:

SELECT GeometryType(GeomFromText(AsWKT(object))) as `type` FROM geo.data;
Run Code Online (Sandbox Code Playgroud)

返回:

在此输入图像描述

因此表中的对象很好并且正确定义.

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);
Run Code Online (Sandbox Code Playgroud)

我评论过,但这不是告诉你这两个操作的障碍:

  • 检索BLOB与下一个反序列化一样
  • 通过MySqlGeometry.Parse(System.String)方法解析获取的字符串

BLOB检索

好吧,我将从注释的代码部分开始,让我们想象一下,这些行是未注释的,并且没有使用字符串解析的第75行和第76行.

还有另一个更正,发送到MySQL服务器的SQL查询必须如下所示:

SELECT AsWKB(object) as 'object' FROM geo.data
Run Code Online (Sandbox Code Playgroud)

我刚刚将SQL查询函数AsWKT()更改为AsWKB()(从MySQL的文本到二进制格式化程序).

因此,此查询的结果将是:

在此输入图像描述

在线:

var polygon = (byte[])reader["object"];
var obj = new MySqlGeometry(MySqlDbType.Blob, polygon);
Run Code Online (Sandbox Code Playgroud)

您可以看到我正在获取该BLOB对象,然后将其转换为System.Byte[]数组,然后我才尝试构建它MySqlGeomerty,但是非常可惜并且似乎是MySQL库将此对象识别为a POINT,而不是a POLYGON.

证明:

在此输入图像描述

但!!!POLYGON通过下一个SQL查询,我在MySQL中拥有完全对象:

SELECT GeometryType(GeomFromText(AsWKT(object))) as `type`,
                    AsWKT(object) as `data` FROM geo.data
Run Code Online (Sandbox Code Playgroud)

证明:

在此输入图像描述

这是关于BLOB对象的.

从System.String解析几何

现在......让我们想象一下带注释的原始来源BLOB.

我们来看看这些台词:

var polygon = reader["object"].ToString();
var obj = MySqlGeometry.Parse(polygon);
Run Code Online (Sandbox Code Playgroud)

并将C#app源代码中的SQL查询更改为:

SELECT AsWKT(object) as 'object' FROM geo.data
Run Code Online (Sandbox Code Playgroud)

是的......用于.NET的MySQL库据称提供了另一种几何形状的图形System.String.

但是,当我试图解析var polygon,正如你在上面看到的那样正确检索时,我得到了下一个错误:

System.FormatException: String does not contain a valid geometry value
Run Code Online (Sandbox Code Playgroud)

证明:

在此输入图像描述 在此输入图像描述

所有这些看起来都是这样,MySQL库没有为MySQL服务器提供数据绑定的完整结构.

小智 0

我也在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

嗨奥列格,

恐怕我们只支持点而不支持多边形。对不起给您带来不便。

干杯,罗伯托