‘Метка SRID = 4326; POINT (во входном широко известном тексте (WKT) недействительна «.

Вопрос: Сочетание абстрактного программирования, плохой/неполной документации и загадочных ошибок заставило меня почесывать голову, чтобы выяснить, что вызывает эту ошибку: MySql 5.6 Entity Framework 6.0.2 MySql Connector для.NET 6.8.3 Просто используя EntityFramework для загрузки моделей из таблицы с геометром. Значение столбца было установлено: var example = DbGeometry.FromText(string.Format("POINT({0} {1})", 51.5 /* Lat /*, -1.28 /* LON *

Вопрос:

Сочетание абстрактного программирования, плохой/неполной документации и загадочных ошибок заставило меня почесывать голову, чтобы выяснить, что вызывает эту ошибку:

  • MySql 5.6
  • Entity Framework 6.0.2
  • MySql Connector для.NET 6.8.3

Просто используя EntityFramework для загрузки моделей из таблицы с геометром. Значение столбца было установлено:

var example = DbGeometry.FromText(string.Format(«POINT({0} {1})», 51.5 /* Lat /*, -1.28 /* LON * /), 4326)

Считывание возвращаемого значения генерирует исключение:

24114: метка SRID = 4326; POINT (51,5 во входном широко известном тексте (WKT)). Действующие метки: POINT, LINESTRING, POLYGON, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION, CIRCULARSTRING, COMPOUNDCURVE, CURVEPOLYGON и FULLGLOBE ( география Тип данных).

С помощью stacktrace:

[FormatException: 24114: The label SRID=4326;POINT(51.5 in the input well-known text (WKT) is not valid. Valid labels are POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION, CIRCULARSTRING, COMPOUNDCURVE, CURVEPOLYGON and FULLGLOBE (geography Data Type only).] Microsoft.SqlServer.Types.OpenGisTypes.ParseLabel(String input) +326 Microsoft.SqlServer.Types.WellKnownTextReader.ParseTaggedText(OpenGisType type) +99 Microsoft.SqlServer.Types.WellKnownTextReader.Read(OpenGisType type, Int32 srid) +47 Microsoft.SqlServer.Types.SqlGeometry.GeometryFromText(OpenGisType type, SqlChars text, Int32 srid) +485 Microsoft.SqlServer.Types.SqlGeometry.Parse(SqlString s) +222

Мое первое наблюдение – использование пространства имен Microsoft.SqlServer, которое кажется непоследовательным, поскольку я использую поставщик MySQL.

Разве MySQL.NET Connector не поддерживает SRID? Не зарегистрировано ли это правильно? (В основном я пытаюсь определить, какие единицы. Метод Distance() на объекте DbGeometry возвращается, пока он кажется случайным десятичным.

Ответ №1

Это не полный ответ на ваш вопрос, и я не совсем уверен, почему вы получаете ошибку, но у меня были некоторые советы, и это было слишком долго для комментариев.

При создании точки вам нужно указать Долгота перед Широта. Ваши координаты являются технически обоснованными с учетом их значений, но, конечно, вы столкнетесь с проблемами в других регионах, и если бы вы когда-либо отображали его, эта координата не была бы в Великобритании, где вы ожидали бы с помощью координат образца.

Кроме того, если вы это знаете, используйте метод DbGeometry.PointFromText(WKT, SRID) – его проще читать.

double lng = -1.28; double lat = 51.5; var wkt = String.Format(«POINT({0} {1})», lng, lat); var geometry = DbGeometry.PointFromText(wkt, 4326);

Я бы также рекомендовал использовать географию, а не геометрию, если вы используете систему широты/долготы – или есть конкретная причина для использования геометрии? Вышеуказанные методы доступны в DbGeography.

Изменение: единица (или случайный десятичный знак, как вы выразились) для STDistance() находится в метрах.

Удачи в поиске источника ошибки.

Оцените статью
Добавить комментарий