Как читать из таблицы MySQL данные Polygon - PullRequest
0 голосов
/ 25 июня 2018

Я занимаюсь разработкой приложения, в котором мне нужно хранить данные о местоположении в таблице 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;
            }

После выполнения я вижу BLOB-объект в MySQLтаблица.

enter image description here

Теперь я хочу прочитать данные обратно для моего тестирования, и они не работают так, как я пытался описать ниже:

 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;
            }

Возвращает пустую строку.

  1. Я не уверен, действительно ли я записываю данные, поскольку не могу прочитать BLOB-объекты.
  2. Неправильно ли мой синтаксис чтения?

** Примечание: ** Я использую Visual Studio 2017. Последняя версия MySQL с классами Spacial.

Любая помощь высоко ценится.

Спасибо

1 Ответ

0 голосов
/ 25 июня 2018

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 есть интересное обсуждение.

...