多个表之间距离的直方图

时间:2016-06-13 20:27:19

标签: postgresql postgis

以下this question这是续集

背景我有2个数据库:事件(整个年份为400k行)和汽车(每月6百万行)。较小的样本here看起来像这样input db 事件有位置x y。汽车有car_id,time_now,time_prev,time_next以及位置x y。

期望的结果将是在事件±delta时间具有从每个事件到所有汽车的距离的直方图。 或者,对于每个事件来说,在事件±delta时,每辆车的距离表都很好。如果没有任何效果,可以添加到表事件列nearest_car_0min,nearest_car_5min,nearest_car_15min,nearest_car_30min。

我想用ST_Distance来计算距离(PostGIS扩展)。

我还创建了time_prev和time_next因为我想检查事件events.date_±1小时的时间是否在从time_prev到time_now或从time_now到time_next的时间间隔内。

问题:嗯,我到底怎么做?

更新以澄清,我将所需结果添加到here,看起来像这样results

1 个答案:

答案 0 :(得分:0)

我想我找到了答案。以下工作:

--create empty table for results and fix key
create table results 
(
    resultID serial NOT NULL,
    vehicle_id numeric(10,0),
    eventid numeric(10,0),
    deltaMIN interval MINUTE,
    distance_m32138 double precision,
    eventtime timestamp without time zone, 
    time_now timestamp without time zone,
    time_prev timestamp without time zone, 
    time_next timestamp without time zone   
)
;
alter table results add CONSTRAINT results_pkey PRIMARY KEY (resultID);

INSERT INTO results
( vehicle_id, eventid, deltaMIN, distance_m32138, eventtime, time_now, time_prev,time_next)
select 
    vehicle_id,
    eventid,
    deltaMIN,
    ST_Distance (
        ST_Transform(toy_events.geom ,32138), 
        ST_Transform(toy_cars.geom ,32138)
        ) AS distance_m32138,
    eventtime, time_now, time_prev, time_next
from
    toy_events, 
    toy_cars,
    deltas
where
    eventtime between time_prev and time_next 
    or
    (
        eventtime - deltamin between time_prev and time_now
        or
        eventtime + deltamin between time_now and time_next
     )    
;
select * from results;