我对PostGIS(以及一般的数据库)完全陌生,如果我错误地使用了术语,请道歉。
我有两个具有多线串几何的表,我想根据几何将一个字段从一个表复制到另一个表。几何图形不重叠,所以我想找到最接近的几何图形。我已经尝试了谷歌搜索,并找到了很多尝试它的方法(ST_DISTANCE等),但查询总是返回错误的结果(在地图上检查后)。
e.g。
TABLE1有要复制的字段,TABLE2没有。我想浏览TABLE2中的所有记录并找到它在TABLE1中最接近的记录,然后复制一个字段。
对不起,如果我的描述不清楚,我发现很难把它写成一个明确的句子(这使得谷歌搜索很难)。如果有人能帮助我,或者至少指出我正确的方向,我真的很感激。理想情况下,我想要一个SELECT语句来检查结果,然后一个INSERT(或类似的)来更新表,或者可能创建一个第三个加入'表
我一直在使用PGAdmin和QGIS。
谢谢,
答案 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