2015-11-05 46 views
2

我有一個視圖,其中包含兩個緯度和經度字段,我想創建一個新的視圖,將這些緯度/經度字段轉換爲幾何/地理領域(不確定哪一個最適合ArcGIS)。原始視圖中的字段是雙重類型的,我希望它們在我的新視圖中投射爲空間類型。從經緯度字段創建幾何/地理字段(SQL Server)

目前我不確定如何將這些字段轉換爲空間類型。關於Stack Overflow的所有其他類似問題從來沒有給我一個工作解決方案,所以我很抱歉如果這個問題看起來是重複的,但希望更清晰的例子可以幫助其他人。

我的新觀點寫漂亮simply-

SELECT * FROM view_name WHERE (latitude <> 0) AND (longitude <> 0) 

如何建立這一新的觀點,基於現有的視圖,並投了兩個領域(或創建填充緯度/一個新的空間場lon值)作爲空間類型?

我正在使用SQL Server Management Studio 2012版。如果我省略了任何相關信息,請讓我知道。我很樂意提供儘可能多的細節。

+0

我GOOGLE了一篇文章對你來說,這似乎有很多的信息,你以後: http://www.sql-server-helper.com/sql-server-2008/convert -latitude-longitude-geography-point.aspx –

+0

我已經找到那篇文章。它似乎具有我所追求的信息,但它是針對2008年的,並且正在處理表格創建。我特意在2012年創建視圖。謝謝 – csterling

+0

你有什麼嘗試? –

回答

9
SELECT *, 
      geography::STGeomFromText('POINT(' + 
       CAST([Longitude] AS VARCHAR(20)) + ' ' + 
       CAST([Latitude] AS VARCHAR(20)) + ')', 4326) as GEOM, 

      geography::Point([Latitude], [Longitude], 4326) as SAME_GEOM 

    FROM view_name 
    WHERE (latitude <> 0) AND (longitude <> 0) 
+0

'Point'方法非常棒。減少與字符串連接的廢話。 –

+1

只是一個參考,這是正確的,但取決於您經緯度和精度的數據類型,這可能會導致問題。如果lat/longs存儲爲float,則轉換爲varchar將截斷小數點,因此該點會稍微不同。將其轉換爲更高精度的小數,然後轉換爲varchar將解決此問題。 – hcaelxxam

+0

@hcaelxxam當我試圖實現該代碼時,我收到了SQL執行錯誤 - http://imgur.com/DQifNJN 但是,在視圖中創建了列,但它們的值看起來像這樣:http: //imgur.com/ObOTDbR 我完全複製了您的示例代碼,並且僅替換了實際視圖的view_name佔位符。 錯誤說明緯度值必須介於-90和90度之間。我將POINT參數中的緯度/經度字段名稱倒過來,認爲經緯度相反,但我仍然得到相同的錯誤。我現在會在Google上輸入錯誤24201。 – csterling

相關問題