2012-10-18 20 views
0

我有一個Shapefile,我從中提取幾何列並將其存儲到表中。 這是存儲在具有432個點的幾何列中的樣本數據。ST_PointN從幾何列中獲取點

0x000000000104AC010000AB3E57ABBBC4384127A08938705B57414F401361C3C43841C9E53F846C5B574190A0F8E1F6C438410F0BB5766E ....

現在我想從幾何列,即432點提取每個點,並將其存儲到另一個表。爲此,我使用ST_PointN列,但它一次只給我1分。 ST_NumPoint會給我432個號碼,但不是所有的點。

如何從幾何列中提取每個點並將其存儲到數據庫中?

乾杯,

+0

我不太明白。您想要從幾何中讀取點,併爲另一個表中的每個點創建一行。是嗎? – psousa

+0

使用ST_PointN有什麼問題? – podiluska

+1

我給了[這個問題]的答案(http://stackoverflow.com/questions/12809201/storing-point-column-from-shapefile/12809687「這個問題」)將有助於你。 –

回答

2

採取ST_PointN文檔的第一個例子看看: http://postgis.org/documentation/manual-1.5/ST_PointN.html 並注意generate_series一部分。

看來,你的幾何體是Linestring?假設,你的幾何學是「行」表,並且要建立「點」表格中,這樣的事情應該工作:

SELECT ST_PointN(a.the_geom, generate_series(1, ST_NPoints(a.the_geom))) 
INTO points 
FROM lines a; 

在的情況下,原來的幾何形狀的多邊形,你必須調整該查詢點點,因爲ST_PointN以線串作爲參數:

SELECT ST_PointN(
    ST_ExteriorRing(a.the_geom), 
    generate_series(1, ST_NPoints(a.the_geom) - 1) 
) 
INTO points 
FROM lines a; 

第一個和最後一個點在多邊形的ExteriorRing中相同。無論您使用ST_NPoints(a.the_geom) - 1還是ST_NPoints(a.the_geom),這取決於您的需求。在第一種情況下,第一點也將作爲最後一點出現。

+0

謝謝你。但似乎我無法在SQL Server上運行此查詢。 –

+0

對不起!我的錯誤,我沒有注意到你回答了有關SQL Server的問題,該例子適用於PostgreSQL。 – user1702401