2012-03-14 11 views
0

私はジオメトリ列とPostGISのデータベースのテーブルを持って、次のようにわずか2列を持つroadpublicというテーブルを想定していますPostGISの - SQL Serverへのジオメトリ列を持つテーブルを移行

COLUMNはUUIDをroadid。 COLUMN geomジオメトリ。

ここでは、PostgresネイティブOLEDBプロバイダを使用してこのテーブルをSQL Server(2012)データベースにインポートします。プロバイダはチャンピオンのように動作しますが、それはデータ型はnvarchar(4000)などのジオメトリデータ型を認識するので、このように構成された、SQL Serverのデータの土地:

roadid geom 
5730048E-7988-4BF2-B5E4-E7DD2711E042 0105000020E6100000010...deleted... 
BB978741-BE77-456A-82FE-2D55F1417442 0105000020E6100000010...deleted... 
EE404EE4-CA09-4E78-842F-7C27307EAC89 0105000020E6100000010...deleted... 

GEOM列がNVARCHAR(4000)に変換されます。

PostGISの実際の座標をテキスト形式でエクスポートし、SQL Serverジオメトリ:: STGeomFromTextを使用してネイティブSQL Serverジオメトリデータ型に変換することが理想的です。

誰でもこれを行うための戦略を提案できますか?

ありがとうございます!

答えて

0

SQL Serverにvarchar(400)として格納されていると言えば、ソースから読み込んだとき、またはデスティネーションに挿入したときのことを意味しますか?それをうまく読み取れれば、 "データ変換コンポーネント"を使ってジオメトリにすることができます。

0

私は同じ問題があります。私は解決策を見つけたので、私は自分の質問に十分な対応をしようとしています。

DECLARE @data TABLE (
 
    ID nvarchar(1024), 
 
    ImportedGeometry nvarchar(100), 
 
    FinalGeometry geometry 
 
) 
 

 
    INSERT INTO @data (ID, ImportedGeometry) values ('1', '0xE6100000010C4703780B24B855C061C3D32B65093540') 
 
    INSERT INTO @data (ID, ImportedGeometry) values ('2', '0xE6100000010C96438B6CE7D359C0BD5296218E853440') 
 

 
select 
 
d.ID, 
 
d.ImportedGeometry, 
 
CONVERT(varbinary(max), d.ImportedGeometry, 1) as ConvertedGeometryBin, 
 
(cast(CONVERT(varbinary(max), d.ImportedGeometry, 1) as geometry)) as FinalGeometry 
 
from @data d 
 

 
UPDATE @data 
 
SET FinalGeometry = (cast(CONVERT(varbinary(max), ImportedGeometry, 1) as geometry)) 
 

 
select 
 
d.ID, 
 
d.FinalGeometry, 
 
d.FinalGeometry.STAsText(), 
 
d.FinalGeometry.STSrid 
 
from @data d