地理数据导入

时间:2016-09-16 13:53:18

标签: sql-server bcp sqlgeography

我尝试使用bcp(批量复制工具)将CSV文件中的地理数据导入SQL服务器,但我无法弄清楚格式。我想在CSV文件中使用类似的东西,但我在POINT列上出现错误:

101932694,POINT(44.0586891174316 -69.2067337036133 4326),2014-07-30,24452353

如何在CSV文件中格式化地理数据,以便bcp接受它?

2 个答案:

答案 0 :(得分:1)

好的,它无法找到有关使用bcp导入人类可读地理数据的任何信息,因此我转换了点数据:

POINT(44.058689117431641 -69.206733703613281 4326),...

以二进制形式:

E6100000010D000000203B4D51C000000020830746400000000000E6B040,...

并将二进制表格放入我的CSV文件中。 bcp似乎可以正常工作。

答案 1 :(得分:0)

我对BCP一无所知,但希望这能满足您的需求。

尝试将数据作为字符串导入临时表,然后通过更新将其导入真实表。

SQL Server内部空间数据的存储方式类似于varbinary,即您的点将存储为

0xE6100000010C010000203B4D51C0FAFFFF1F83074640

如果您尝试使用SSIS移动数据,它实际上将其视为varbinary,而不是空间。因此,需要进行转换才能使字符串格式正确。

SELECT GEOGRAPHY::STGeomFromText('POINT(44.0586891174316 -69.2067337036133)', 4326)
or
SELECT GEOGRAPHY::Point(-69.2067337036133,44.0586891174316,4326)

由于这些原因,我猜测BCP没有隐含地识别转换,你可能需要手动完成。

CSV =>临时表=>

INSERT INTO RealTable (GeogColumn) SELECT GEOGRAPHY::STGeomFromText(GeogString,4326) FROM TempTable