问题描述
当试图从众所周知的文本形成多边形时,似乎DbGeography.polygonFromText
和DbGeoGraphy.FromText
正在利用sql Server空间类型的两个不同来源。我想知道是否有人之前遇到过相同的问题,或者是否知道这是否是预期的设计。
在解决一些部署问题时,我首先遇到了此错误。尝试从DbGeography
构建DbGeography.polygonFromText
需要sql Server 2012的sql Server空间类型(我已经尝试了较新版本的sql Server Spatial CLR类型,但没有一个起作用) 。另外,DbGeography.FromText
似乎能够从众所周知的文本生成DbGeography
对象,而无需此要求。
我在以下应用程序中隔离了该问题。包括最新的Microsoft.sqlServer.Types
软件包并运行以下软件包,这将生成下面列出的输出-
using System;
using System.Data.Spatial;
namespace DbGeographyTester
{
class Program
{
private static DbGeography WrapDbGeographyCreation(Func<DbGeography> geographyFactory)
{
try
{
return geographyFactory();
}
catch(Exception exc)
{
Console.WriteLine($"Caught Exception: [{exc}]");
}
return null;
}
public static void Main (string[] _)
{
var polyText = "polyGON ((80.0 -30.0,81.0 -31.0,82.0 -32.0,80.0 -30.0))";
Console.WriteLine($"Attempting DbGeography.polygonFromText(\"{polyText}\",4326)");
Console.WriteLine(WrapDbGeographyCreation(() => DbGeography.polygonFromText(polyText,4326)));
Console.WriteLine($"Attempting DbGeography.FromText(\"{polyText}\",4326)");
Console.WriteLine(WrapDbGeographyCreation(() => DbGeography.FromText(polyText,4326)));
}
}
}
/* Will output -
Attempting DbGeography.polygonFromText("polyGON ((80.0 -30.0,80.0 -30.0))",4326)
Caught Exception: [System.NotImplementedException: The method or operation is not implemented.
at System.Data.Spatial.DefaultSpatialServices.GeographypolygonFromText(String geographyText,Int32 spatialReferenceSystemId)
at System.Data.Spatial.DbGeography.polygonFromText(String polygonWellKNownText,Int32 coordinateSystemId)
at DbGeographyTester.Program.<>c__displayClass1_0.<Main>b__0() in D:\db-geography-creator\DbGeographyTester\DbGeographyTester\Program.cs:line 26
at DbGeographyTester.Program.WrapDbGeographyCreation(Func`1 geographyFactory) in D:\db-geography-creator\DbGeographyTester\DbGeographyTester\Program.cs:line 12]
Attempting DbGeography.FromText("polyGON ((80.0 -30.0,4326)
SRID=4326;polyGON ((80.0 -30.0,80.0 -30.0))
*/
然后,从此处https://www.microsoft.com/en-ca/download/details.aspx?id=43339获得的sql Server 2012功能包( sqlSysClrTypes.msi )安装了“ sql Server 2012的Microsoft System CLR类型”之后,我们得到以下输出-
/*
Attempting DbGeography.polygonFromText("polyGON ((80.0 -30.0,4326)
SRID=4326;polyGON ((80 -30,81 -31,82 -32,80 -30))
Attempting DbGeography.FromText("polyGON ((80.0 -30.0,80 -30))
*/
为什么System.Data.Spatial.DbGeography
依赖两个单独的解析器从众所周知的文本生成DbGeography
多边形?而且,为什么它会依赖这样的旧版本的sql Server CLR类型( sqlSpatial110.dll ),而不是任何更新的类型?非常令人困惑。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)