0

ジオメトリ列を抽出してテーブルに格納するシェープファイルがあります。これは、432 個のポイントを持つ Geometry 列に格納されたサンプル データです。

0x000000000104AC010000AB3E57ABBBC4384127A08938705B57414F401361C3C43841C9E53F846C5B574190A0F8E1F6C438410F0BB5766E....

ここで、Geometry 列からすべてのポイント、つまり 432 ポイントを抽出し、それを別のテーブルに保存したいと考えています。そのためにST_PointN列を使用していますが、一度に1ポイントしか得られません。ST_NumPoint432番号が表示されますが、すべてのポイントではありません。

Geometry列からすべてのポイントを抽出してDBに保存するにはどうすればよいですか?

乾杯、

4

1 に答える 1

2

ST_PointN ドキュメントの最初の例: https://postgis.net/docs/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)。最初の場合、最初の点は最後の点としても存在します。

于 2012-10-22T09:41:16.150 に答える