2016-08-02 101 views
0

我已經有了一個完整的WKT(熟知文本)在一個varchar(max)列的表獲取從VARCHAR(最大值)的幾何形狀。這與格式完全相同。所以,例如,其中一個值是:在更新查詢

POLYGON ((174.893529167059 -37.0260462162965,174.89351593407 -37.0260221329151,174.893508034056 -37.0260077002766,174.893444415879 -37.0258916500588,174.893416916056 -37.0258414997842,174.893481733297 -37.0258186834198,174.893492016755 -37.0258150663863,174.89349653254 -37.025823316032,174.893512415978 -37.0258522827285,174.893556883897 -37.0259333832477,174.893591032956 -37.0259956661343,174.893604265986 -37.0260197504078,174.893575149738 -37.0260300006258,174.893529167059 -37.0260462162965)) 

但是,我需要將此varchar(max)字段轉換爲幾何字段。不幸的是,爲了做到這一點,SQL Server需要一些其他信息,所以我不能只將字段的類型從varchar(max)更改爲geometry。

我在同一個表(MyGeometry)中創建了一個空白幾何列,但我試圖轉換它失敗。這是我的代碼(其中2193是我正在處理的CRS)。 WKT是我的varchar(max)字段,MyGeometry是我的新幾何字段。

UPDATE  MY_TABLE 
SET    MyGeometry = geometry::STPolyFromText('' + WKT + '', 2193) 

編輯 - 當前回來說WKT無效(System.FormatException 24111 - 輸入無效)。

,因爲它與其他一些投入我在它是如何完美的風格相匹配這是奇怪的。

回答

1

這樣做: UPDATE MY_TABLE SET MyGeometry =幾何:: STGeomFromText(「POLYGON((174.893529167059 -37.0260462162965,174.89351593407 -37.0260221329151,174.893508034056 -37.0260077002766,174.893444415879 -37.0258916500588,174.893416916056 -37.0258414997842,174.893481733297 -37.0258186834198,174.893492016755 - 37.0258150663863,174.89349653254 -37.025823316032,174.893512415978 -37.0258522827285,174.893556883897 -37.0259333832477,174.893591032956 -37.0259956661343,174.893604265986 -37.0260197504078,174.893575149738 -37.0260300006258,174.893529167059 -37.0260462162965))」,0)

您可以更改 'POLYGON ......'到你的VARCHAR(MAX)字段。

0在最後,這是SRID只與您使用地理相關。

+1

UPDATE MY_TABLE SET MyGeometry = geometry :: STPolyFromText(WKT,2193) – cungiderm

+0

WKT上不需要雙引號。 WKT已經是一個文本。 (假設WKT是你的列名) – cungiderm

+0

已經試過'UPDATE MY_TABLE SET MyGeometry = GEOMETRY :: STPolyFromText(WKT,2193)'(還有STGeomFromText),但仍然沒有運氣。也許我在那裏有一些無效的幾何圖形,但我懷疑它。 – user25730

0

您也可以嘗試: -

UPDATE MY_TABLE SET MyGeometry = GEOMETRY::STGeomFromText('POLYGON ((174.893529167059 -37.0260462162965,174.89351593407 -37.0260221329151,174.893508034056 -37.0260077002766,174.893444415879 -37.0258916500588,174.893416916056 -37.0258414997842,174.893481733297 -37.0258186834198,174.893492016755 -37.0258150663863,174.89349653254 -37.025823316032,174.893512415978 -37.0258522827285,174.893556883897 -37.0259333832477,174.893591032956 -37.0259956661343,174.893604265986 -37.0260197504078,174.893575149738 -37.0260300006258,174.893529167059 -37.0260462162965))',4326); 

SRID的值傳遞的應該是4326,而不是0

您可以查看下面的網址。我發現了另一個類似的問題(較早的帖子),因此將其粘貼此信息沒有任何變化

我找到了解決方案,SQL Server的空間工具

http://sqlspatialtools.codeplex.com/

以下是方法解決我的問題。

IsValidGeographyFromText(串inputWKT,INT SRID)

檢查是否一個輸入WKT可以代表一個有效的地理。該函數要求WTK座標值是經度/緯度值,並按照該順序提供有效的地理SRID值。該功能即使在邊緣條件下也不會拋出異常(即經度/緯度座標與緯度/經度相反)。

SqlGeography MakeValidGeographyFromText(串inputWKT,INT SRID)

轉換一個輸入WKT到一個有效的地理實例。此功能要求WKT座標值是經度/緯度值,並按順序提供有效的地理SRID值。

+0

您的問題是否解決? – Webdev