Files
secondo/bin/Scripts/ImportGeolife.sec

54 lines
2.3 KiB
Plaintext
Raw Permalink Normal View History

2026-01-23 17:03:45 +08:00
# 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;