SqlGeography.STGeomFromText 创建多边形时抛出异常

问题描述 投票:0回答:2

在创建 Polygon 期间它会抛出执行。我正在使用库 Microsoft.SqlServer.Types 最新版本 160。

polyText = "POLYGON ((
45.3972179 8.8406638000000157, 
45.4215054 8.9151509000000715,
45.4001544 8.9361126999999669, 
45.4016369 8.9607184999999845, 
45.3851877 8.9621395000000348,
45.3853039 8.948319999999967, 
45.3747296 8.9535720999999739, 
45.3858019 8.9360727000000679, 
45.3579525 8.8890794000000142, 
45.3414371 8.90664240000001, 
45.3452409 8.91328980000003, 
45.3273192 8.92622259999996, 
45.3185438 8.9208002999999962, 
45.3405949 8.8954118000000335, 
45.3471543 8.866777299999967, 
45.3587372 8.8690788999999768, 
45.3675493 8.8504374999999982, 
45.3972179 8.8406638000000157, 
45.3972179 8.8406638000000157, 
45.3972179 8.8406638000000157
))
"

SqlGeography poly = SqlGeography.STGeomFromText(new SqlChars(polyText), 4326);

异常状态

SQL Server Spatial library could not be loaded. Error code: 126 (HResult: 0x80131524).
Microsoft.SqlServer.Types

System.IO.FileNotFoundException: SQL Server Spatial library could not be loaded. Error code: 126 (HResult: 0x80131524).
   at Microsoft.SqlServer.Types.GLNativeMethods.ThowIfGLNativeLibraryNotLoaded()
   at Microsoft.SqlServer.Types.GLNativeMethods.GeodeticIsValid(GeoData& g, Double eccentricity, Boolean forceKatmai)
   at Microsoft.SqlServer.Types.SqlGeography.IsValidExpensive(Boolean forceKatmai)
   at Microsoft.SqlServer.Types.SqlGeography..ctor(GeoData g, Int32 srid)
   at Microsoft.SqlServer.Types.SqlGeography.GeographyFromText(OpenGisType type, SqlChars taggedText, Int32 srid)
   at Microsoft.SqlServer.Types.SqlGeography.STGeomFromText(SqlChars geometryTaggedText, Int32 srid)
   at webNet.Area.Default.DrawShapesFromSql(String polyText, String areaName) in C:\Project\webNet\Area\Default.aspx.cs:line 474
   at webNet.Area.Default.LoadForm() in C:\Project\webNet\Area\Default.aspx.cs:line 93

创建

SqlGeography.Point
它工作正常没有问题,只创建读取插入多边形,因为它会抛出错误。

sql-server asp.net-mvc polygon sqlgeography
2个回答
1
投票

我设法通过将

Microsoft.SqlServer.Types
降级到版本 14 来解决此异常


0
投票

正在加载的 SqlServerSpatial160.dll 库必须针对与 Microsoft.SqlServer.Types.dll 相同的体系结构进行编译(除了绑定重定向之外)。

此nupkg:https://www.nuget.org/packages/Microsoft.SqlServer.Types/包含文件夹

runtimes\win-x64\native\
runtimes\win-x86\native\
,它们都包含SqlServerSpatial160.dll

就我而言,我必须显式复制正确的 DLL 并使用 .targets 手动导入它,因为我的 Microsoft.SqlServer.Types 是 32 位的,而它出于某种原因尝试加载 SqlServerSpatial160 64 位版本。

在调试器中,我可以看到错误的图像格式异常,该异常被

SQL Server Spatial library could not be loaded.
错误掩盖。

© www.soinside.com 2019 - 2024. All rights reserved.