Hermes
|
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 |
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[] | ||
) |
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, | ||
n | integer | ||
) |
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 | ) |
prev_subtraj_upper __pad0__ |
LPk __pad1__ |
DROP TYPE IF EXISTS voting_signal CASCADE |
execute UPDATE data_source _c_ i _sc_ n _outliers_seg_voting r SET 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<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] |
Referenced by compute_segment_dissim().
END |
END IF |
CREATE OR REPLACE FUNCTION traj_id subtraj_id subtraj_upper seg_id integer |
CREATE OR REPLACE FUNCTION traj_id subtraj_id subtraj_upper seg_id normalized_voting double normalized_lifespan interval AS SELECT j |
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 |
Referenced by simplifyEpochTrajectory(), and toPrecision().
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 |