问题描述
我有以下表格:
function bar() {
return new Promise((resolve) => {
if (Math.random() < 0.5) {
return resolve('return');
} else {
throw 'throw';
}
});
}
您可以将 CREATE TABLE IF NOT EXISTS "walks"
(
id varchar(36),PRIMARY KEY (id)
);
CREATE TABLE IF NOT EXISTS "points"
(
id varchar(36),time timestamp(6) with time zone,geometry geometry(Point,4326),walk_id varchar(36),FOREIGN KEY (walk_id)
REFERENCES walks (id)
)
视为表示串联在一起的一组有序点:
walk
我正在尝试按行走顺序选择所有点,但仅针对与给定多边形相交的行走(即在多边形内具有点的行走)。此外,我想选择一个布尔值,表示每个返回的点是否在该区域内。
我想出了以下查询,可以正常工作:
---O------O---O-O-----O---
但这似乎效率低下,因为 PostGIS Intersects 函数必须对所有内容调用两次。
是否可以在派生表或其他东西中同时选择相交点 ID 和步行 ID,然后在 SELECT(用于布尔值)和 WHERE(过滤正确的步行)中引用它们?
解决方法
如果没有示例数据,很难完全理解您的用例,但 CTE 可能会简化一些事情。类似的东西:
WITH p AS (
SELECT id,geometry,walk_id,time,ST_Intersects(geometry,'SRID=4326;POLYGON((-81.8 -0.5,-81.1 -0.5,-81.1 -1.5,-81.8 -1.5,-81.8 -0.5))') AS in_area
FROM points )
SELECT p.id,w.id AS walk_id,p.geometry,p.in_area FROM p
JOIN walks w ON w.id = p.walk_id
WHERE p.in_area IS TRUE ORDER BY p.time ASC;