DbGeography.PolygonFromText与DbGeography.FromText

问题描述

当试图从众所周知的文本形成多边形时,似乎DbGeography.polygonFromTextDbGeoGraphy.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 (将#修改为@)