2016-06-13 2 views
0

следующие this question здесь является продолжениемгистограмма расстояний между несколькими таблицами

фона У меня есть 2 базы данных: события (400K строк за весь год) и автомобилей (6 млн строк на каждый месяц). меньший образец here выглядит следующим образом input db события имеют места x y. автомобили имеют car_id, time_now, time_prev, time_next, а также местоположения x y.

Желаемый результат будет иметь гистограмму расстояний от каждого события до всех автомобилей во время события ± время дельта. В качестве альтернативы было бы хорошо иметь для каждого события таблицу расстояний для каждого автомобиля во время события ± треугольник. И если ничего не работает, возможно, добавьте в столбец событий таблицы closest_car_0min, closest_car_5min, closest_car_15min, closest_car_30min.

Я думал использовать ST_Distance для расчета расстояний (расширение PostGIS).

Я также создал time_prev и time_next, потому что думал, что время события event.date_ ± 1 час попадает в интервал от time_prev до time_now или от time_now до time_next.

Вопрос: ну, как же я это делаю?

Update уточнить, я добавил желаемых результатов в here глядя, как этот results

ответ

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; 
Смежные вопросы