【问题标题】:Postgis points inside and outside polygonsPostgis 点内部和外部多边形
【发布时间】:2018-09-22 04:06:10
【问题描述】:

我正在尝试弄清楚如何检测进入某个区域并离开该区域的汽车。 目前,我有一个包含汽车 ID、时间戳、纬度、经度(carid、时间戳、纬度、经度)的表(数据来自 GPS 跟踪器)。 我有多边形变量,我将其转换为几何类型。

我的目标是说 A 车早上 8 点进站,A 车早上 9 点出发,A 车下午 3 点出发,A 车下午 4 点出发,B 车上午 10 点出发,B 车下午 3 点出发,...

我知道如何使用 ST_Within 在多边形内部查找点(纬度/经度),使用 ST_Disjoint 在外部查找点。

据此,我想我必须为每辆车找到最接近多边形的内部和外部点(如果外部点的时间戳

但我不知道如何编写正确的查询,因为我知道一辆车每天可以进出几次。

【问题讨论】:

  • 您能否提供:一些测试数据、您目前编写的查询以及创建表语句?它总是显着提高有人回答您的问题的机会;-)

标签: postgresql postgis


【解决方案1】:

蛮力方法是定期询问每辆车的状态(进/出)。

SELECT carID, st_within(car_geom, boxgeom) AS in_box FROM table 
WHERE timestamp = '2018-06-05 09:00:00';

这会为您提供汽车 IDS 列表,如果进入,则为 True,如果退出,则为 False。但是,它假定您的数据每秒记录一个且仅一个点。

在实践中,我会寻找timestamp BETWEEN '2018-06-05 09:00:00' AND '2018-06-05 09:01:00' 并确保您使用GROUP BY carID 为每辆车只获得一排。您需要在 st_within 周围使用聚合函数。仅当所有点都在框内时,如果您希望 in_box 为 True,请使用 bool_and;如果您希望 in_box 为 True(如果至少有一个点在里面),请使用 bool_or

SELECT carID, bool_or(st_within(car_geom, boxgeom)) AS in_box 
FROM table WHERE timestamp BETWEEN '2018-06-05 09:00:00' 
AND '2018-06-05 09:01:00' GROUP BY carID;

然后我会使用一些 python 来生成查询并分析结果(例如使用 psycopg2)。

可能有更优雅的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-19
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 2017-10-09
    相关资源
    最近更新 更多