如何从mysql表格读取多边形数据

f87krz0w  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(409)

我正在开发一个应用程序,我需要位置数据存储在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;
            }

它返回一个空字符串。
我不确定我是否真的在写数据,因为我无法读取blob。
我的阅读语法不正确吗?

**注意:**我使用的是visual studio 2017。mysql的最新版本,带有空间类。

非常感谢您的帮助。
谢谢

tvokkenx

tvokkenx1#

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-A文本
我不知道确切的原因是什么 ST_ 前缀的意思是,但我假设它是“空间类型”。wl#8055中的一些讨论可能会引起兴趣。

相关问题