Entity Framework DbGeography 给我一个纬度 FormatException 错误

Entity Framework DbGeography is giving me a latitude FormatException error

我正在写一个 API,它使用 Entity Framework 6 来做一些地理空间的事情。

我已将 zip data 加载到数据库 table 中,我在其中按邮政编码进行查找并获取其相应的纬度和经度信息。

因为我正在测试不同的邮政编码,当我查找并使用 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 数据 return 是:

latitude: "34.0901"
longitude: "-118.4065"

两者都return编辑为字符串

当我在 Google 地图中查找这些坐标时,它确实显示了正确的位置(加利福尼亚州贝弗利山)

我得到的错误也没有意义,因为 34.0901-90 to 90 范围内。

这是发生问题的相关代码。当我创建 zip 数据库时,我删除了重复的 zip 并将邮政编码作为 table.

的键
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);