(PostGIS) 基于多线串几何合并两个表

(PostGIS) Merge two tables based on multlinestring geometry

我对 PostGIS(和一般数据库)完全陌生,如果我使用的术语不正确,请见谅。

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

例如

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

抱歉,如果我的描述不清楚,我发现很难将其放入一个清晰的句子中(这使得谷歌搜索变得困难)。如果有人可以帮助解决这个问题,或者至少为我指明正确的方向,我将非常感激。理想情况下,我想要一个 SELECT 语句来检查结果,然后一个 INSERT(或类似语句)来更新 table,或者可能创建第三个 'joined' table.

我一直在使用 PGAdmin 和 QGIS。

谢谢,

您可以创建第三个加入 table 使用这样的东西:

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

以及此处关于 Whosebug 的类似问题 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