Добавить данные столбца в таблицу на основе пересечения геометрии с другой таблицей - PostgreSQL - PullRequest
0 голосов
/ 09 апреля 2020

мой город определил некоторые Городские периметры возрождения , используя PostGIS Я разделил город Блоки в периметре и Здания в периметре . Теперь я хочу обновить таблицу зданий двумя новыми столбцами, связав их с блоками, на которых они находятся.

Ниже приведен пример таблицы блоков, два столбца qd_setor и qd_fiscal: информация, которую мне нужно передать в таблицу зданий

 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 будут повторяться несколько раз, поскольку в блоке есть несколько зданий.

Спасибо за помощь!

1 Ответ

0 голосов
/ 09 апреля 2020

Итак, я понял, я использовал следующий запрос:

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; 
...