2016-06-20 36 views
1

PostGIS(およびデータベース全般)を完全に新しくしたので、誤って使用すると謝ります。(PostGIS)マルチリストリングジオメトリに基づいて2つのテーブルをマージする

多線条のジオメトリを持つ2つのテーブルがあり、ジオメトリに基づいて1つのテーブルから別のテーブルに1つのフィールドをコピーしたいとします。ジオメトリは重複しないので、最も近いジオメトリを探したいと思います。私はグーグルで試してみましたが、試してみる方法はたくさんありましたが(ST_DISTANCEなど)、クエリは常に誤った結果を返します。

TABLE1にはコピーするフィールドがあり、TABLE2にはコピーされません。 TABLE2のすべてのレコードを調べ、TABLE1に最も近いレコードを見つけて、フィールドをコピーします。

申し訳ありません私の説明が明確でない場合は、明確な文章にするのが難しいと思っています。誰かがこれを手伝ったり、少なくとも私が正しい方向に向いていれば、本当に感謝しています。理想的には、SELECTステートメントで結果を確認し、次にINSERT(または類似)を使用してテーブルを更新するか、場合によっては3番目の '結合'テーブルを作成します。

PGAdminとQGISを使用しています。

おかげで、

答えて

3

あなたはこのようなものを用いた第3の結合テーブルを作成することができます。

CREATE TABLE joined_table (id1 int, id2 int) AS 
SELECT DISTINCT ON(table1.id) table1.id, 
table2.id 
FROM table1, table2 
WHERE table1.id <> table2.id 
ORDER BY table1.id, ST_Distance(table1.the_geom,table2.the_geom) 

それは遅すぎると思われる場合は、あなたがこの

AND ST_DWithin(table1.the_geom, table2.the_geom, 300) 

を追加し、結果を制限することができますどこの条件。

あなたはここに http://www.bostongis.com/?content_name=postgis_nearest_neighbor

ソリューションのより良い説明を見つけると、ここ https://gis.stackexchange.com/questions/3249/postgis-assign-id-of-point-in-layer-a-to-closest-point-in-layer-b

とここstackoverflowの上で同様の質問ヘルプフランチェスコため https://gis.stackexchange.com/questions/155373/postgis-nearest-point-with-lateral-join-in-postgresql-9-3

+0

感謝することができます。問題は正しいSRSによって無効にされたSRIDが原因であることがわかりました。これはQGISです。しかし、私の質問には上記の答えがあるので、私はそれを答えとしてマークします。 – Sandwich

関連する問題