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);
我正在写一个 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);