Asp.net mvc 实体框架DbGeography给了我一个异常错误

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

我正在编写一个API,它使用EntityFramework6来做一些地理空间的事情

我已经加载到一个数据库表中,在那里我按邮政编码进行查找,并获得相应的纬度和经度信息

当我测试不同的邮政编码时,当我查找并使用lat/long表示
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);

奇怪的是为什么地理点违反了把纬度放在第一位的标准。但这很有效,谢谢!奇怪的是为什么地理点违反了把纬度放在第一位的标准。但这很有效,谢谢!当然,在我发布这篇文章之后,我能够找到一个与我完全相同的重复老问题:当然,在我发布这篇文章之后,我能够找到一个与我完全相同的重复老问题: