2016-01-22 104 views
0

我正在與Postgres + Postgis處理空間數據,我使用CSV文件(id,時間戳,緯度,經度)的數據集,我正在複製從CSV文件導入到數據庫中,像這樣的數據:從csv文件複製數據到postgres + postgis與特殊的格式化折線

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

我現在用的CSV文件和IM遇到麻煩複制到數據庫中的數據集diferent。 新的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的方式分隔符,還是不同的問題?

回答

3

我會假設你已經可以導入CSV給Postgres並且您的表將有一個字符串場geom_text

問題是你字符串的格式。 geom_text

如果你看看這裏https://en.wikipedia.org/wiki/Well-known_text,你必須使用字符串的MULTILINESTRING

MULTILINESTRING ((10 10, 20 20, 10 40), 
        (40 40, 30 30, 40 20, 30 10)) 

所以格式替換到恰克[]() 然後附加關鍵字MULTILINESTRING

然後使用功能ST_GeomFromText來創建你的對象幾何。

SELECT ST_GeomFromText(updated_geom_text) FROM YourCsvTable; 
+0

我明白了。問題是我不能將csv導入postgres,因爲分隔符being','。 我真的不得不改變CSV文件的格式,它的相當大。有沒有在引號內部捕捉逗號? – Miksel

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

你需要指定CSV模式,你現在只是告訴它使用的分隔符。

+0

這對於將格式不正確的* linestring *轉換爲PostGIS幾何體沒有任何幫助。 –

0

我使用sed,awk和regex來修改數據集。

然後使用ST_GeomFromText函數從文本中獲取行。