我正在开发一个需要位置数据存储在MySQL表上的应用程序。除了点位置,我还需要区域(多边形)。
我目前正在按如下方式编写多边形坐标:
oMySQLConnecion = new MySqlConnection(DatabaseConnectionString);
if (oMySQLConnecion.State == System.Data.ConnectionState.Closed || oMySQLConnecion.State == System.Data.ConnectionState.Broken)
{
oMySQLConnecion.Open();
}
if (oMySQLConnecion.State == System.Data.ConnectionState.Open)
{
string Query = @"INSERT INTO region (REGION_POLYGON) VALUES (PolygonFromText(@Parameter1))";
MySqlCommand oCommand = new MySqlCommand(Query, oMySQLConnecion);
oCommand.Parameters.AddWithValue("@Parameter1", PolygonString);
int sqlSuccess = oCommand.ExecuteNonQuery();
oMySQLConnecion.Close();
oDBStatus.Type = DBDataStatusType.SUCCESS;
oDBStatus.Message = DBMessageType.SUCCESSFULLY_DATA_UPDATED;
return oDBStatus;
}
执行后,我在MySQL表中看到了Blob。
现在我想读回数据以进行测试,但是它不能像我下面尝试的那样工作:
if (oMySQLConnecion.State == System.Data.ConnectionState.Open)
{
string Query = @"SELECT REGION_ID,REGION_NICK_NAME,GeomFromText(REGION_POLYGON) AS POLYGON FROM region WHERE REGION_USER_ID = @Parameter1";
MySqlCommand oCommand = new MySqlCommand(Query, oMySQLConnecion);
oCommand.Parameters.AddWithValue("@Parameter1", UserID);
using (var reader = oCommand.ExecuteReader())
{
while (reader.Read())
{
R_PolygonCordinates oRec = new R_PolygonCordinates();
oRec.RegionNumber = Convert.ToInt32(reader["REGION_ID"]);
oRec.RegionNickName = reader["REGION_NICK_NAME"].ToString();
oRec.PolygonCodinates = reader["POLYGON"].ToString();
polygons.Add(oRec);
}
}
int sqlSuccess = oCommand.ExecuteNonQuery();
oMySQLConnecion.Close();
return polygons;
}
它返回一个空字符串。
**注意:**我正在使用Visual Studio2017。MySQL具有空间类的最新版本。
我们非常感谢您的帮助。
谢谢
答案 0 :(得分:2)
GeomFromText()
以WKT(标准化的“知名文本”格式)值作为输入,并返回MySQL内部几何类型作为输出。
这与您所需要的相反,即ST_AsWKT()
或ST_AsText()
-以内部格式的几何对象作为输入,并返回WKT作为输出。
在5.6之前,该函数称为AsWKT()
或AsText()
。在5.7中,这些都是完全相同功能的同义词,但不推荐使用ST_*
功能,以后将删除它们。
https://dev.mysql.com/doc/refman/5.7/en/gis-format-conversion-functions.html#function_st-astext
我不确定ST_
前缀的含义,但我认为它是“空间类型”。 WL#8055中有一些有趣的讨论。