获取操作发生的次数

时间:2017-10-19 09:06:14

标签: sql postgresql postgis

我需要获得每个人使用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

enter image description here

1 个答案:

答案 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子句中使用的列添加索引,即datehourspeed。您还可以考虑调用ST_Contains所涉及的列的地理空间索引。