Я разрабатываю приложение, в котором мне нужны данные о местоположении, которые будут храниться в таблице 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.
Теперь я хочу прочитать данные для моего тестирования, и это не работает так, как я пытался:
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 Studio 2017. Последняя версия MySQL с классами Spacial.
Любая помощь высоко ценится.
Спасибо
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.
SELECT GeomFromText()
- я подозреваю, что вы хотите наоборот,AsWKT()
илиST_AsWKT()
.