[LINE | MULTILINE] STRINGからポイントを抽出する方法


9

vectorLayerを作成して、DBに格納されたQGISLINESTRINGまたはDBにMULTILINESTRING格納されたすべてのポイントを表示しますPostGIS

LINESTRING(またはMULTILINESTRING)のすべての点をに変換する必要があると思いますPOINT

最初の質問

それPostGISを行う機能はありますか?

2番目の質問

結果POINTテーブルから重複したポイントを除外したい場合、どうすればよいですか?


ありがとうございます。あなたの答えはすべて私を大いに助けてくれました。どちらを正しいものとしてマークするかを決めるために、少し考えなければなりません:)
Heisenbug

回答:


7

ポイントの順序を取得し、元のジオメトリにリンクするには

SELECT (ST_DumpPoints(the_geom)).path as path, id, (ST_DumpPoints(the_geom)).geom FROM linestrings)

そして、http: //wiki.postgresql.org/wiki/Deleting_duplicatesから重複を削除し ます

重複を削除するには一意のIDが1つ必要であることに注意してください。IDがない場合は作成する必要があります。


こんにちはタイプミスがあります。最後のブラケットを削除してください。右の構文は次のとおりでなければなりませんSELECT (ST_DumpPoints(the_geom)).path as path, id, (ST_DumpPoints(the_geom)).geom FROM linestrings
aborruso

5

最初の質問に関する限り、そのためのPostGIS関数ST_DumpPointsがあります。

docsページの最初の例はまさに必要なものです。これはセットを返す関数なので、ポイントをダンプするだけでなく、ポイントを元のジオメトリに関連付ける情報(パス配列)もダンプします。ポイントだけを気にするので、次のようなことを試すことができます。

SELECT (dp).geom FROM (
  SELECT ST_DumpPoints(geom) AS dp
    FROM linestrings
)

2

広告1。

CREATE TABLE points AS
SELECT ST_PointFromWKB(ST_AsEWKB(linestring_geom)) AS point_geom FROM linestring_table;

ad 2. 重複ポイントを選択するPostGIS

CREATE TEMPORARY TABLE temp AS 
SELECT *
FROM points AS a, points AS b
WHERE ST_Equals(a.geom, b.geom) AND a.id <> b.id;

DROP FROM points USING temp WHERE points.id=temp.id;

これは機能せず、空のジオメトリが生成され、PostgreSQLは処理された各行に対して警告を発行しますOGC WKB expected, EWKB provided - use GeometryFromEWKB() for this。あなただけのスキップ可能性がST_AsEWKB()完全に、しかしで最後の例を参照してくださいそれはまだ、どんな意味がありませんST_PointFromWKB
kprist

入力byteaがPOINTジオメトリを表していない場合は、NULLが返されます。
ウラジミール

2

一意のポイントのみをダンプするには、SELECT DISTINCT ON式でいくつかのサブクエリを使用できます。

SELECT geom, gid, path
FROM (
  SELECT DISTINCT ON (geom) geom, path, gid
  FROM (
    SELECT (ST_DumpPoints(the_geom)).geom, (ST_DumpPoints(the_geom)).path, gid
    FROM my_linestrings_table
  ) f
  ORDER BY geom, path, gid
) f
ORDER BY gid, path;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.