1
在SQL Server 2008 R2中,我们有一个数据类型为geography
的字段的表。当SQL Server Geography STGeomFromWKB错误 - System.FormatException:24201
SELECT rowid,GeoCoor,
GeoCoor.STSrid as SRID,
GeoCoor.Lat as Lat,
GeoCoor.Long as Long
FROM dbo.Locations
质疑我们得到行是这样的:
╔═══════╦════════════════════════════════════════════════╦══════╦══════════════════╦═══════════════════╗
║ rowid ║ GeoCoor ║ SRID ║ Lat ║ Long ║
╠═══════╬════════════════════════════════════════════════╬══════╬══════════════════╬═══════════════════╣
║ 1092 ║ 0xE6100000010C82C540E751804240BA86EFD400B45BC0 ║ 4326 ║ 37.0024994913356 ║ -110.812550767815 ║
╚═══════╩════════════════════════════════════════════════╩══════╩══════════════════╩═══════════════════╝
我们所有的数据都点,而不是线或多边形,和我们使用SRID 4326
我想使用存储在表中的另一个地理点的二进制值更新记录的GeoCoor字段。这里是我的代码:
DECLARE @coor1 geography
SET @coor1 = geography::STGeomFromWKB(0xE6100000010C82C540E751804240BA86EFD400B45BC0,4326)
UPDATE dbo.Locations
SET GeoCoor = @coor1
WHERE RowID = 2657
然而,SET @coor1 =
语句在SQL Server Management Studio中触发一个错误:
A .NET Framework error occurred during execution of user-defined routine or aggregate "geography":
System.FormatException: 24201: Latitude values must be between -90 and 90 degrees.
System.FormatException:
at Microsoft.SqlServer.Types.GeographyValidator.ValidatePoint(Double x, Double y, Nullable`1 z, Nullable`1 m)
at Microsoft.SqlServer.Types.Validator.BeginFigure(Double x, Double y, Nullable`1 z, Nullable`1 m)
at Microsoft.SqlServer.Types.ForwardingGeoDataSink.BeginFigure(Double x, Double y, Nullable`1 z, Nullable`1 m)
at Microsoft.SqlServer.Types.CoordinateReversingGeoDataSink.BeginFigure(Double x, Double y, Nullable`1 z, Nullable`1 m)
at Microsoft.SqlServer.Types.OpenGisWkbReader.ReadFirstPoint(ByteOrder byteOrder)
at Microsoft.SqlServer.Types.OpenGisWkbReader.ParseWkbPointWithoutHeader(ByteOrder byteOrder)
at Microsoft.SqlServer.Types.OpenGisWkbReader.Read(OpenGisType type, Int32 srid)
at Microsoft.SqlServer.Types.SqlGeography.GeographyFromBinary(OpenGisType type, SqlBytes binary, Int32 srid)
根据初步查询结果,你可以清楚地看到,37.002499纬度。 ..确实在-90和90之间。它的经度不在-90和90之间。
我相信这是一个.NET错误,在geography::STGeomFromWKB
方法中,错误地将Lat和Long转置为WKB数据(或者也许是t他.Lat
和.Long
方法是错误?!)。我的问题是:
- 任何人都可以告诉我,如果我忽略了某些东西,还是应该继续并将其提交给Microsoft Connect?
- 有人可以在SQL Server(2016)的更高版本中重现此错误吗?或者它已被修复?
欢迎StackOverflow上。请用4个空格缩进您的代码,以便将其显示为代码并且语法高亮。最好的祝福。 – YakovL