实体框架 DbGeography 给了我一个纬度 FormatException 错误
Posted
技术标签:
【中文标题】实体框架 DbGeography 给了我一个纬度 FormatException 错误【英文标题】:Entity Framework DbGeography is giving me a latitude FormatException error 【发布时间】:2016-06-21 15:39:06 【问题描述】:我正在编写一个 API,它使用 Entity Framework 6 来做一些 GeoSpatial 的东西。
我已将zip data 加载到数据库表中,在该表中我通过邮政编码进行查找并获取其相应的纬度和经度信息。
由于我正在测试不同的邮政编码,当我查找并使用90210
的纬度/经度时出现此错误
"Message": "An error has occurred.",
"ExceptionMessage": "24201: Latitude values must be between -90 and 90 degrees.",
"ExceptionType": "System.FormatException",
"StackTrace": " at Microsoft.SqlServer.Types.GeographyValidator.ValidatePoint(Double x, Double y, Nullable`1 z, Nullable`1 m)\r\n at Microsoft.SqlServer.Types.Validator.BeginFigure(Double x, Double y, Nullable`1 z, Nullable`1 m)\r\n at Microsoft.SqlServer.Types.ForwardingGeoDataSink.BeginFigure(Double x, Double y, Nullable`1 z, Nullable`1 m)\r\n at Microsoft.SqlServer.Types.CoordinateReversingGeoDataSink.BeginFigure(Double x, Double y, Nullable`1 z, Nullable`1 m)\r\n at Microsoft.SqlServer.Types.WellKnownTextReader.ParsePointText(Boolean parseParentheses)\r\n at Microsoft.SqlServer.Types.WellKnownTextReader.ParseTaggedText(OpenGisType type)\r\n at Microsoft.SqlServer.Types.WellKnownTextReader.Read(OpenGisType type, Int32 srid)\r\n at Microsoft.SqlServer.Types.SqlGeography.ParseText(OpenGisType type, SqlChars taggedText, Int32 srid)\r\n at Microsoft.SqlServer.Types.SqlGeography.GeographyFromText(OpenGisType type, SqlChars taggedText, Int32 srid)\r\n at Microsoft.SqlServer.Types.SqlGeography.Parse(SqlString s)"
从 zip 查找返回的纬度/经度数据是:
latitude: "34.0901"
longitude: "-118.4065"
两者都作为字符串返回
当我在 Google 地图中查找这些坐标时,它确实显示了正确的位置(加利福尼亚州比佛利山庄)
我得到的错误也没有任何意义,因为34.0901
在-90 to 90
范围内。
这是发生问题的相关代码。当我创建 zip 数据库时,我删除了重复的 zip,并将邮政编码作为该表的键。
USZip zipData = context.USZip.Find(zip);
string point = string.Format("POINT(0 1)", zipData.latitude, zipData.longitude);
var myLocation = DbGeography.FromText(point);
【问题讨论】:
当然,在我发布此内容后,我能够找到一个与我的完全相同的旧问题:***.com/questions/16546598/… 【参考方案1】:您将纬度和经度颠倒了,因此值 118.4065
被视为纬度,并且超出了 -90 到 90 的范围。
修正后的行应该是这样的:
string point = string.Format("POINT(0 1)", zipData.longitude, zipData.latitude);
【讨论】:
很好奇为什么 DBGeography 点违背了将纬度放在首位的规范。但这行得通,谢谢!以上是关于实体框架 DbGeography 给了我一个纬度 FormatException 错误的主要内容,如果未能解决你的问题,请参考以下文章
PrimeFaces Mobile 反向幻灯片过渡给了我“对实体“反向”的引用必须以“;”结尾定界符。´ [重复]