使用特殊格式折线将数据复制到带有csv文件的postgres + postgis

时间:2016-01-22 15:59:09

标签: database postgresql csv gis postgis

我正在使用Postgres + Postgis处理空间数据,我正在使用带有CSV文件(id,时间戳,纬度,经度)的数据集,我正在将CSV文件中的数据复制到数据库中,如下所示:

cat mycsv.csv | psql -d mydatabase -c "COPY mytable (id ,datetime ,lat ,lon) from stdin WITH DELIMITER ','"

现在我正在使用不同的CSV文件数据集,我无法将其复制到数据库。 新的CSV文件有一条折线,格式如下:

val1,val2,val3,"[[-8.618643, 41.141412], [-8.618499, 41.141376], [-8.620326, 41.14251]]"

我想将折线导入几何数组或文本字段(WKT),我的最终目标是导入折线并将其作为几何类型线存储在表格中。

问题是,因为分隔符是','折线是一个坐标分隔我的','我得到了明显的错误:

ERROR:  extra data after last expected column

有没有办法让这个问题有超过1个分隔符或不同的aprouch?

3 个答案:

答案 0 :(得分:3)

我假设你已经可以将csv导入postgres,你的表将有一个字符串字段geom_text

问题是你字符串的格式。 geom_text

如果您在MULTILINESTRING查看 MULTILINESTRING ((10 10, 20 20, 10 40), (40 40, 30 30, 40 20, 30 10))

的格式
[]

所以你必须使用字符串替换来() MULTILINESTRING 然后附加关键字 SELECT ST_GeomFromText(updated_geom_text) FROM YourCsvTable;

然后使用 https://en.wikipedia.org/wiki/Well-known_text 功能创建对象geom。

Disposing

答案 1 :(得分:1)

cat mycsv.csv | psql -d mydatabase -c "COPY mytable (id ,datetime ,lat ,lon) from stdin WITH DELIMITER ',' CSV"

您需要指定CSV模式,目前您只是告诉它使用分隔符。

答案 2 :(得分:0)

我使用sed,awk和regex修改数据集来解决这个问题。

然后使用ST_GeomFromText函数从文本中获取行。