如何比较两个具有坐标的表并在第一个表的列中写入false真值?

时间:2019-09-02 21:31:37

标签: postgresql postgis

我有两个桌子。在一个城市的坐标中,在另一个城市的交货区域的坐标中。

如何比较其中一个交付区域中的城市坐标,并在列中将1或0写入区域名称?如果城市至少部分落在交付范围内,则应为1。

我不太擅长编程。我想我需要使用这样的代码: boolean && (geometry A, geometry B);

或者其中一些: boolean ST_Contains (geometry geomA, geometry geomB);

但是我不了解enter image description here如何指定另一个表。以及如何将结果写在带有城市的表的列中。

请帮助提供代码! 谢谢!

UPD 我需要比较两个区域。送货区中包括市区吗?如果已包含或部分包含它,则在区域名称的列中指定1。如果不包括,则为0。 屏幕text exemple

表格屏幕

2 个答案:

答案 0 :(得分:2)

这大概是一个查询:

UPDATE cities
   SET green_area = z.ga::integer,
   SET red_area = z.ra::integer
FROM (SELECT place_id,
             bool_or(cities.geom && zones.geom)
                FILTER (WHERE zones.name = 'green_area') AS ga,
             bool_or(cities.geom && zones.geom)
                FILTER (WHERE zones.name = 'red_area') AS ra
      FROM zones
         JOIN cities ON cities.geom && zones.geom
      GROUP BY cities.place_id
     ) AS z
WHERE cities.place_id = z.place_id;

&&是几何的“重叠”运算符。

答案 1 :(得分:0)

UPDATE cities
   SET  green_area = z.ga::integer,
        red_area = z.ra::integer
FROM (SELECT place_id,
             bool_or(cities.geom && zones.geom)
                FILTER (WHERE zones.name = 'green_area') AS ga,
             bool_or(cities.geom && zones.geom)
                FILTER (WHERE zones.name = 'red_area') AS ra
      FROM zones
         JOIN cities ON cities.geom && zones.geom
      GROUP BY cities.place_id
     ) AS z
WHERE cities.place_id = z.place_id;

是的!该代码非常适合我! 对Laurenz Albe表示最大的感谢!你太棒了!))