2017-10-19 133 views
1

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

回答

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时涉及的列的地理空间索引。