Hermes
 All Data Structures Files Functions Variables Macros Pages
S2T-Clustering4ReTraTree.sql File Reference

Functions

CREATE TYPE voting_signal AS (obj_id integer, traj_id integer, subtraj_id integer, subtraj_upper integer[], seg_id integer[], normalized_voting double precision[], normalized_lifespan interval[])
 
void s2t_preprocessing (text data_source, integer i, integer n)
 
CREATE OR REPLACE FUNCTION S2T_Postprocessing (data_source text, i integer, n integer) RETURNS void AS $$declare max_cluster_id integer
 
execute SELECT coalesce (max(clust_id), 0) FROM '||data_source||'_c_'||i||'_sc_'||n||'_repr 'into max_cluster_id
 
execute INSERT INTO
data_source _c_ i _sc_ n 
_outliers_seg (obj_id, traj_id, subtraj_id, seg_id, seg) SELECT obj_id
 
void s2t_clustering (boolean verbose=false, boolean only_voting=false)
 
CREATE OR REPLACE FUNCTION S2T_vsrelt (voting_signal) RETURNS TABLE(obj_id integer
 
CREATE OR REPLACE FUNCTION
traj_id subtraj_id
subtraj_upper seg_id
normalized_voting double
normalized_lifespan interval
AS SELECT normalized_lifespan[i]
FROM 
generate_series (array_lower($1.seg_id, 1), array_upper($1.seg_id, 1)) AS i
 
CREATE OR REPLACE FUNCTION
traj_id subtraj_id
subtraj_upper seg_id
normalized_voting double
normalized_lifespan interval
AS SELECT normalized_lifespan[i]
FROM 
generate_series (array_lower($1.subtraj_upper, 1), array_upper($1.subtraj_upper, 1)) AS j WHERE COALESCE($1.subtraj_upper[j-1]
 
IF subtraj_upper[array_upper(subtraj_upper, 1)]
< nr_sTHENsubtraj_upper[array_upper(subtraj_upper,
1)+1]:=nr_s;ENDIF;IFCOALESCE(array_length(subtraj_upper, 1), 0)=0THENsubtraj_upper[1]:=nr_s;ENDIF;vs.subtraj_upper:=subtraj_upper;RETURNvs;END;$$LANGUAGEplpgsqlIMMUTABLESTRICT;float8s2t_srgain(integerobj_id, integertraj_id, integersubtraj_id, textd, textdata_source){};CREATEORREPLACEFUNCTIONS2T_SampleSimilarity(obj_idinteger, traj_idinteger, subtraj_idinteger, Dtext, data_sourcetext) RETURNSdoubleprecisionAS $$DECLAREsimilaritydoubleprecision;BEGINEXECUTE'SELECTCOALESCE(round(2 *sum_voting::numeric/(candidate.NrSegments+N.NrSegments), 15)::doubleprecision, 0) avg_votingFROM(SELECTNrSegmentsFROM'||quote_ident(D||'_subtraj')::regclass||'WHERE(obj_id, traj_id, subtraj_id)=($1, $2, $3)) candidate,(SELECTs_obj_id, s_traj_id, s_subtraj_id, o_obj_id, o_traj_id, o_subtraj_id, count(distance)-COALESCE(sum(distance)/dd.max_voting, 0) ASsum_votingFROM(SELECTlength(SegmentSP(lx, ly, hx, hy)) max_votingFROMhdatasets_statisticsWHEREdataset=HDatasetID('''||data_source||''')) dd,(SELECTs.obj_ids_obj_id, s.traj_ids_traj_id, s.subtraj_ids_subtraj_id, s.seg_ids_seg_id, o.obj_ido_obj_id, o.traj_ido_traj_id, o.subtraj_ido_subtraj_id, min(Trapezoidal(o.seg, s.seg)) ASdistance, count(o.seg) FROM(SELECTobj_id, traj_id, $3ASsubtraj_id, seg_id, segFROMONLY'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id, traj_id)=($1, $2) ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id, traj_id, subtraj_id)=($1, $2, $3))) ASsINNERJOIN(SELECTss.obj_id, ss.traj_id, sv.subtraj_id, ss.seg_id, ss.segFROM'||quote_ident(D||'_seg_sample')::regclass||'ssINNERJOIN'||quote_ident(D||'_seg_voting')::regclass||'svON(ss.obj_id, ss.traj_id, ss.seg_id)=(sv.obj_id, sv.traj_id, sv.seg_id) WHEREss.seg &&&(SELECTbuffer(trajectory_agg(segORDERBYgetTi(seg) ASC)::BoxST, $4, $5, $5) FROM'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id, traj_id)=($1, $2) ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id, traj_id, subtraj_id)=($1, $2, $3)))) ASoONo.seg &&buffer(s.seg::BoxST, $4, $5, $5) GROUPBYs.obj_id, s.traj_id, s.subtraj_id, s.seg_id, o.obj_id, o.traj_id, o.subtraj_idORDERBYs.obj_id, s.traj_id, s.subtraj_id, s.seg_id, o.obj_id, o.traj_id, o.subtraj_id) AStmp1--WHEREtmp1.distance > GROUP BY dd max_voting AS J INNER JOIN quote_ident(D|| '_subtraj') INTO similarity USING 
S2T_TemporalBufferSize ()
 
IF subtraj_upper[array_upper(subtraj_upper, 1)]
< nr_sTHENsubtraj_upper[array_upper(subtraj_upper,
1)+1]:=nr_s;ENDIF;IFCOALESCE(array_length(subtraj_upper, 1), 0)=0THENsubtraj_upper[1]:=nr_s;ENDIF;vs.subtraj_upper:=subtraj_upper;RETURNvs;END;$$LANGUAGEplpgsqlIMMUTABLESTRICT;float8s2t_srgain(integerobj_id, integertraj_id, integersubtraj_id, textd, textdata_source){};CREATEORREPLACEFUNCTIONS2T_SampleSimilarity(obj_idinteger, traj_idinteger, subtraj_idinteger, Dtext, data_sourcetext) RETURNSdoubleprecisionAS $$DECLAREsimilaritydoubleprecision;BEGINEXECUTE'SELECTCOALESCE(round(2 *sum_voting::numeric/(candidate.NrSegments+N.NrSegments), 15)::doubleprecision, 0) avg_votingFROM(SELECTNrSegmentsFROM'||quote_ident(D||'_subtraj')::regclass||'WHERE(obj_id, traj_id, subtraj_id)=($1, $2, $3)) candidate,(SELECTs_obj_id, s_traj_id, s_subtraj_id, o_obj_id, o_traj_id, o_subtraj_id, count(distance)-COALESCE(sum(distance)/dd.max_voting, 0) ASsum_votingFROM(SELECTlength(SegmentSP(lx, ly, hx, hy)) max_votingFROMhdatasets_statisticsWHEREdataset=HDatasetID('''||data_source||''')) dd,(SELECTs.obj_ids_obj_id, s.traj_ids_traj_id, s.subtraj_ids_subtraj_id, s.seg_ids_seg_id, o.obj_ido_obj_id, o.traj_ido_traj_id, o.subtraj_ido_subtraj_id, min(Trapezoidal(o.seg, s.seg)) ASdistance, count(o.seg) FROM(SELECTobj_id, traj_id, $3ASsubtraj_id, seg_id, segFROMONLY'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id, traj_id)=($1, $2) ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id, traj_id, subtraj_id)=($1, $2, $3))) ASsINNERJOIN(SELECTss.obj_id, ss.traj_id, sv.subtraj_id, ss.seg_id, ss.segFROM'||quote_ident(D||'_seg_sample')::regclass||'ssINNERJOIN'||quote_ident(D||'_seg_voting')::regclass||'svON(ss.obj_id, ss.traj_id, ss.seg_id)=(sv.obj_id, sv.traj_id, sv.seg_id) WHEREss.seg &&&(SELECTbuffer(trajectory_agg(segORDERBYgetTi(seg) ASC)::BoxST, $4, $5, $5) FROM'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id, traj_id)=($1, $2) ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id, traj_id, subtraj_id)=($1, $2, $3)))) ASoONo.seg &&buffer(s.seg::BoxST, $4, $5, $5) GROUPBYs.obj_id, s.traj_id, s.subtraj_id, s.seg_id, o.obj_id, o.traj_id, o.subtraj_idORDERBYs.obj_id, s.traj_id, s.subtraj_id, s.seg_id, o.obj_id, o.traj_id, o.subtraj_id) AStmp1--WHEREtmp1.distance > GROUP BY dd max_voting AS J INNER JOIN quote_ident(D|| '_subtraj') INTO similarity USING 
S2T_SpatialBufferSize ()
 
table s2t_clustercandidates (integer obj_id_in, integer traj_id_in, integer subtraj_id_in, text d, text data_source)
 

Variables

DROP TYPE IF EXISTS voting_signal CASCADE
 
BEGIN execute ANALYZE
data_source _c_ i _sc_ n 
_outliers_seg_sample
 
execute ANALYZE data_source
_c_ i _sc_ n 
_outliers_seg_voting
 
execute ANALYZE data_source
_c_ i _sc_ n 
_outliers_subtraj
 
execute UPDATE data_source _c_
i _sc_ n _outliers_subtraj r
SET 
subtraj_id = greatest(r1.subtraj_max_subtraj_id, r1.sc_max_subtraj_id) + r.subtraj_id
 
execute UPDATE data_source _c_
i _sc_ n _outliers_subtraj r
SET 
clust_id
 
execute INSERT INTO
data_source _c_ i _sc_ n 
traj_id
 
execute INSERT INTO
data_source _c_ i _sc_ n 
seg_id
 
execute ANALYZE data_source
_c_ i _sc_ n 
_outliers_seg
 
 END
 
LANGUAGE plpgsql STRICT
 
CREATE OR REPLACE FUNCTION traj_id integer
 
CREATE OR REPLACE FUNCTION
traj_id subtraj_id
subtraj_upper seg_id
normalized_voting double 
precision
 
CREATE OR REPLACE FUNCTION
traj_id subtraj_id
subtraj_upper seg_id
normalized_voting double
normalized_lifespan interval
AS SELECT 
obj_id
 
CREATE OR REPLACE FUNCTION
traj_id subtraj_id
subtraj_upper seg_id
normalized_voting double
normalized_lifespan interval
AS SELECT 
j
 
CREATE OR REPLACE FUNCTION
traj_id subtraj_id
subtraj_upper seg_id
normalized_voting double
normalized_lifespan interval
AS SELECT 
normalized_voting [i]
 
CREATE OR REPLACE FUNCTION
traj_id subtraj_id
subtraj_upper seg_id
normalized_voting double
normalized_lifespan interval
AS SELECT normalized_lifespan[i]
FROM< iANDi<=$1.subtraj_upper[j];$$LANGUAGEsqlSTRICT;voting_signals2t_gva(integerobj_id,
integertraj_id,
integersubtraj_id, textd,
textdata_source){};CREATEORREPLACEFUNCTIONS2T_TSA(vsvoting_signal,
winteger, taudoubleprecision)
RETURNSvoting_signalAS
$$DECLAREnr_sinteger;ddoubleprecision[];subtraj_upperinteger[];LPkinteger;prev_subtraj_upperinteger;mean_1doubleprecision;mean_2doubleprecision;variance_1doubleprecision;variance_2doubleprecision;ten_sixteendoubleprecision:=power(10,-16);d_maxdoubleprecision;BEGINnr_s:=array_length(vs.seg_id,
1);FORnIN(w+1)..(nr_s-w)
LOOPmean_1:=(SELECTsum(vs.normalized_voting[i])
FROMgenerate_series(n-w, n-1)
ASi)/w;mean_2:=(SELECTsum(vs.normalized_voting[i])
FROMgenerate_series(n, n+w-1)
ASi)/w;variance_1:=(SELECTsum(power(vs.normalized_voting[i]-mean_1,
2)) FROMgenerate_series(n-w, n-1)
ASi)/w;variance_2:=(SELECTsum(power(vs.normalized_voting[i]-mean_2,
2)) FROMgenerate_series(n, n+w-1)
ASi)/w;IFvariance_1=0THENvariance_1:=ten_sixteen;ENDIF;IFvariance_2=0THENvariance_2:=ten_sixteen;ENDIF;d[n]:=power(mean_1-mean_2, 2)*(1/variance_1+1/variance_2);ENDLOOP;LPk:=1;prev_subtraj_upper:=0;FORnIN(w+1)..(nr_s-w) LOOPSELECTmax(d[i]) INTOd_maxFROMgenerate_series(n-w, n+w) ASi;IFd[n]> tau AND 
d [n]
 
prev_subtraj_upper __pad0__
 
LPk __pad1__
 
END IF
 
END LOOP
 
IF subtraj_upper[array_upper(subtraj_upper, 1)]
< nr_sTHENsubtraj_upper[array_upper(subtraj_upper,
1)+1]:=nr_s;ENDIF;IFCOALESCE(array_length(subtraj_upper, 1), 0)=0THENsubtraj_upper[1]:=nr_s;ENDIF;vs.subtraj_upper:=subtraj_upper;RETURNvs;END;$$LANGUAGEplpgsqlIMMUTABLESTRICT;float8s2t_srgain(integerobj_id, integertraj_id, integersubtraj_id, textd, textdata_source){};CREATEORREPLACEFUNCTIONS2T_SampleSimilarity(obj_idinteger, traj_idinteger, subtraj_idinteger, Dtext, data_sourcetext) RETURNSdoubleprecisionAS $$DECLAREsimilaritydoubleprecision;BEGINEXECUTE'SELECTCOALESCE(round(2 *sum_voting::numeric/(candidate.NrSegments+N.NrSegments), 15)::doubleprecision, 0) avg_votingFROM(SELECTNrSegmentsFROM'||quote_ident(D||'_subtraj')::regclass||'WHERE(obj_id, traj_id, subtraj_id)=($1, $2, $3)) candidate,(SELECTs_obj_id, s_traj_id, s_subtraj_id, o_obj_id, o_traj_id, o_subtraj_id, count(distance)-COALESCE(sum(distance)/dd.max_voting, 0) ASsum_votingFROM(SELECTlength(SegmentSP(lx, ly, hx, hy)) max_votingFROMhdatasets_statisticsWHEREdataset=HDatasetID('''||data_source||''')) dd,(SELECTs.obj_ids_obj_id, s.traj_ids_traj_id, s.subtraj_ids_subtraj_id, s.seg_ids_seg_id, o.obj_ido_obj_id, o.traj_ido_traj_id, o.subtraj_ido_subtraj_id, min(Trapezoidal(o.seg, s.seg)) ASdistance, count(o.seg) FROM(SELECTobj_id, traj_id, $3ASsubtraj_id, seg_id, segFROMONLY'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id, traj_id)=($1, $2) ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id, traj_id, subtraj_id)=($1, $2, $3))) ASsINNERJOIN(SELECTss.obj_id, ss.traj_id, sv.subtraj_id, ss.seg_id, ss.segFROM'||quote_ident(D||'_seg_sample')::regclass||'ssINNERJOIN'||quote_ident(D||'_seg_voting')::regclass||'svON(ss.obj_id, ss.traj_id, ss.seg_id)=(sv.obj_id, sv.traj_id, sv.seg_id) WHEREss.seg &&&(SELECTbuffer(trajectory_agg(segORDERBYgetTi(seg) ASC)::BoxST, $4, $5, $5) FROM'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id, traj_id)=($1, $2) ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id, traj_id, subtraj_id)=($1, $2, $3)))) ASoONo.seg &&buffer(s.seg::BoxST, $4, $5, $5) GROUPBYs.obj_id, s.traj_id, s.subtraj_id, s.seg_id, o.obj_id, o.traj_id, o.subtraj_idORDERBYs.obj_id, s.traj_id, s.subtraj_id, s.seg_id, o.obj_id, o.traj_id, o.subtraj_id) AStmp1--WHEREtmp1.distance > GROUP BY 
s_obj_id
 
IF subtraj_upper[array_upper(subtraj_upper, 1)]
< nr_sTHENsubtraj_upper[array_upper(subtraj_upper,
1)+1]:=nr_s;ENDIF;IFCOALESCE(array_length(subtraj_upper, 1), 0)=0THENsubtraj_upper[1]:=nr_s;ENDIF;vs.subtraj_upper:=subtraj_upper;RETURNvs;END;$$LANGUAGEplpgsqlIMMUTABLESTRICT;float8s2t_srgain(integerobj_id, integertraj_id, integersubtraj_id, textd, textdata_source){};CREATEORREPLACEFUNCTIONS2T_SampleSimilarity(obj_idinteger, traj_idinteger, subtraj_idinteger, Dtext, data_sourcetext) RETURNSdoubleprecisionAS $$DECLAREsimilaritydoubleprecision;BEGINEXECUTE'SELECTCOALESCE(round(2 *sum_voting::numeric/(candidate.NrSegments+N.NrSegments), 15)::doubleprecision, 0) avg_votingFROM(SELECTNrSegmentsFROM'||quote_ident(D||'_subtraj')::regclass||'WHERE(obj_id, traj_id, subtraj_id)=($1, $2, $3)) candidate,(SELECTs_obj_id, s_traj_id, s_subtraj_id, o_obj_id, o_traj_id, o_subtraj_id, count(distance)-COALESCE(sum(distance)/dd.max_voting, 0) ASsum_votingFROM(SELECTlength(SegmentSP(lx, ly, hx, hy)) max_votingFROMhdatasets_statisticsWHEREdataset=HDatasetID('''||data_source||''')) dd,(SELECTs.obj_ids_obj_id, s.traj_ids_traj_id, s.subtraj_ids_subtraj_id, s.seg_ids_seg_id, o.obj_ido_obj_id, o.traj_ido_traj_id, o.subtraj_ido_subtraj_id, min(Trapezoidal(o.seg, s.seg)) ASdistance, count(o.seg) FROM(SELECTobj_id, traj_id, $3ASsubtraj_id, seg_id, segFROMONLY'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id, traj_id)=($1, $2) ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id, traj_id, subtraj_id)=($1, $2, $3))) ASsINNERJOIN(SELECTss.obj_id, ss.traj_id, sv.subtraj_id, ss.seg_id, ss.segFROM'||quote_ident(D||'_seg_sample')::regclass||'ssINNERJOIN'||quote_ident(D||'_seg_voting')::regclass||'svON(ss.obj_id, ss.traj_id, ss.seg_id)=(sv.obj_id, sv.traj_id, sv.seg_id) WHEREss.seg &&&(SELECTbuffer(trajectory_agg(segORDERBYgetTi(seg) ASC)::BoxST, $4, $5, $5) FROM'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id, traj_id)=($1, $2) ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id, traj_id, subtraj_id)=($1, $2, $3)))) ASoONo.seg &&buffer(s.seg::BoxST, $4, $5, $5) GROUPBYs.obj_id, s.traj_id, s.subtraj_id, s.seg_id, o.obj_id, o.traj_id, o.subtraj_idORDERBYs.obj_id, s.traj_id, s.subtraj_id, s.seg_id, o.obj_id, o.traj_id, o.subtraj_id) AStmp1--WHEREtmp1.distance > GROUP BY 
s_traj_id
 
IF subtraj_upper[array_upper(subtraj_upper, 1)]
< nr_sTHENsubtraj_upper[array_upper(subtraj_upper,
1)+1]:=nr_s;ENDIF;IFCOALESCE(array_length(subtraj_upper, 1), 0)=0THENsubtraj_upper[1]:=nr_s;ENDIF;vs.subtraj_upper:=subtraj_upper;RETURNvs;END;$$LANGUAGEplpgsqlIMMUTABLESTRICT;float8s2t_srgain(integerobj_id, integertraj_id, integersubtraj_id, textd, textdata_source){};CREATEORREPLACEFUNCTIONS2T_SampleSimilarity(obj_idinteger, traj_idinteger, subtraj_idinteger, Dtext, data_sourcetext) RETURNSdoubleprecisionAS $$DECLAREsimilaritydoubleprecision;BEGINEXECUTE'SELECTCOALESCE(round(2 *sum_voting::numeric/(candidate.NrSegments+N.NrSegments), 15)::doubleprecision, 0) avg_votingFROM(SELECTNrSegmentsFROM'||quote_ident(D||'_subtraj')::regclass||'WHERE(obj_id, traj_id, subtraj_id)=($1, $2, $3)) candidate,(SELECTs_obj_id, s_traj_id, s_subtraj_id, o_obj_id, o_traj_id, o_subtraj_id, count(distance)-COALESCE(sum(distance)/dd.max_voting, 0) ASsum_votingFROM(SELECTlength(SegmentSP(lx, ly, hx, hy)) max_votingFROMhdatasets_statisticsWHEREdataset=HDatasetID('''||data_source||''')) dd,(SELECTs.obj_ids_obj_id, s.traj_ids_traj_id, s.subtraj_ids_subtraj_id, s.seg_ids_seg_id, o.obj_ido_obj_id, o.traj_ido_traj_id, o.subtraj_ido_subtraj_id, min(Trapezoidal(o.seg, s.seg)) ASdistance, count(o.seg) FROM(SELECTobj_id, traj_id, $3ASsubtraj_id, seg_id, segFROMONLY'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id, traj_id)=($1, $2) ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id, traj_id, subtraj_id)=($1, $2, $3))) ASsINNERJOIN(SELECTss.obj_id, ss.traj_id, sv.subtraj_id, ss.seg_id, ss.segFROM'||quote_ident(D||'_seg_sample')::regclass||'ssINNERJOIN'||quote_ident(D||'_seg_voting')::regclass||'svON(ss.obj_id, ss.traj_id, ss.seg_id)=(sv.obj_id, sv.traj_id, sv.seg_id) WHEREss.seg &&&(SELECTbuffer(trajectory_agg(segORDERBYgetTi(seg) ASC)::BoxST, $4, $5, $5) FROM'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id, traj_id)=($1, $2) ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id, traj_id, subtraj_id)=($1, $2, $3)))) ASoONo.seg &&buffer(s.seg::BoxST, $4, $5, $5) GROUPBYs.obj_id, s.traj_id, s.subtraj_id, s.seg_id, o.obj_id, o.traj_id, o.subtraj_idORDERBYs.obj_id, s.traj_id, s.subtraj_id, s.seg_id, o.obj_id, o.traj_id, o.subtraj_id) AStmp1--WHEREtmp1.distance > GROUP BY 
s_subtraj_id
 
IF subtraj_upper[array_upper(subtraj_upper, 1)]
< nr_sTHENsubtraj_upper[array_upper(subtraj_upper,
1)+1]:=nr_s;ENDIF;IFCOALESCE(array_length(subtraj_upper, 1), 0)=0THENsubtraj_upper[1]:=nr_s;ENDIF;vs.subtraj_upper:=subtraj_upper;RETURNvs;END;$$LANGUAGEplpgsqlIMMUTABLESTRICT;float8s2t_srgain(integerobj_id, integertraj_id, integersubtraj_id, textd, textdata_source){};CREATEORREPLACEFUNCTIONS2T_SampleSimilarity(obj_idinteger, traj_idinteger, subtraj_idinteger, Dtext, data_sourcetext) RETURNSdoubleprecisionAS $$DECLAREsimilaritydoubleprecision;BEGINEXECUTE'SELECTCOALESCE(round(2 *sum_voting::numeric/(candidate.NrSegments+N.NrSegments), 15)::doubleprecision, 0) avg_votingFROM(SELECTNrSegmentsFROM'||quote_ident(D||'_subtraj')::regclass||'WHERE(obj_id, traj_id, subtraj_id)=($1, $2, $3)) candidate,(SELECTs_obj_id, s_traj_id, s_subtraj_id, o_obj_id, o_traj_id, o_subtraj_id, count(distance)-COALESCE(sum(distance)/dd.max_voting, 0) ASsum_votingFROM(SELECTlength(SegmentSP(lx, ly, hx, hy)) max_votingFROMhdatasets_statisticsWHEREdataset=HDatasetID('''||data_source||''')) dd,(SELECTs.obj_ids_obj_id, s.traj_ids_traj_id, s.subtraj_ids_subtraj_id, s.seg_ids_seg_id, o.obj_ido_obj_id, o.traj_ido_traj_id, o.subtraj_ido_subtraj_id, min(Trapezoidal(o.seg, s.seg)) ASdistance, count(o.seg) FROM(SELECTobj_id, traj_id, $3ASsubtraj_id, seg_id, segFROMONLY'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id, traj_id)=($1, $2) ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id, traj_id, subtraj_id)=($1, $2, $3))) ASsINNERJOIN(SELECTss.obj_id, ss.traj_id, sv.subtraj_id, ss.seg_id, ss.segFROM'||quote_ident(D||'_seg_sample')::regclass||'ssINNERJOIN'||quote_ident(D||'_seg_voting')::regclass||'svON(ss.obj_id, ss.traj_id, ss.seg_id)=(sv.obj_id, sv.traj_id, sv.seg_id) WHEREss.seg &&&(SELECTbuffer(trajectory_agg(segORDERBYgetTi(seg) ASC)::BoxST, $4, $5, $5) FROM'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id, traj_id)=($1, $2) ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id, traj_id, subtraj_id)=($1, $2, $3)))) ASoONo.seg &&buffer(s.seg::BoxST, $4, $5, $5) GROUPBYs.obj_id, s.traj_id, s.subtraj_id, s.seg_id, o.obj_id, o.traj_id, o.subtraj_idORDERBYs.obj_id, s.traj_id, s.subtraj_id, s.seg_id, o.obj_id, o.traj_id, o.subtraj_id) AStmp1--WHEREtmp1.distance > GROUP BY 
o_obj_id
 
IF subtraj_upper[array_upper(subtraj_upper, 1)]
< nr_sTHENsubtraj_upper[array_upper(subtraj_upper,
1)+1]:=nr_s;ENDIF;IFCOALESCE(array_length(subtraj_upper, 1), 0)=0THENsubtraj_upper[1]:=nr_s;ENDIF;vs.subtraj_upper:=subtraj_upper;RETURNvs;END;$$LANGUAGEplpgsqlIMMUTABLESTRICT;float8s2t_srgain(integerobj_id, integertraj_id, integersubtraj_id, textd, textdata_source){};CREATEORREPLACEFUNCTIONS2T_SampleSimilarity(obj_idinteger, traj_idinteger, subtraj_idinteger, Dtext, data_sourcetext) RETURNSdoubleprecisionAS $$DECLAREsimilaritydoubleprecision;BEGINEXECUTE'SELECTCOALESCE(round(2 *sum_voting::numeric/(candidate.NrSegments+N.NrSegments), 15)::doubleprecision, 0) avg_votingFROM(SELECTNrSegmentsFROM'||quote_ident(D||'_subtraj')::regclass||'WHERE(obj_id, traj_id, subtraj_id)=($1, $2, $3)) candidate,(SELECTs_obj_id, s_traj_id, s_subtraj_id, o_obj_id, o_traj_id, o_subtraj_id, count(distance)-COALESCE(sum(distance)/dd.max_voting, 0) ASsum_votingFROM(SELECTlength(SegmentSP(lx, ly, hx, hy)) max_votingFROMhdatasets_statisticsWHEREdataset=HDatasetID('''||data_source||''')) dd,(SELECTs.obj_ids_obj_id, s.traj_ids_traj_id, s.subtraj_ids_subtraj_id, s.seg_ids_seg_id, o.obj_ido_obj_id, o.traj_ido_traj_id, o.subtraj_ido_subtraj_id, min(Trapezoidal(o.seg, s.seg)) ASdistance, count(o.seg) FROM(SELECTobj_id, traj_id, $3ASsubtraj_id, seg_id, segFROMONLY'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id, traj_id)=($1, $2) ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id, traj_id, subtraj_id)=($1, $2, $3))) ASsINNERJOIN(SELECTss.obj_id, ss.traj_id, sv.subtraj_id, ss.seg_id, ss.segFROM'||quote_ident(D||'_seg_sample')::regclass||'ssINNERJOIN'||quote_ident(D||'_seg_voting')::regclass||'svON(ss.obj_id, ss.traj_id, ss.seg_id)=(sv.obj_id, sv.traj_id, sv.seg_id) WHEREss.seg &&&(SELECTbuffer(trajectory_agg(segORDERBYgetTi(seg) ASC)::BoxST, $4, $5, $5) FROM'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id, traj_id)=($1, $2) ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id, traj_id, subtraj_id)=($1, $2, $3)))) ASoONo.seg &&buffer(s.seg::BoxST, $4, $5, $5) GROUPBYs.obj_id, s.traj_id, s.subtraj_id, s.seg_id, o.obj_id, o.traj_id, o.subtraj_idORDERBYs.obj_id, s.traj_id, s.subtraj_id, s.seg_id, o.obj_id, o.traj_id, o.subtraj_id) AStmp1--WHEREtmp1.distance > GROUP BY 
o_traj_id
 
IF subtraj_upper[array_upper(subtraj_upper, 1)]
< nr_sTHENsubtraj_upper[array_upper(subtraj_upper,
1)+1]:=nr_s;ENDIF;IFCOALESCE(array_length(subtraj_upper, 1), 0)=0THENsubtraj_upper[1]:=nr_s;ENDIF;vs.subtraj_upper:=subtraj_upper;RETURNvs;END;$$LANGUAGEplpgsqlIMMUTABLESTRICT;float8s2t_srgain(integerobj_id, integertraj_id, integersubtraj_id, textd, textdata_source){};CREATEORREPLACEFUNCTIONS2T_SampleSimilarity(obj_idinteger, traj_idinteger, subtraj_idinteger, Dtext, data_sourcetext) RETURNSdoubleprecisionAS $$DECLAREsimilaritydoubleprecision;BEGINEXECUTE'SELECTCOALESCE(round(2 *sum_voting::numeric/(candidate.NrSegments+N.NrSegments), 15)::doubleprecision, 0) avg_votingFROM(SELECTNrSegmentsFROM'||quote_ident(D||'_subtraj')::regclass||'WHERE(obj_id, traj_id, subtraj_id)=($1, $2, $3)) candidate,(SELECTs_obj_id, s_traj_id, s_subtraj_id, o_obj_id, o_traj_id, o_subtraj_id, count(distance)-COALESCE(sum(distance)/dd.max_voting, 0) ASsum_votingFROM(SELECTlength(SegmentSP(lx, ly, hx, hy)) max_votingFROMhdatasets_statisticsWHEREdataset=HDatasetID('''||data_source||''')) dd,(SELECTs.obj_ids_obj_id, s.traj_ids_traj_id, s.subtraj_ids_subtraj_id, s.seg_ids_seg_id, o.obj_ido_obj_id, o.traj_ido_traj_id, o.subtraj_ido_subtraj_id, min(Trapezoidal(o.seg, s.seg)) ASdistance, count(o.seg) FROM(SELECTobj_id, traj_id, $3ASsubtraj_id, seg_id, segFROMONLY'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id, traj_id)=($1, $2) ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id, traj_id, subtraj_id)=($1, $2, $3))) ASsINNERJOIN(SELECTss.obj_id, ss.traj_id, sv.subtraj_id, ss.seg_id, ss.segFROM'||quote_ident(D||'_seg_sample')::regclass||'ssINNERJOIN'||quote_ident(D||'_seg_voting')::regclass||'svON(ss.obj_id, ss.traj_id, ss.seg_id)=(sv.obj_id, sv.traj_id, sv.seg_id) WHEREss.seg &&&(SELECTbuffer(trajectory_agg(segORDERBYgetTi(seg) ASC)::BoxST, $4, $5, $5) FROM'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id, traj_id)=($1, $2) ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id, traj_id, subtraj_id)=($1, $2, $3)))) ASoONo.seg &&buffer(s.seg::BoxST, $4, $5, $5) GROUPBYs.obj_id, s.traj_id, s.subtraj_id, s.seg_id, o.obj_id, o.traj_id, o.subtraj_idORDERBYs.obj_id, s.traj_id, s.subtraj_id, s.seg_id, o.obj_id, o.traj_id, o.subtraj_id) AStmp1--WHEREtmp1.distance > GROUP BY 
o_subtraj_id
 
IF subtraj_upper[array_upper(subtraj_upper, 1)]
< nr_sTHENsubtraj_upper[array_upper(subtraj_upper,
1)+1]:=nr_s;ENDIF;IFCOALESCE(array_length(subtraj_upper, 1), 0)=0THENsubtraj_upper[1]:=nr_s;ENDIF;vs.subtraj_upper:=subtraj_upper;RETURNvs;END;$$LANGUAGEplpgsqlIMMUTABLESTRICT;float8s2t_srgain(integerobj_id, integertraj_id, integersubtraj_id, textd, textdata_source){};CREATEORREPLACEFUNCTIONS2T_SampleSimilarity(obj_idinteger, traj_idinteger, subtraj_idinteger, Dtext, data_sourcetext) RETURNSdoubleprecisionAS $$DECLAREsimilaritydoubleprecision;BEGINEXECUTE'SELECTCOALESCE(round(2 *sum_voting::numeric/(candidate.NrSegments+N.NrSegments), 15)::doubleprecision, 0) avg_votingFROM(SELECTNrSegmentsFROM'||quote_ident(D||'_subtraj')::regclass||'WHERE(obj_id, traj_id, subtraj_id)=($1, $2, $3)) candidate,(SELECTs_obj_id, s_traj_id, s_subtraj_id, o_obj_id, o_traj_id, o_subtraj_id, count(distance)-COALESCE(sum(distance)/dd.max_voting, 0) ASsum_votingFROM(SELECTlength(SegmentSP(lx, ly, hx, hy)) max_votingFROMhdatasets_statisticsWHEREdataset=HDatasetID('''||data_source||''')) dd,(SELECTs.obj_ids_obj_id, s.traj_ids_traj_id, s.subtraj_ids_subtraj_id, s.seg_ids_seg_id, o.obj_ido_obj_id, o.traj_ido_traj_id, o.subtraj_ido_subtraj_id, min(Trapezoidal(o.seg, s.seg)) ASdistance, count(o.seg) FROM(SELECTobj_id, traj_id, $3ASsubtraj_id, seg_id, segFROMONLY'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id, traj_id)=($1, $2) ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id, traj_id, subtraj_id)=($1, $2, $3))) ASsINNERJOIN(SELECTss.obj_id, ss.traj_id, sv.subtraj_id, ss.seg_id, ss.segFROM'||quote_ident(D||'_seg_sample')::regclass||'ssINNERJOIN'||quote_ident(D||'_seg_voting')::regclass||'svON(ss.obj_id, ss.traj_id, ss.seg_id)=(sv.obj_id, sv.traj_id, sv.seg_id) WHEREss.seg &&&(SELECTbuffer(trajectory_agg(segORDERBYgetTi(seg) ASC)::BoxST, $4, $5, $5) FROM'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id, traj_id)=($1, $2) ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id, traj_id, subtraj_id)=($1, $2, $3)))) ASoONo.seg &&buffer(s.seg::BoxST, $4, $5, $5) GROUPBYs.obj_id, s.traj_id, s.subtraj_id, s.seg_id, o.obj_id, o.traj_id, o.subtraj_idORDERBYs.obj_id, s.traj_id, s.subtraj_id, s.seg_id, o.obj_id, o.traj_id, o.subtraj_id) AStmp1--WHEREtmp1.distance > GROUP BY dd max_voting AS J INNER JOIN quote_ident(D|| '_subtraj') INTO similarity USING * 
power (S2T_Sigma(), 2)
 
RETURN similarity
 

Function Documentation

execute INSERT INTO data_source _c_ i _sc_ n _outliers_seg ( obj_id  ,
traj_id  ,
subtraj_id  ,
seg_id  ,
seg   
)
CREATE TYPE voting_signal AS ( obj_id  integer,
traj_id  integer,
subtraj_id  integer,
subtraj_upper  integer[],
seg_id  integer[],
normalized_voting double  precision[],
normalized_lifespan  interval[] 
)
execute SELECT coalesce ( max(clust_id ,
 
)
CREATE OR REPLACE FUNCTION traj_id subtraj_id subtraj_upper seg_id normalized_voting double normalized_lifespan interval AS SELECT normalized_lifespan [i] FROM generate_series ( array_lower($1.seg_id, 1)  ,
array_upper($1.seg_id, 1)   
)
CREATE OR REPLACE FUNCTION traj_id subtraj_id subtraj_upper seg_id normalized_voting double normalized_lifespan interval AS SELECT normalized_lifespan [i] FROM generate_series ( array_lower($1.subtraj_upper, 1)  ,
array_upper($1.subtraj_upper, 1)   
)
table s2t_clustercandidates ( integer  obj_id_in,
integer  traj_id_in,
integer  subtraj_id_in,
text  d,
text  data_source 
)
void s2t_clustering ( boolean  verbose = false,
boolean  only_voting = false 
)
CREATE OR REPLACE FUNCTION S2T_Postprocessing ( data_source  text,
i  integer,
integer 
)
void s2t_preprocessing ( text  data_source,
integer  i,
integer  n 
)
IF subtraj_upper [array_upper(subtraj_upper, 1)]<nr_sTHENsubtraj_upper[array_upper(subtraj_upper,1)+1]:=nr_s;ENDIF;IFCOALESCE(array_length(subtraj_upper,1),0)=0THENsubtraj_upper[1]:=nr_s;ENDIF;vs.subtraj_upper:=subtraj_upper;RETURNvs;END;$$LANGUAGEplpgsqlIMMUTABLESTRICT;float8s2t_srgain(integerobj_id,integertraj_id,integersubtraj_id,textd,textdata_source){};CREATEORREPLACEFUNCTIONS2T_SampleSimilarity(obj_idinteger,traj_idinteger,subtraj_idinteger,Dtext,data_sourcetext)RETURNSdoubleprecisionAS$$DECLAREsimilaritydoubleprecision;BEGINEXECUTE'SELECTCOALESCE(round(2*sum_voting::numeric/(candidate.NrSegments+N.NrSegments),15)::doubleprecision,0)avg_votingFROM(SELECTNrSegmentsFROM'||quote_ident(D||'_subtraj')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3))candidate,(SELECTs_obj_id,s_traj_id,s_subtraj_id,o_obj_id,o_traj_id,o_subtraj_id,count(distance)-COALESCE(sum(distance)/dd.max_voting,0)ASsum_votingFROM(SELECTlength(SegmentSP(lx,ly,hx,hy))max_votingFROMhdatasets_statisticsWHEREdataset=HDatasetID('''||data_source||'''))dd,(SELECTs.obj_ids_obj_id,s.traj_ids_traj_id,s.subtraj_ids_subtraj_id,s.seg_ids_seg_id,o.obj_ido_obj_id,o.traj_ido_traj_id,o.subtraj_ido_subtraj_id,min(Trapezoidal(o.seg,s.seg))ASdistance,count(o.seg)FROM(SELECTobj_id,traj_id,$3ASsubtraj_id,seg_id,segFROMONLY'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id,traj_id)=($1,$2)ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3)))ASsINNERJOIN(SELECTss.obj_id,ss.traj_id,sv.subtraj_id,ss.seg_id,ss.segFROM'||quote_ident(D||'_seg_sample')::regclass||'ssINNERJOIN'||quote_ident(D||'_seg_voting')::regclass||'svON(ss.obj_id,ss.traj_id,ss.seg_id)=(sv.obj_id,sv.traj_id,sv.seg_id)WHEREss.seg&&&(SELECTbuffer(trajectory_agg(segORDERBYgetTi(seg)ASC)::BoxST,$4,$5,$5)FROM'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id,traj_id)=($1,$2)ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3))))ASoONo.seg&&buffer(s.seg::BoxST,$4,$5,$5)GROUPBYs.obj_id,s.traj_id,s.subtraj_id,s.seg_id,o.obj_id,o.traj_id,o.subtraj_idORDERBYs.obj_id,s.traj_id,s.subtraj_id,s.seg_id,o.obj_id,o.traj_id,o.subtraj_id)AStmp1--WHEREtmp1.distance> GROUP BY dd max_voting AS J INNER JOIN quote_ident (D || '_subtraj') INTO similarity USING S2T_SpatialBufferSize ( )
IF subtraj_upper [array_upper(subtraj_upper, 1)]<nr_sTHENsubtraj_upper[array_upper(subtraj_upper,1)+1]:=nr_s;ENDIF;IFCOALESCE(array_length(subtraj_upper,1),0)=0THENsubtraj_upper[1]:=nr_s;ENDIF;vs.subtraj_upper:=subtraj_upper;RETURNvs;END;$$LANGUAGEplpgsqlIMMUTABLESTRICT;float8s2t_srgain(integerobj_id,integertraj_id,integersubtraj_id,textd,textdata_source){};CREATEORREPLACEFUNCTIONS2T_SampleSimilarity(obj_idinteger,traj_idinteger,subtraj_idinteger,Dtext,data_sourcetext)RETURNSdoubleprecisionAS$$DECLAREsimilaritydoubleprecision;BEGINEXECUTE'SELECTCOALESCE(round(2*sum_voting::numeric/(candidate.NrSegments+N.NrSegments),15)::doubleprecision,0)avg_votingFROM(SELECTNrSegmentsFROM'||quote_ident(D||'_subtraj')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3))candidate,(SELECTs_obj_id,s_traj_id,s_subtraj_id,o_obj_id,o_traj_id,o_subtraj_id,count(distance)-COALESCE(sum(distance)/dd.max_voting,0)ASsum_votingFROM(SELECTlength(SegmentSP(lx,ly,hx,hy))max_votingFROMhdatasets_statisticsWHEREdataset=HDatasetID('''||data_source||'''))dd,(SELECTs.obj_ids_obj_id,s.traj_ids_traj_id,s.subtraj_ids_subtraj_id,s.seg_ids_seg_id,o.obj_ido_obj_id,o.traj_ido_traj_id,o.subtraj_ido_subtraj_id,min(Trapezoidal(o.seg,s.seg))ASdistance,count(o.seg)FROM(SELECTobj_id,traj_id,$3ASsubtraj_id,seg_id,segFROMONLY'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id,traj_id)=($1,$2)ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3)))ASsINNERJOIN(SELECTss.obj_id,ss.traj_id,sv.subtraj_id,ss.seg_id,ss.segFROM'||quote_ident(D||'_seg_sample')::regclass||'ssINNERJOIN'||quote_ident(D||'_seg_voting')::regclass||'svON(ss.obj_id,ss.traj_id,ss.seg_id)=(sv.obj_id,sv.traj_id,sv.seg_id)WHEREss.seg&&&(SELECTbuffer(trajectory_agg(segORDERBYgetTi(seg)ASC)::BoxST,$4,$5,$5)FROM'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id,traj_id)=($1,$2)ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3))))ASoONo.seg&&buffer(s.seg::BoxST,$4,$5,$5)GROUPBYs.obj_id,s.traj_id,s.subtraj_id,s.seg_id,o.obj_id,o.traj_id,o.subtraj_idORDERBYs.obj_id,s.traj_id,s.subtraj_id,s.seg_id,o.obj_id,o.traj_id,o.subtraj_id)AStmp1--WHEREtmp1.distance> GROUP BY dd max_voting AS J INNER JOIN quote_ident (D || '_subtraj') INTO similarity USING S2T_TemporalBufferSize ( )
CREATE OR REPLACE FUNCTION S2T_vsrelt ( voting_signal  )

Variable Documentation

prev_subtraj_upper __pad0__
LPk __pad1__
execute ANALYZE data_source _c_ i _sc_ n _outliers_seg
execute INSERT INTO data_source _c_ i _sc_ n seg FROM data_source _c_ i _sc_ n _outliers_seg_sample
execute ANALYZE data_source _c_ i _sc_ n _outliers_seg_voting
execute ANALYZE data_source _c_ i _sc_ n _outliers_subtraj
DROP TYPE IF EXISTS voting_signal CASCADE
execute UPDATE data_source _c_ i _sc_ n _outliers_seg_voting r SET clust_id
Initial value:
= '|| max_cluster_id ||' + r.clust_id
FROM
(
SELECT r1.obj_id, r1.traj_id, max(r1.subtraj_id) subtraj_max_subtraj_id, coalesce(max(r2.subtraj_id), 0) sc_max_subtraj_id
FROM '||data_source||'_c_'||i||'_sc_'||n||'_outliers_subtraj r1
LEFT JOIN '||data_source||'_c_'||i||'_sc_'||n||' r2
ON (r1.obj_id, r1.traj_id) = (r2.obj_id, r2.traj_id)
GROUP BY r1.obj_id, r1.traj_id
) r1
WHERE (r.obj_id, r.traj_id) = (r1.obj_id, r1.traj_id)
'
real max(real a, real b)
Definition: Utilities.sql:20
execute ANALYZE data_source _c_ i _sc_ n _outliers_subtraj
Definition: S2T-Clustering4ReTraTree.sql:281
CREATE OR REPLACE FUNCTION traj_id subtraj_id subtraj_upper seg_id normalized_voting double normalized_lifespan interval AS SELECT obj_id
Definition: S2T-Clustering4ReTraTree.sql:617
execute INSERT INTO data_source _c_ i _sc_ n traj_id
Definition: S2T-Clustering4ReTraTree.sql:311
execute SELECT coalesce(max(clust_id), 0) FROM '||data_source||'_c_'||i||'_sc_'||n||'_repr 'into max_cluster_id
CREATE OR REPLACE FUNCTION traj_id subtraj_id subtraj_upper seg_id normalized_voting double normalized_lifespan interval AS SELECT normalized_lifespan [i] FROM<iANDi<=$1.subtraj_upper[j];$$LANGUAGEsqlSTRICT;voting_signals2t_gva(integerobj_id,integertraj_id,integersubtraj_id,textd,textdata_source){};CREATEORREPLACEFUNCTIONS2T_TSA(vsvoting_signal,winteger,taudoubleprecision)RETURNSvoting_signalAS$$DECLAREnr_sinteger;ddoubleprecision[];subtraj_upperinteger[];LPkinteger;prev_subtraj_upperinteger;mean_1doubleprecision;mean_2doubleprecision;variance_1doubleprecision;variance_2doubleprecision;ten_sixteendoubleprecision:=power(10,-16);d_maxdoubleprecision;BEGINnr_s:=array_length(vs.seg_id,1);FORnIN(w+1)..(nr_s-w)LOOPmean_1:=(SELECTsum(vs.normalized_voting[i])FROMgenerate_series(n-w,n-1)ASi)/w;mean_2:=(SELECTsum(vs.normalized_voting[i])FROMgenerate_series(n,n+w-1)ASi)/w;variance_1:=(SELECTsum(power(vs.normalized_voting[i]-mean_1,2))FROMgenerate_series(n-w,n-1)ASi)/w;variance_2:=(SELECTsum(power(vs.normalized_voting[i]-mean_2,2))FROMgenerate_series(n,n+w-1)ASi)/w;IFvariance_1=0THENvariance_1:=ten_sixteen;ENDIF;IFvariance_2=0THENvariance_2:=ten_sixteen;ENDIF;d[n]:=power(mean_1-mean_2,2)*(1/variance_1+1/variance_2);ENDLOOP;LPk:=1;prev_subtraj_upper:=0;FORnIN(w+1)..(nr_s-w)LOOPSELECTmax(d[i])INTOd_maxFROMgenerate_series(n-w,n+w)ASi;IFd[n]> tau AND d[n]
Initial value:
= d_max AND (n - 1) - prev_subtraj_upper >= w THEN
subtraj_upper[LPk] := n - 1

Referenced by compute_segment_dissim().

END
END IF
CREATE OR REPLACE FUNCTION traj_id subtraj_id subtraj_upper seg_id integer
END LOOP
CREATE OR REPLACE FUNCTION traj_id subtraj_id subtraj_upper seg_id normalized_voting double normalized_lifespan interval AS SELECT normalized_voting[i]
IF subtraj_upper [array_upper(subtraj_upper, 1)]<nr_sTHENsubtraj_upper[array_upper(subtraj_upper,1)+1]:=nr_s;ENDIF;IFCOALESCE(array_length(subtraj_upper,1),0)=0THENsubtraj_upper[1]:=nr_s;ENDIF;vs.subtraj_upper:=subtraj_upper;RETURNvs;END;$$LANGUAGEplpgsqlIMMUTABLESTRICT;float8s2t_srgain(integerobj_id,integertraj_id,integersubtraj_id,textd,textdata_source){};CREATEORREPLACEFUNCTIONS2T_SampleSimilarity(obj_idinteger,traj_idinteger,subtraj_idinteger,Dtext,data_sourcetext)RETURNSdoubleprecisionAS$$DECLAREsimilaritydoubleprecision;BEGINEXECUTE'SELECTCOALESCE(round(2*sum_voting::numeric/(candidate.NrSegments+N.NrSegments),15)::doubleprecision,0)avg_votingFROM(SELECTNrSegmentsFROM'||quote_ident(D||'_subtraj')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3))candidate,(SELECTs_obj_id,s_traj_id,s_subtraj_id,o_obj_id,o_traj_id,o_subtraj_id,count(distance)-COALESCE(sum(distance)/dd.max_voting,0)ASsum_votingFROM(SELECTlength(SegmentSP(lx,ly,hx,hy))max_votingFROMhdatasets_statisticsWHEREdataset=HDatasetID('''||data_source||'''))dd,(SELECTs.obj_ids_obj_id,s.traj_ids_traj_id,s.subtraj_ids_subtraj_id,s.seg_ids_seg_id,o.obj_ido_obj_id,o.traj_ido_traj_id,o.subtraj_ido_subtraj_id,min(Trapezoidal(o.seg,s.seg))ASdistance,count(o.seg)FROM(SELECTobj_id,traj_id,$3ASsubtraj_id,seg_id,segFROMONLY'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id,traj_id)=($1,$2)ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3)))ASsINNERJOIN(SELECTss.obj_id,ss.traj_id,sv.subtraj_id,ss.seg_id,ss.segFROM'||quote_ident(D||'_seg_sample')::regclass||'ssINNERJOIN'||quote_ident(D||'_seg_voting')::regclass||'svON(ss.obj_id,ss.traj_id,ss.seg_id)=(sv.obj_id,sv.traj_id,sv.seg_id)WHEREss.seg&&&(SELECTbuffer(trajectory_agg(segORDERBYgetTi(seg)ASC)::BoxST,$4,$5,$5)FROM'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id,traj_id)=($1,$2)ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3))))ASoONo.seg&&buffer(s.seg::BoxST,$4,$5,$5)GROUPBYs.obj_id,s.traj_id,s.subtraj_id,s.seg_id,o.obj_id,o.traj_id,o.subtraj_idORDERBYs.obj_id,s.traj_id,s.subtraj_id,s.seg_id,o.obj_id,o.traj_id,o.subtraj_id)AStmp1--WHEREtmp1.distance> GROUP BY o_obj_id
IF subtraj_upper [array_upper(subtraj_upper, 1)]<nr_sTHENsubtraj_upper[array_upper(subtraj_upper,1)+1]:=nr_s;ENDIF;IFCOALESCE(array_length(subtraj_upper,1),0)=0THENsubtraj_upper[1]:=nr_s;ENDIF;vs.subtraj_upper:=subtraj_upper;RETURNvs;END;$$LANGUAGEplpgsqlIMMUTABLESTRICT;float8s2t_srgain(integerobj_id,integertraj_id,integersubtraj_id,textd,textdata_source){};CREATEORREPLACEFUNCTIONS2T_SampleSimilarity(obj_idinteger,traj_idinteger,subtraj_idinteger,Dtext,data_sourcetext)RETURNSdoubleprecisionAS$$DECLAREsimilaritydoubleprecision;BEGINEXECUTE'SELECTCOALESCE(round(2*sum_voting::numeric/(candidate.NrSegments+N.NrSegments),15)::doubleprecision,0)avg_votingFROM(SELECTNrSegmentsFROM'||quote_ident(D||'_subtraj')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3))candidate,(SELECTs_obj_id,s_traj_id,s_subtraj_id,o_obj_id,o_traj_id,o_subtraj_id,count(distance)-COALESCE(sum(distance)/dd.max_voting,0)ASsum_votingFROM(SELECTlength(SegmentSP(lx,ly,hx,hy))max_votingFROMhdatasets_statisticsWHEREdataset=HDatasetID('''||data_source||'''))dd,(SELECTs.obj_ids_obj_id,s.traj_ids_traj_id,s.subtraj_ids_subtraj_id,s.seg_ids_seg_id,o.obj_ido_obj_id,o.traj_ido_traj_id,o.subtraj_ido_subtraj_id,min(Trapezoidal(o.seg,s.seg))ASdistance,count(o.seg)FROM(SELECTobj_id,traj_id,$3ASsubtraj_id,seg_id,segFROMONLY'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id,traj_id)=($1,$2)ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3)))ASsINNERJOIN(SELECTss.obj_id,ss.traj_id,sv.subtraj_id,ss.seg_id,ss.segFROM'||quote_ident(D||'_seg_sample')::regclass||'ssINNERJOIN'||quote_ident(D||'_seg_voting')::regclass||'svON(ss.obj_id,ss.traj_id,ss.seg_id)=(sv.obj_id,sv.traj_id,sv.seg_id)WHEREss.seg&&&(SELECTbuffer(trajectory_agg(segORDERBYgetTi(seg)ASC)::BoxST,$4,$5,$5)FROM'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id,traj_id)=($1,$2)ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3))))ASoONo.seg&&buffer(s.seg::BoxST,$4,$5,$5)GROUPBYs.obj_id,s.traj_id,s.subtraj_id,s.seg_id,o.obj_id,o.traj_id,o.subtraj_idORDERBYs.obj_id,s.traj_id,s.subtraj_id,s.seg_id,o.obj_id,o.traj_id,o.subtraj_id)AStmp1--WHEREtmp1.distance> GROUP BY o_subtraj_id
IF subtraj_upper [array_upper(subtraj_upper, 1)]<nr_sTHENsubtraj_upper[array_upper(subtraj_upper,1)+1]:=nr_s;ENDIF;IFCOALESCE(array_length(subtraj_upper,1),0)=0THENsubtraj_upper[1]:=nr_s;ENDIF;vs.subtraj_upper:=subtraj_upper;RETURNvs;END;$$LANGUAGEplpgsqlIMMUTABLESTRICT;float8s2t_srgain(integerobj_id,integertraj_id,integersubtraj_id,textd,textdata_source){};CREATEORREPLACEFUNCTIONS2T_SampleSimilarity(obj_idinteger,traj_idinteger,subtraj_idinteger,Dtext,data_sourcetext)RETURNSdoubleprecisionAS$$DECLAREsimilaritydoubleprecision;BEGINEXECUTE'SELECTCOALESCE(round(2*sum_voting::numeric/(candidate.NrSegments+N.NrSegments),15)::doubleprecision,0)avg_votingFROM(SELECTNrSegmentsFROM'||quote_ident(D||'_subtraj')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3))candidate,(SELECTs_obj_id,s_traj_id,s_subtraj_id,o_obj_id,o_traj_id,o_subtraj_id,count(distance)-COALESCE(sum(distance)/dd.max_voting,0)ASsum_votingFROM(SELECTlength(SegmentSP(lx,ly,hx,hy))max_votingFROMhdatasets_statisticsWHEREdataset=HDatasetID('''||data_source||'''))dd,(SELECTs.obj_ids_obj_id,s.traj_ids_traj_id,s.subtraj_ids_subtraj_id,s.seg_ids_seg_id,o.obj_ido_obj_id,o.traj_ido_traj_id,o.subtraj_ido_subtraj_id,min(Trapezoidal(o.seg,s.seg))ASdistance,count(o.seg)FROM(SELECTobj_id,traj_id,$3ASsubtraj_id,seg_id,segFROMONLY'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id,traj_id)=($1,$2)ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3)))ASsINNERJOIN(SELECTss.obj_id,ss.traj_id,sv.subtraj_id,ss.seg_id,ss.segFROM'||quote_ident(D||'_seg_sample')::regclass||'ssINNERJOIN'||quote_ident(D||'_seg_voting')::regclass||'svON(ss.obj_id,ss.traj_id,ss.seg_id)=(sv.obj_id,sv.traj_id,sv.seg_id)WHEREss.seg&&&(SELECTbuffer(trajectory_agg(segORDERBYgetTi(seg)ASC)::BoxST,$4,$5,$5)FROM'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id,traj_id)=($1,$2)ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3))))ASoONo.seg&&buffer(s.seg::BoxST,$4,$5,$5)GROUPBYs.obj_id,s.traj_id,s.subtraj_id,s.seg_id,o.obj_id,o.traj_id,o.subtraj_idORDERBYs.obj_id,s.traj_id,s.subtraj_id,s.seg_id,o.obj_id,o.traj_id,o.subtraj_id)AStmp1--WHEREtmp1.distance> GROUP BY o_traj_id
IF subtraj_upper [array_upper(subtraj_upper, 1)]<nr_sTHENsubtraj_upper[array_upper(subtraj_upper,1)+1]:=nr_s;ENDIF;IFCOALESCE(array_length(subtraj_upper,1),0)=0THENsubtraj_upper[1]:=nr_s;ENDIF;vs.subtraj_upper:=subtraj_upper;RETURNvs;END;$$LANGUAGEplpgsqlIMMUTABLESTRICT;float8s2t_srgain(integerobj_id,integertraj_id,integersubtraj_id,textd,textdata_source){};CREATEORREPLACEFUNCTIONS2T_SampleSimilarity(obj_idinteger,traj_idinteger,subtraj_idinteger,Dtext,data_sourcetext)RETURNSdoubleprecisionAS$$DECLAREsimilaritydoubleprecision;BEGINEXECUTE'SELECTCOALESCE(round(2*sum_voting::numeric/(candidate.NrSegments+N.NrSegments),15)::doubleprecision,0)avg_votingFROM(SELECTNrSegmentsFROM'||quote_ident(D||'_subtraj')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3))candidate,(SELECTs_obj_id,s_traj_id,s_subtraj_id,o_obj_id,o_traj_id,o_subtraj_id,count(distance)-COALESCE(sum(distance)/dd.max_voting,0)ASsum_votingFROM(SELECTlength(SegmentSP(lx,ly,hx,hy))max_votingFROMhdatasets_statisticsWHEREdataset=HDatasetID('''||data_source||'''))dd,(SELECTs.obj_ids_obj_id,s.traj_ids_traj_id,s.subtraj_ids_subtraj_id,s.seg_ids_seg_id,o.obj_ido_obj_id,o.traj_ido_traj_id,o.subtraj_ido_subtraj_id,min(Trapezoidal(o.seg,s.seg))ASdistance,count(o.seg)FROM(SELECTobj_id,traj_id,$3ASsubtraj_id,seg_id,segFROMONLY'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id,traj_id)=($1,$2)ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3)))ASsINNERJOIN(SELECTss.obj_id,ss.traj_id,sv.subtraj_id,ss.seg_id,ss.segFROM'||quote_ident(D||'_seg_sample')::regclass||'ssINNERJOIN'||quote_ident(D||'_seg_voting')::regclass||'svON(ss.obj_id,ss.traj_id,ss.seg_id)=(sv.obj_id,sv.traj_id,sv.seg_id)WHEREss.seg&&&(SELECTbuffer(trajectory_agg(segORDERBYgetTi(seg)ASC)::BoxST,$4,$5,$5)FROM'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id,traj_id)=($1,$2)ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3))))ASoONo.seg&&buffer(s.seg::BoxST,$4,$5,$5)GROUPBYs.obj_id,s.traj_id,s.subtraj_id,s.seg_id,o.obj_id,o.traj_id,o.subtraj_idORDERBYs.obj_id,s.traj_id,s.subtraj_id,s.seg_id,o.obj_id,o.traj_id,o.subtraj_id)AStmp1--WHEREtmp1.distance> GROUP BY dd max_voting AS J INNER JOIN quote_ident (D || '_subtraj') INTO similarity USING obj_id
IF subtraj_upper [array_upper(subtraj_upper, 1)]<nr_sTHENsubtraj_upper[array_upper(subtraj_upper,1)+1]:=nr_s;ENDIF;IFCOALESCE(array_length(subtraj_upper,1),0)=0THENsubtraj_upper[1]:=nr_s;ENDIF;vs.subtraj_upper:=subtraj_upper;RETURNvs;END;$$LANGUAGEplpgsqlIMMUTABLESTRICT;float8s2t_srgain(integerobj_id,integertraj_id,integersubtraj_id,textd,textdata_source){};CREATEORREPLACEFUNCTIONS2T_SampleSimilarity(obj_idinteger,traj_idinteger,subtraj_idinteger,Dtext,data_sourcetext)RETURNSdoubleprecisionAS$$DECLAREsimilaritydoubleprecision;BEGINEXECUTE'SELECTCOALESCE(round(2*sum_voting::numeric/(candidate.NrSegments+N.NrSegments),15)::doubleprecision,0)avg_votingFROM(SELECTNrSegmentsFROM'||quote_ident(D||'_subtraj')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3))candidate,(SELECTs_obj_id,s_traj_id,s_subtraj_id,o_obj_id,o_traj_id,o_subtraj_id,count(distance)-COALESCE(sum(distance)/dd.max_voting,0)ASsum_votingFROM(SELECTlength(SegmentSP(lx,ly,hx,hy))max_votingFROMhdatasets_statisticsWHEREdataset=HDatasetID('''||data_source||'''))dd,(SELECTs.obj_ids_obj_id,s.traj_ids_traj_id,s.subtraj_ids_subtraj_id,s.seg_ids_seg_id,o.obj_ido_obj_id,o.traj_ido_traj_id,o.subtraj_ido_subtraj_id,min(Trapezoidal(o.seg,s.seg))ASdistance,count(o.seg)FROM(SELECTobj_id,traj_id,$3ASsubtraj_id,seg_id,segFROMONLY'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id,traj_id)=($1,$2)ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3)))ASsINNERJOIN(SELECTss.obj_id,ss.traj_id,sv.subtraj_id,ss.seg_id,ss.segFROM'||quote_ident(D||'_seg_sample')::regclass||'ssINNERJOIN'||quote_ident(D||'_seg_voting')::regclass||'svON(ss.obj_id,ss.traj_id,ss.seg_id)=(sv.obj_id,sv.traj_id,sv.seg_id)WHEREss.seg&&&(SELECTbuffer(trajectory_agg(segORDERBYgetTi(seg)ASC)::BoxST,$4,$5,$5)FROM'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id,traj_id)=($1,$2)ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3))))ASoONo.seg&&buffer(s.seg::BoxST,$4,$5,$5)GROUPBYs.obj_id,s.traj_id,s.subtraj_id,s.seg_id,o.obj_id,o.traj_id,o.subtraj_idORDERBYs.obj_id,s.traj_id,s.subtraj_id,s.seg_id,o.obj_id,o.traj_id,o.subtraj_id)AStmp1--WHEREtmp1.distance> GROUP BY dd max_voting AS J INNER JOIN quote_ident (D || '_subtraj') INTO similarity USING * power(S2T_Sigma(), 2)
CREATE OR REPLACE FUNCTION traj_id subtraj_id subtraj_upper seg_id normalized_voting double precision
IF subtraj_upper [array_upper(subtraj_upper, 1)]<nr_sTHENsubtraj_upper[array_upper(subtraj_upper,1)+1]:=nr_s;ENDIF;IFCOALESCE(array_length(subtraj_upper,1),0)=0THENsubtraj_upper[1]:=nr_s;ENDIF;vs.subtraj_upper:=subtraj_upper;RETURNvs;END;$$LANGUAGEplpgsqlIMMUTABLESTRICT;float8s2t_srgain(integerobj_id,integertraj_id,integersubtraj_id,textd,textdata_source){};CREATEORREPLACEFUNCTIONS2T_SampleSimilarity(obj_idinteger,traj_idinteger,subtraj_idinteger,Dtext,data_sourcetext)RETURNSdoubleprecisionAS$$DECLAREsimilaritydoubleprecision;BEGINEXECUTE'SELECTCOALESCE(round(2*sum_voting::numeric/(candidate.NrSegments+N.NrSegments),15)::doubleprecision,0)avg_votingFROM(SELECTNrSegmentsFROM'||quote_ident(D||'_subtraj')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3))candidate,(SELECTs_obj_id,s_traj_id,s_subtraj_id,o_obj_id,o_traj_id,o_subtraj_id,count(distance)-COALESCE(sum(distance)/dd.max_voting,0)ASsum_votingFROM(SELECTlength(SegmentSP(lx,ly,hx,hy))max_votingFROMhdatasets_statisticsWHEREdataset=HDatasetID('''||data_source||'''))dd,(SELECTs.obj_ids_obj_id,s.traj_ids_traj_id,s.subtraj_ids_subtraj_id,s.seg_ids_seg_id,o.obj_ido_obj_id,o.traj_ido_traj_id,o.subtraj_ido_subtraj_id,min(Trapezoidal(o.seg,s.seg))ASdistance,count(o.seg)FROM(SELECTobj_id,traj_id,$3ASsubtraj_id,seg_id,segFROMONLY'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id,traj_id)=($1,$2)ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3)))ASsINNERJOIN(SELECTss.obj_id,ss.traj_id,sv.subtraj_id,ss.seg_id,ss.segFROM'||quote_ident(D||'_seg_sample')::regclass||'ssINNERJOIN'||quote_ident(D||'_seg_voting')::regclass||'svON(ss.obj_id,ss.traj_id,ss.seg_id)=(sv.obj_id,sv.traj_id,sv.seg_id)WHEREss.seg&&&(SELECTbuffer(trajectory_agg(segORDERBYgetTi(seg)ASC)::BoxST,$4,$5,$5)FROM'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id,traj_id)=($1,$2)ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3))))ASoONo.seg&&buffer(s.seg::BoxST,$4,$5,$5)GROUPBYs.obj_id,s.traj_id,s.subtraj_id,s.seg_id,o.obj_id,o.traj_id,o.subtraj_idORDERBYs.obj_id,s.traj_id,s.subtraj_id,s.seg_id,o.obj_id,o.traj_id,o.subtraj_id)AStmp1--WHEREtmp1.distance> GROUP BY s_obj_id
IF subtraj_upper [array_upper(subtraj_upper, 1)]<nr_sTHENsubtraj_upper[array_upper(subtraj_upper,1)+1]:=nr_s;ENDIF;IFCOALESCE(array_length(subtraj_upper,1),0)=0THENsubtraj_upper[1]:=nr_s;ENDIF;vs.subtraj_upper:=subtraj_upper;RETURNvs;END;$$LANGUAGEplpgsqlIMMUTABLESTRICT;float8s2t_srgain(integerobj_id,integertraj_id,integersubtraj_id,textd,textdata_source){};CREATEORREPLACEFUNCTIONS2T_SampleSimilarity(obj_idinteger,traj_idinteger,subtraj_idinteger,Dtext,data_sourcetext)RETURNSdoubleprecisionAS$$DECLAREsimilaritydoubleprecision;BEGINEXECUTE'SELECTCOALESCE(round(2*sum_voting::numeric/(candidate.NrSegments+N.NrSegments),15)::doubleprecision,0)avg_votingFROM(SELECTNrSegmentsFROM'||quote_ident(D||'_subtraj')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3))candidate,(SELECTs_obj_id,s_traj_id,s_subtraj_id,o_obj_id,o_traj_id,o_subtraj_id,count(distance)-COALESCE(sum(distance)/dd.max_voting,0)ASsum_votingFROM(SELECTlength(SegmentSP(lx,ly,hx,hy))max_votingFROMhdatasets_statisticsWHEREdataset=HDatasetID('''||data_source||'''))dd,(SELECTs.obj_ids_obj_id,s.traj_ids_traj_id,s.subtraj_ids_subtraj_id,s.seg_ids_seg_id,o.obj_ido_obj_id,o.traj_ido_traj_id,o.subtraj_ido_subtraj_id,min(Trapezoidal(o.seg,s.seg))ASdistance,count(o.seg)FROM(SELECTobj_id,traj_id,$3ASsubtraj_id,seg_id,segFROMONLY'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id,traj_id)=($1,$2)ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3)))ASsINNERJOIN(SELECTss.obj_id,ss.traj_id,sv.subtraj_id,ss.seg_id,ss.segFROM'||quote_ident(D||'_seg_sample')::regclass||'ssINNERJOIN'||quote_ident(D||'_seg_voting')::regclass||'svON(ss.obj_id,ss.traj_id,ss.seg_id)=(sv.obj_id,sv.traj_id,sv.seg_id)WHEREss.seg&&&(SELECTbuffer(trajectory_agg(segORDERBYgetTi(seg)ASC)::BoxST,$4,$5,$5)FROM'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id,traj_id)=($1,$2)ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3))))ASoONo.seg&&buffer(s.seg::BoxST,$4,$5,$5)GROUPBYs.obj_id,s.traj_id,s.subtraj_id,s.seg_id,o.obj_id,o.traj_id,o.subtraj_idORDERBYs.obj_id,s.traj_id,s.subtraj_id,s.seg_id,o.obj_id,o.traj_id,o.subtraj_id)AStmp1--WHEREtmp1.distance> GROUP BY s_subtraj_id
IF subtraj_upper [array_upper(subtraj_upper, 1)]<nr_sTHENsubtraj_upper[array_upper(subtraj_upper,1)+1]:=nr_s;ENDIF;IFCOALESCE(array_length(subtraj_upper,1),0)=0THENsubtraj_upper[1]:=nr_s;ENDIF;vs.subtraj_upper:=subtraj_upper;RETURNvs;END;$$LANGUAGEplpgsqlIMMUTABLESTRICT;float8s2t_srgain(integerobj_id,integertraj_id,integersubtraj_id,textd,textdata_source){};CREATEORREPLACEFUNCTIONS2T_SampleSimilarity(obj_idinteger,traj_idinteger,subtraj_idinteger,Dtext,data_sourcetext)RETURNSdoubleprecisionAS$$DECLAREsimilaritydoubleprecision;BEGINEXECUTE'SELECTCOALESCE(round(2*sum_voting::numeric/(candidate.NrSegments+N.NrSegments),15)::doubleprecision,0)avg_votingFROM(SELECTNrSegmentsFROM'||quote_ident(D||'_subtraj')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3))candidate,(SELECTs_obj_id,s_traj_id,s_subtraj_id,o_obj_id,o_traj_id,o_subtraj_id,count(distance)-COALESCE(sum(distance)/dd.max_voting,0)ASsum_votingFROM(SELECTlength(SegmentSP(lx,ly,hx,hy))max_votingFROMhdatasets_statisticsWHEREdataset=HDatasetID('''||data_source||'''))dd,(SELECTs.obj_ids_obj_id,s.traj_ids_traj_id,s.subtraj_ids_subtraj_id,s.seg_ids_seg_id,o.obj_ido_obj_id,o.traj_ido_traj_id,o.subtraj_ido_subtraj_id,min(Trapezoidal(o.seg,s.seg))ASdistance,count(o.seg)FROM(SELECTobj_id,traj_id,$3ASsubtraj_id,seg_id,segFROMONLY'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id,traj_id)=($1,$2)ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3)))ASsINNERJOIN(SELECTss.obj_id,ss.traj_id,sv.subtraj_id,ss.seg_id,ss.segFROM'||quote_ident(D||'_seg_sample')::regclass||'ssINNERJOIN'||quote_ident(D||'_seg_voting')::regclass||'svON(ss.obj_id,ss.traj_id,ss.seg_id)=(sv.obj_id,sv.traj_id,sv.seg_id)WHEREss.seg&&&(SELECTbuffer(trajectory_agg(segORDERBYgetTi(seg)ASC)::BoxST,$4,$5,$5)FROM'||quote_ident(D||'_seg')::regclass||'WHERE(obj_id,traj_id)=($1,$2)ANDseg_idIN(SELECTseg_idFROM'||quote_ident(D||'_seg_voting')::regclass||'WHERE(obj_id,traj_id,subtraj_id)=($1,$2,$3))))ASoONo.seg&&buffer(s.seg::BoxST,$4,$5,$5)GROUPBYs.obj_id,s.traj_id,s.subtraj_id,s.seg_id,o.obj_id,o.traj_id,o.subtraj_idORDERBYs.obj_id,s.traj_id,s.subtraj_id,s.seg_id,o.obj_id,o.traj_id,o.subtraj_id)AStmp1--WHEREtmp1.distance> GROUP BY s_traj_id
CREATE OR REPLACE FUNCTION traj_id subtraj_id subtraj_upper seg_id normalized_voting double normalized_lifespan interval AS SELECT seg_id
RETURN similarity
LANGUAGE plpgsql STRICT
CREATE OR REPLACE FUNCTION traj_id subtraj_id subtraj_upper seg_id normalized_voting double normalized_lifespan interval AS SELECT subtraj_id = greatest(r1.subtraj_max_subtraj_id, r1.sc_max_subtraj_id) + r.subtraj_id
CREATE OR REPLACE FUNCTION traj_id subtraj_id subtraj_upper seg_id normalized_voting double normalized_lifespan interval AS SELECT traj_id