我有两个桌子。在一个城市的坐标中,在另一个城市的交货区域的坐标中。
如何比较其中一个交付区域中的城市坐标,并在列中将1或0写入区域名称?如果城市至少部分落在交付范围内,则应为1。
我不太擅长编程。我想我需要使用这样的代码:
boolean && (geometry A, geometry B);
或者其中一些:
boolean ST_Contains (geometry geomA, geometry geomB);
但是我不了解如何指定另一个表。以及如何将结果写在带有城市的表的列中。
请帮助提供代码! 谢谢!
UPD 我需要比较两个区域。送货区中包括市区吗?如果已包含或部分包含它,则在区域名称的列中指定1。如果不包括,则为0。 屏幕text exemple
表格屏幕
答案 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表示最大的感谢!你太棒了!))