Asp.net mvc 实体框架DbGeography给了我一个异常错误
我正在编写一个API,它使用EntityFramework6来做一些地理空间的事情 我已经加载到一个数据库表中,在那里我按邮政编码进行查找,并获得相应的纬度和经度信息 当我测试不同的邮政编码时,当我查找并使用lat/long表示Asp.net mvc 实体框架DbGeography给了我一个异常错误,asp.net-mvc,entity-framework-6,geospatial,Asp.net Mvc,Entity Framework 6,Geospatial,我正在编写一个API,它使用EntityFramework6来做一些地理空间的事情 我已经加载到一个数据库表中,在那里我按邮政编码进行查找,并获得相应的纬度和经度信息 当我测试不同的邮政编码时,当我查找并使用lat/long表示90210 { "Message": "An error has occurred.", "ExceptionMessage": "24201: Latitude values must be between -90 and 90 degrees.", "Ex
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查找返回的lat/long数据为:
latitude: "34.0901"
longitude: "-118.4065"
两者都作为字符串返回
当我在谷歌地图中查找这些坐标时,它确实显示了正确的位置(加利福尼亚州贝弗利山)
我得到的错误也没有意义,因为34.0901
在-90到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);
您将纬度和经度颠倒,因此值118.4065
被视为纬度,并且不在-90到90范围内
更正的行应如下所示:
string point = string.Format("POINT({0} {1})", zipData.longitude, zipData.latitude);
您将纬度和经度颠倒,因此值118.4065
被视为纬度,并且不在-90到90范围内
更正的行应如下所示:
string point = string.Format("POINT({0} {1})", zipData.longitude, zipData.latitude);
奇怪的是为什么地理点违反了把纬度放在第一位的标准。但这很有效,谢谢!奇怪的是为什么地理点违反了把纬度放在第一位的标准。但这很有效,谢谢!当然,在我发布这篇文章之后,我能够找到一个与我完全相同的重复老问题:当然,在我发布这篇文章之后,我能够找到一个与我完全相同的重复老问题: