54 lines
2.3 KiB
Plaintext
54 lines
2.3 KiB
Plaintext
|
|
# The 182 directories of the different persons have to be put into the directory
|
||
|
|
# secondo/bin/Geolife/Data.
|
||
|
|
|
||
|
|
create database geolife;
|
||
|
|
|
||
|
|
open database geolife;
|
||
|
|
|
||
|
|
let mlabeltype = [const rel(tuple([S: string, E: string, L: string])) value ()];
|
||
|
|
|
||
|
|
let importMLabelFile = fun(Name: text) mlabeltype csvimport[Name, 1, "", "\t"]
|
||
|
|
projectextend[L; Start: str2instant(replace(replace(.S, "/", "-"), " ", "-")),
|
||
|
|
End: str2instant(replace(replace(.E, "/", "-"), " ", "-"))]
|
||
|
|
projectextend[; U: the_unit(tolabel(trim(.L)), .Start, .End, TRUE, FALSE)]
|
||
|
|
makemvalue[U];
|
||
|
|
|
||
|
|
let mpointtype = [const rel(tuple([Y: real, X: real, Zero: int, Alt: int, Days: real,
|
||
|
|
Datestr: string, Timestr: string])) value ()];
|
||
|
|
|
||
|
|
let importMPointFile = fun(Name: text) mpointtype csvimport[Name, 6, "", ","]
|
||
|
|
projectextend[; P: makepoint(.X, .Y),
|
||
|
|
Inst: str2instant(.Datestr + "-" + .Timestr)]
|
||
|
|
approximate[Inst, P];
|
||
|
|
|
||
|
|
let importMRealFile = fun(Name: text) mpointtype csvimport[Name, 6, "", ","]
|
||
|
|
projectextend[; A: int2real(.Alt), Inst: str2instant(.Datestr + "-" + .Timestr)]
|
||
|
|
approximate[Inst, A];
|
||
|
|
|
||
|
|
let getPId = fun(Filename: text, Depth1: int, Depth2: int)
|
||
|
|
substr(Filename, find(Filename, "/") transformstream tail[Depth1] extract[Elem] + 1,
|
||
|
|
find(Filename, "/") transformstream tail[Depth2] extract[Elem] - 1);
|
||
|
|
|
||
|
|
let getTId = fun(Filename: text)
|
||
|
|
substr(Filename, find(Filename, "/") transformstream tail[1] extract[Elem] + 1,
|
||
|
|
find(Filename, ".") transformstream tail[1] extract[Elem] - 1);
|
||
|
|
|
||
|
|
let TranspModes = getDirectory('Geolife/Data', 2) transformstream
|
||
|
|
filter[not(isDirectory(.Elem))]
|
||
|
|
filter[.Elem endsWith ".txt"]
|
||
|
|
projectextend[; PId: getPId(.Elem, 2, 1), TMode: importMLabelFile(.Elem)]
|
||
|
|
consume;
|
||
|
|
|
||
|
|
let Trips = getDirectory('Geolife/Data', 3) transformstream
|
||
|
|
filter[not(isDirectory(.Elem))]
|
||
|
|
filter[.Elem endsWith '.plt']
|
||
|
|
projectextend[; PId: getPId(.Elem, 3, 2), TId: getTId(.Elem),
|
||
|
|
Trip: importMPointFile(.Elem), Alt: importMRealFile(.Elem)]
|
||
|
|
consume;
|
||
|
|
|
||
|
|
let geolife = TranspModes feed {tm} Trips feed {t} hashjoin[PId_tm, PId_t]
|
||
|
|
projectextend[; Pid: .PId_tm, Tid: .TId_t, Trip: .Trip_t, Alt: .Alt_t,
|
||
|
|
Trans: .TMode_tm atperiods deftime(.Trip_t)]
|
||
|
|
filter[no_components(.Trans) > 0]
|
||
|
|
consume;
|