抽象编程,糟糕/不完整的文档和神秘错误的组合让我摸不着头脑,弄清楚是什么导致了这个错误:
只需使用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, 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 Connector不支持SRID吗?它没有正确注册吗? (基本上我是想弄清楚Distance()
对象上的。DbGeometry
方法返回的单位,到目前为止它似乎是一个随机小数。
答案 0 :(得分: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()的单位(或放置的随机小数)以米为单位。
找到错误的来源祝你好运。