选择"strongest"个相交区域
Choose "strongest" intersected area
我有一个物化视图,它是使用两个多边形层的 st_intersect 空间联合的结果。表 1 和 table2,table1 的特征可以被分割为 table2 的几个多边形,这就是我创建 mview 的方式:
SELECT g.field1,
att.ogc_fid,
st_intersection(g.geom, att.geom) AS intersect_geom,
st_area(g.geom) AS geom_area,
st_area(st_intersection(g.geom, att.geom)) AS intersect_area
FROM table1 g
JOIN table2 att ON g.geom && att.geom;
field1 | ogc_fid | intersect_geom| geom_area | intersect_area
aa12345 1 123123 123131 1313123414
aa12345 3 1 1 1
bb12345 2 4124141 13141 14415151
bb12345 1 1243141414 1231313 13131323
从这个 mview 我只想选择最强的相交区域并加入来自 table2 的描述。我已经尝试了下面的代码:
select a.*, b.desc
from table1 a
left join lateral
(
select desc
table2
where table2.ogc_fid= table1.ogc_fid
order by (intersect_area/geom_area) DESC NULLS LAST
limit 1
) b
field1 | ogc_fid | intersect_geom| geom_area | intersect_area | desc
aa12345 1 123123 123131 1313123414 desc for 1
bb12345 2 4124141 13141 14415151 desc for 2
但这里的结果不是预期的。我经历了其他 threads 但我在尝试只获得一个结果(最强)时卡住了,并创建了一个 table 与那些最强的交集所以对于 table 中的一个特征我有最强的相交。
如果我没理解错的话,你已经完成了艰巨的任务。您只需要从视图中为每个字段选择一个记录并与 table2 连接...所以试试这个:
SELECT DISTINCT ON (field1) field1, m.ogc_fid, b.desc FROM
mview AS m
INNER JOIN table2 AS b ON b.ogc_fid = m.ogc_fid
ORDER BY field1, (intersect_area/geom_area) DESC
我有一个物化视图,它是使用两个多边形层的 st_intersect 空间联合的结果。表 1 和 table2,table1 的特征可以被分割为 table2 的几个多边形,这就是我创建 mview 的方式:
SELECT g.field1,
att.ogc_fid,
st_intersection(g.geom, att.geom) AS intersect_geom,
st_area(g.geom) AS geom_area,
st_area(st_intersection(g.geom, att.geom)) AS intersect_area
FROM table1 g
JOIN table2 att ON g.geom && att.geom;
field1 | ogc_fid | intersect_geom| geom_area | intersect_area
aa12345 1 123123 123131 1313123414
aa12345 3 1 1 1
bb12345 2 4124141 13141 14415151
bb12345 1 1243141414 1231313 13131323
从这个 mview 我只想选择最强的相交区域并加入来自 table2 的描述。我已经尝试了下面的代码:
select a.*, b.desc
from table1 a
left join lateral
(
select desc
table2
where table2.ogc_fid= table1.ogc_fid
order by (intersect_area/geom_area) DESC NULLS LAST
limit 1
) b
field1 | ogc_fid | intersect_geom| geom_area | intersect_area | desc
aa12345 1 123123 123131 1313123414 desc for 1
bb12345 2 4124141 13141 14415151 desc for 2
但这里的结果不是预期的。我经历了其他 threads 但我在尝试只获得一个结果(最强)时卡住了,并创建了一个 table 与那些最强的交集所以对于 table 中的一个特征我有最强的相交。
如果我没理解错的话,你已经完成了艰巨的任务。您只需要从视图中为每个字段选择一个记录并与 table2 连接...所以试试这个:
SELECT DISTINCT ON (field1) field1, m.ogc_fid, b.desc FROM
mview AS m
INNER JOIN table2 AS b ON b.ogc_fid = m.ogc_fid
ORDER BY field1, (intersect_area/geom_area) DESC