2013-03-02 90 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問題將是最常見的:)這裏

相關問題