2016-08-02 6 views
0

varchar(max)カラムにWKT(よく知られているテキスト)のテーブルがあります。これは、ジオメトリと同様にフォーマットされます。たとえば、値の1つは更新クエリでvarchar(max)からジオメトリを取得

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はmy varchar(max)フィールド、MyGeometryは新しいジオメトリフィールドです。

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

EDIT - 現在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))POLYGON」、0)

あなたはそれを変更することができます '....' VARCHAR(MAX)フィールドに入力します。

最後には、SRIDはGeographyを使用している場合のみ関連しています。

+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

あなたは、以下のURLを確認することができます。私は解決策、SQL Serverの空間ツール

http://sqlspatialtools.codeplex.com/

以下の方法が私の問題を解決しているを発見した

変更することなく、他の同様の質問(古いポスト)ので、それを貼り付け、この情報を見つけました。

IsValidGeographyFromText(文字列inputWKT、int型のSRID)

チェックは入力WKTは、有効な地理を表すことができます。この関数は、WTK座標値が経度/緯度の値で、その順番であり、有効な地理的SRID値が供給されることを要求します。この関数は、エッジ条件でも例外をスローしません(つまり、経度/緯度座標が緯度/経度に逆転します)。

SqlGeography MakeValidGeographyFromText(文字列inputWKT、int型SRID)

有効な地理インスタンスに入力WKTに変換します。この関数は、WKTの座標値が経度/緯度の値で、その順序で有効で、有効な地理的SRID値が指定されている必要があります。

+0

問題は解決しましたか? – Webdev

関連する問題