我的城市已经定义了一些Urban Revitalization Perimeters使用PostGIS,我将城市分开了Blocks within Perimeters和Buildings within Perimeters。我现在想做的是用两个新列更新buildings表,将它们与它们所在的块相关联。
以下是Blocks表的示例,两列qd_setor和qd_fiscal是我需要传递给Buildings表的信息
qd_setor | qd_fiscal | wkb_geometry
----------+-----------+---------------
041 | 038 | 010600...
086 | 302 | 010600...
041 | 076 | 010600...
075 | 054 | 010600...
019 | 055 | 010600...
这是“建筑物”表的示例:
ed_id | ed_area | ed_altura | ed_distrito | wkb_geometry
---------+---------+-----------+---------------+--------------
2739627 | 187.211 | 6.922 | SANTA_CECILIA | 010600...
2739628 | 240.39 | 43.382 | SANTA_CECILIA | 010600...
2739781 | 51.758 | 4.668 | SANTA_CECILIA | 010600...
2739629 | 388.264 | 52.907 | SANTA_CECILIA | 010600...
这是我用来创建块和建筑物表的查询:
CREATE TABLE quadras_opurb AS
SELECT q.qd_setor, q.qd_fiscal, q.wkb_geometry
FROM quadra_fiscal q
WHERE EXISTS (
SELECT ou_nome
FROM op_urbana_valid o
WHERE
ST_Intersects(q.wkb_geometry, o.wkb_geometry)
);
这是预期的结果,所以一旦完成,我不必测试所需的块与建筑物之间的交集,我只需按qd_setor和qd_fiscal进行过滤:
ed_id | ed_area | ed_altura | ed_distrito | wkb_geometry | qd_setor | qd_fiscal
---------+---------+-----------+---------------+--------------+----------+------------
2739627 | 187.211 | 6.922 | SANTA_CECILIA | 010600... | 041 | 038
2739628 | 240.39 | 43.382 | SANTA_CECILIA | 010600... | 041 | 038
2739781 | 51.758 | 4.668 | SANTA_CECILIA | 010600... | 041 | 038
2739629 | 388.264 | 52.907 | SANTA_CECILIA | 010600... | 086 | 302
2739631 | 187.244 | 22.865 | SANTA_CECILIA | 010600... | 086 | 302
请注意,由于一个块中包含多个建筑物,因此qd_setor和qd_fiscal将重复几次。
感谢您的帮助!
所以我想通了,我使用以下查询:
CREATE TABLE ed_quadra AS
SELECT
q.qd_setor AS setor,
q.qd_fiscal AS quadra,
e.*
FROM ed_opurb AS e
JOIN quadras_opurb AS q
ON ST_Intersects(e.wkb_geometry, q.wkb_geometry)
ORDER BY q.qd_setor ASC, q.qd_fiscal ASC;