抽象编程、不完整的文档和晦涩的错误信息让我不知所措,无法确定是什么导致了这个错误:
- MySql 5.6
- Entity Framework 6.0.2
- MySql Connector for .NET 6.8.3
只是使用EntityFramework从具有几何列的表中加载模型。该列的值是通过以下方式设置的:
var example = DbGeometry.FromText(string.Format("POINT({0} {1})", 51.5 /* Lat /*, -1.28 /* LON * /), 4326)
读取返回的值引发了异常:
24114:输入的WKT格式标签SRID = 4326; POINT(51.5)无效。有效的标签为POINT,LINESTRING,POLYGON,MULTIPOINT,MULTILINESTRING,MULTIPOLYGON,GEOMETRYCOLLECTION,CIRCULARSTRING,COMPOUNDCURVE,CURVEPOLYGON和FULLGLOBE(仅适用于地理数据类型)。
附带堆栈跟踪:
[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?是否未正确注册?(基本上,我正在尝试确定 DbGeometry
对象上的 Distance()
方法返回的单位是什么,到目前为止,它似乎是随机小数。)
WHERE geom.STDistance < (5/100)
将尝试查找任何在5厘米内的内容。也许我只是没看到一个这么晚的笔误!祝你好运。 - Jon Bellamy