Postgis - Перенос таблицы с колонкой геометрии в SQL Server - PullRequest
0 голосов
/ 14 марта 2012

У меня есть таблица в базе данных PostGIS со столбцом геометрии, предположим, что таблица с именем roadpublic просто имеет 2 столбца следующим образом:

COLUMN roadid uuid;COLUMN geom geometry;

Теперь я хотел бы импортировать эту таблицу в базу данных SQL Server (2012), используя собственный поставщик OLEDB Postgres.Поставщик работает как чемпион, но он распознает тип данных геометрии как 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.

Может кто-нибудьпредложить стратегию для этого?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 21 марта 2016

У меня такая же проблема.Я нашел решение, я пытаюсь удовлетворить мой запрос.

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
0 голосов
/ 16 марта 2012

когда вы говорите, что он попадает в SQL Server как varchar (400), вы имеете в виду, когда вы читаете из своего источника или когда вы вставляете в место назначения?Потому что, если вам удастся прочитать его хорошо, вы можете использовать «компонент преобразования данных», чтобы сделать его геометрией

...