Mysql ';标签SRID=4326;输入的已知文本(WKT)中的点无效;

Mysql ';标签SRID=4326;输入的已知文本(WKT)中的点无效;,mysql,entity-framework,gis,geospatial,Mysql,Entity Framework,Gis,Geospatial,抽象编程、糟糕的/不完整的文档以及隐晦的错误让我挠头想知道是什么导致了这个错误: MySql 5.6 实体框架6.0.2 用于.NET 6.8.3的MySql连接器 只需使用EntityFramework从具有几何图形列的表加载模型。该列的值由以下设置: var example = DbGeometry.FromText(string.Format("POINT({0} {1})", 51.5 /* Lat /*, -1.28 /* LON * /), 4326) 读回该值将生成异常: 2

抽象编程、糟糕的/不完整的文档以及隐晦的错误让我挠头想知道是什么导致了这个错误:

  • MySql 5.6
  • 实体框架6.0.2
  • 用于.NET 6.8.3的MySql连接器
只需使用EntityFramework从具有几何图形列的表加载模型。该列的值由以下设置:

var example = DbGeometry.FromText(string.Format("POINT({0} {1})", 51.5 /* Lat /*, -1.28 /* LON * /), 4326)
读回该值将生成异常:

24114:标签SRID=4326;点(在输入的已知文本中为51.5 (WKT)无效。有效标签包括点、线串、多边形、, 多点、多线、多多边形、GEOMETRYCOLLECTION、, 圆管柱、复合曲线、曲线多边形和全地球仪(地理) 仅限数据类型)

使用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连接器不支持SRID吗?它没有正确注册吗?(基本上,我正在尝试找出距离的单位。
Distance()
DbGeometry
对象上的
方法正在返回,到目前为止,它似乎是一个随机小数。

这不是您问题的完整答案,我也不完全确定您为什么会出现错误,但我有一些建议,并且它太长,无法进行评论

创建点时,您需要先指定经度,再指定纬度。您的坐标在技术上是有效的,无论是哪种方式,给定它们的值,但当然您在其他地区都会遇到问题,如果您曾经对其进行过映射,该坐标将不会出现在您希望使用示例坐标的英国

此外,如果您知道它是一个点,请使用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()的单位(或您所说的随机小数点)以米为单位。


很幸运找到了错误的来源。

感谢Jon的输入。我正在使用DbGeometry,因为DbGeometry不会映射到列类型(MySql)。我切换了lng和lat,但仍然得到了错误(找不到任何关于此错误的文档)。至于以米为单位的单位,当与where子句结合使用时,查询将不匹配。即(距离x 100)=5km,然后执行where(distance@simbolo,不客气。由于SQL Server在Spatial和EF5+方面做得非常出色,您需要处理MySQL,这真是太遗憾了。不过,我不确定我是否遵循了您提到的distance子句,编写了
where geom.STDistance<(5/100)
会尝试在5cm内找到任何东西。也许我只是在这么晚的时候没有看到pas打字错误!祝你好运。我认为你需要去掉SRID并尝试一下。一些空间系统在wkt表单中并不真正支持它。你的单位将仅由你使用的基准/投影暗示(在本例中为米)。