我需要获得每个人使用PostGIS进入以多边形定义的特定地点的次数。
以下是我开始使用SQL语句的方法:
SELECT id_p
FROM Movement
WHERE ST_Contains('POLYGON((long1 lat1, long2 lat2, long3 lat3, long4 lat4))',
ST_MakePoint(longitude,latitude))
AND (datehour::date BETWEEN '2017-01-01' AND '2017-01-31')
AND speed = 0
答案 0 :(得分:2)
您可以尝试进行基本计数查询:
SELECT
id_p,
COUNT(*) AS cnt
FROM
Movement
WHERE
ST_Contains('POLYGON((long1 lat1, long2 lat2, long3 lat3, long4 lat4))',
ST_MakePoint(longitude,latitude)) AND
datehour::date BETWEEN '2017-01-01' AND '2017-01-31' AND
speed = 0
GROUP BY
id_p;
要加快此查询速度,您可以考虑向WHERE
子句中使用的列添加索引,即datehour
和speed
。您还可以考虑调用ST_Contains
所涉及的列的地理空间索引。