(PostGIS)根据多线串几何合并两个表

时间:2016-06-20 10:15:28

标签: postgis pgadmin qgis

我对PostGIS(以及一般的数据库)完全陌生,如果我错误地使用了术语,请道歉。

我有两个具有多线串几何的表,我想根据几何将一个字段从一个表复制到另一个表。几何图形不重叠,所以我想找到最接近的几何图形。我已经尝试了谷歌搜索,并找到了很多尝试它的方法(ST_DISTANCE等),但查询总是返回错误的结果(在地图上检查后)。

e.g。

TABLE1有要复制的字段,TABLE2没有。我想浏览TABLE2中的所有记录并找到它在TABLE1中最接近的记录,然后复制一个字段。

对不起,如果我的描述不清楚,我发现很难把它写成一个明确的句子(这使得谷歌搜索很难)。如果有人能帮助我,或者至少指出我正确的方向,我真的很感激。理想情况下,我想要一个SELECT语句来检查结果,然后一个INSERT(或类似的)来更新表,或者可能创建一个第三个加入'表

我一直在使用PGAdmin和QGIS。

谢谢,

1 个答案:

答案 0 :(得分: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)  

到where条件。

您可以在此处找到更好的解决方案说明 http://www.bostongis.com/?content_name=postgis_nearest_neighbor

和stackoverflow上的类似问题 https://gis.stackexchange.com/questions/3249/postgis-assign-id-of-point-in-layer-a-to-closest-point-in-layer-b

在这里 https://gis.stackexchange.com/questions/155373/postgis-nearest-point-with-lateral-join-in-postgresql-9-3