2013-03-02 64 views
3

我开始使用空间数据的第一个项目。我使用VS 2012和SQL 2012我已经引用了System.Data.Entity并且可以在我的代码中使用DbGeography,但是当我尝试创建一个点时,出现上述错误并且不明白为什么DbGeography.PointFromText错误异常已被调用的目标引发

这里是我的代码

var text = string.Format(CultureInfo.InvariantCulture.NumberFormat, 
       "POINT({0} {1})", submitted.Long, submitted.Lat); 
      // 4326 is most common coordinate system used by GPS/Maps 
      try 
      { 
       var wkb = DbGeography.PointFromText(text, 4226); 
      } 
      catch (Exception exc) 
      { 
      } 
+2

问题是,我的SRID是错的,我只是没看出来......即使正确的SRID是就在我的评论区! – 2013-03-03 06:49:28

+0

我只是想说。我怀疑你想用4326. – rbrundritt 2014-09-19 16:46:23

回答

-3
is wrong to order the lat and long 

正确的是:

DbGeography.PointFromText(POINT(lat long), 4226); 

完整的类:

public static DbGeography CreatePoint(double latitude, double longetude, int srid = 4326) 
    { 
     var lon = longetude.ToString(CultureInfo.InvariantCulture); 
     var lat = latitude.ToString(CultureInfo.InvariantCulture); 

     var geo = $"POINT({lat} {lon})"; 

     return DbGeography.PointFromText(geo, srid); 
    } 

电话:

CreatePoint(-46.55377, 23.11817) 
+0

显然这个答案是平坦的我们错了 – 2016-08-21 07:44:59

2

的语法,OP已经使用是正确的,造成这个错误的实际问题是SRID,4226是不是一个已知的SRID,不过你已经知道这一点。因为它是在您的评论:)

在方案的正确用法的单行例子是:

var wkb = DbGeography.PointFromText($"POINT({submitted.Long} {submitted.Lat})", 4326); 

你去哪里了错的?每当你得到一个

System.Reflection.TargetInvocationException

随着

异常的消息已被调用的目标引发异常

你必须立即请查看内部例外以了解有关实际错误的详细信息,在这种情况下,您会明确地为您概括:

24204:空间参考标识符(SRID)无效。指定的SRID必须与sys.spatial_reference_systems目录视图中显示的其中一个支持的SRID相匹配。

我意识到这是一个旧的线程,但IMO这是第二个最常见的.Net开发人员问题的例子,人们不断发布在SO上。在拉出头发之前,请仔细阅读完整的例外堆栈。

我只是猜测,不过我看的NullReferenceException问题将是最常见的:)这里

相关问题