2012-03-14 42 views
0

我有一個幾何列一個PostGIS的數據庫中的表中,假設名爲roadpublic只是有2列如下表:PostGIS的 - 與幾何列表遷移到SQL Server

COLUMN roadid UUID; COLUMN geom幾何;

現在,我想使用Postgres Native OLEDB Provider將此表導入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 geometry :: 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