Как читать из таблицы MySQL данные Polygon

0

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

Изображение 174551

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

 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
    Я не думаю, что вы хотите SELECT GeomFromText() - я подозреваю, что вы хотите наоборот, AsWKT() или ST_AsWKT() .
  • 0
    Отлично ... Работает (использовал AsWKT ()) ...! В чем разница между AsWKT () и ST_AsWKT ()?
Теги:
gps
polygon

1 ответ

1
Лучший ответ

GeomFromText() принимает WKT (стандартизованный формат "хорошо известного текстового формата") в качестве входных данных и возвращает внутренний тип геометрии MySQL в качестве вывода.

Это инверсия того, что вам нужно, это ST_AsWKT() или ST_AsText() - взять объект геометрии внутреннего формата в качестве входного и вернуть WKT в качестве вывода.

До 5.6 функция называется AsWKT() или AsText(). В 5.7 это все синонимы для точно такой же функции, но функции non ST_* устарели и будут удалены в будущем.

https://dev.mysql.com/doc/refman/5.7/en/gis-format-conversion-functions.html#function_st-astext

Я не знаю точно, что ST_ префикс ST_, но я предполагаю, что это "пространственный тип". Там может быть интересно обсуждение в WL # 8055.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню