You Are Here » Home » Tutorials

Extensible data types


PostGeoMedia supports many spatiotemporal data types, such as MPoint, MPolygon, MVideo, MPhoto, FOV, MDouble etc. Each data types store the spatiotemporal information, which is two-dimensional in the Euclidean space. Taking the formal definition intuitively, our PostGeoMedia type uses the following features.
     • Each object is a sequence of timestamp-value pairs.
     • PostGeoMedia object must follow the Open Geospatial Consortium (OGC) moving feature standards.
     • PostGeoMedia object can be of the different types (i.e., points, polygons, photo, video, double and so on).

Examples types


     • MPOINT: ((40.67 -73.83) 1000, (40.74, -73.99) 2000).
     • STPHOTO (http://data.u-gis.net/img/003.jpg 100 200 (10 0 60 30 0.001) null (40.65 -73.56) 3000).
     • MDOUBLE: (1.0 1000, 2.0 1100, 1.5 1200).
     • MVIDEO (uri, MPOINT ((0.0 0.0) 1000, (2.0 5.0) 2000, (34.0 333.0) 3000), FRAME ((1 1 1 1 1), (1 1 1 1 2), (1 1 1 1 3))).

Extensible operations


Spatiotemporal operations in PostGeoMedia have been implemented as PL/Java SQL. In this tutorial, we will take you with a step by step instructions to use these spatiotemporal operations.

Table creation and data update


The category of operations is used in creating and updating statements to change the recorded moving media data. We consider the following relational schema for example table userVideos, userTrajs and city that stores basic information.
	
CREATE TABLE userTrajs 
(
	id	integer,
   	carnumber  text
);
select addmgeometrycolumn('public','usertrajs','mt',4326,'mpoint',2, 50);

CREATE TABLE userStphotos 
(
	id	integer,
   	carnumber  text
);
select addmgeometrycolumn('public','userstphotos','st',4326,'stphoto',2, 1);

CREATE TABLE userSensors
(
	id	integer,
	carnumber	text
);
select addmgeometrycolumn('public','usersensors','accx',4326,'mdouble',2, 3000);
select addmgeometrycolumn('public','usersensors','accy',4326,'mdouble',2, 3000);
select addmgeometrycolumn('public','usersensors','accz',4326,'mdouble',2, 3000);
select addmgeometrycolumn('public','usersensors','gyrox',4326,'mdouble',2, 3000);
select addmgeometrycolumn('public','usersensors','gyroy',4326,'mdouble',2, 3000);
select addmgeometrycolumn('public','usersensors','gyroz',4326,'mdouble',2, 3000);

CREATE TABLE userVideos 
(
	id	integer,
   	name  text
);
select addmgeometrycolumn('public','uservideos','mv',4326,'mvideo',2, 3000);

CREATE TABLE city
(
	id	integer,
	name	text,
	geo	polygon
);


Insert moving object into the table.

insert into usertrajs (id, carnumber) values( 1, 'mt0001');
insert into userstphotos (id, carnumber) values( 1, 'st0001');
insert into usersensors (id, carnumber) values( 1, 'md0001');
insert into uservideos (id, name) values( 1, 'mv0001');


Append current moving objects data into car 1’s trajectory, stphoto, video and sensor in the table.

--------'MPOINT ((point) t, (point) t...)'
UPDATE userTrajs
SET mt = M_Append (mt, 'MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)')
WHERE id = 1; 

--------'STPHOTO (uri width height (frame(fov) annotation.json (point) t)'
UPDATE userStphotos
SET st = M_Append (st, 'STPHOTO (http://data.u-gis.net/img/003.jpg 100 200 (10 0 60 30 0.001) null (40.65 -73.56) 3000)')
WHERE id = 1; 

--------'MDOUBLE (double t, double t...)'
UPDATE userSensors
SET md_accx = M_Append (md_accx, 'MDOUBLE (1.002 1503828254949, 1.042 1503828254969)')
WHERE id = 1; 

--------'MVIDEO (uri, mpoint ((point) t, (point) t...), frame ((horizontalAngle verticalAngle distance direction2d direction3d), (horizontalAngle verticalAngle distance direction2d direction3d)...))'
UPDATE userVideos
SET mv = M_Append (mv, 'MVIDEO (uri, MPOINT ((0.0 0.0) 1000, (2.0 5.0) 2000, (34.0 333.0) 3000), FRAME ((1 1 1 1 1), (1 1 1 1 2), (1 1 1 1 3)))')
WHERE id = 1; 



Temporal queries


Table 1: Temporal Operations in PostGeoMedia

Type

Signature

Temporal

M_At (mgeo, n) →mgeo+
M_NumOf (mgeo) int
M_Time (mgeo) [period]
M_StartTime (mgeo) instant
M_EndTime (mgeo) instant
M_Spatial (mgeo) →geometry
M_Snapshot (mgeo, instant) →geometry
M_Slice (mgeo, period) →mgeo+
M_Lattice (mgeo, duration) →mgeo+
M_tOverlaps (mgeo, period) →bool+ (Also, tINTERSECTS, tCONTAINS, tEQUALS, tPRECEDES, tSUCCEEDS, tIMMEDIATELYPRECEDES, and tIMMEDIATELYSUCCEEDS)


Test I

SELECT M_At('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)', 2);
	------>Return: (,,"{""(40.77,-73.96)""}","{""2017-09-02 08:14:23""}")

SELECT M_NumOf('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)');
	------>Return: 2

SELECT M_Time('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)');
	------>Return:(1504354462000,1504354501000)

SELECT M_StartTime('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)');
	------>Return:1504354462000

SELECT M_EndTime('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)');
	------>Return:1504354501000

SELECT M_Spatial('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)');
	------>Return:LINESTRING(40.77 -73.95,40.77 -73.96)

SELECT M_Snapshot('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)', 1000);
	------>Return:POINT(40.77 -73.95)

SELECT M_Slice('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)', 'Period (1100, 1200)');
	------>Return:(,,"{""(40.77,-73.95)"",""(40.77,-73.96)""}","{""2017-09-02 08:14:22"",""2017-09-02 08:14:23""}")

SELECT M_Lattice('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)', 2000);
	------>Return:(,,"{""(40.77,-73.95)""}","{""2017-09-02 08:14:22""}")

SELECT M_tOverlaps('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)', 'Period (1100, 2200)');
	------>Return: true


Test II

SELECT M_At(mt, 2) FROM usertrajs;
	------>Return: (1,286114,"{""(40.77,-73.96)""}","{""2017-09-02 08:14:23""}")

SELECT M_NumOf(mt) FROM usertrajs;
	------>Return: 2

SELECT M_Time(mt) FROM usertrajs;
	------>Return:(1504354462000,1504354501000)

SELECT M_StartTime(mt) FROM usertrajs;
	------>Return:1504354462000

SELECT M_EndTime(mt) FROM usertrajs;
	------>Return:1504354501000

SELECT M_Spatial(mt) FROM usertrajs;
	------>Return:LINESTRING(40.77 -73.95,40.77 -73.96)

SELECT M_Snapshot(mt, 1000) FROM usertrajs;
	------>Return:POINT(40.77 -73.95)

SELECT M_Slice(mt, 'Period (1100, 1200)') FROM usertrajs;
	------>Return:(1,286114,"{""(40.77,-73.95)"",""(40.77,-73.96)""}","{""2017-09-02 08:14:22"",""2017-09-02 08:14:23""}")

SELECT M_Lattice(mt, 2000) FROM usertrajs;
	------>Return:(1,286114,"{""(40.77,-73.95)""}","{""2017-09-02 08:14:22""}")

SELECT M_tOverlaps(mt, 'Period (1100, 2200)') FROM usertrajs;
	------>Return: true


Query examples

Retrieve videos in userVideos table which are taken during 'period (1100, 1200)'.

SELECT id, mv
FROM userVideos
WHERE M_Overlaps(mv, 'Period (1100, 1150)'); 

Retrieve videos in userVideos table which are taken during 'period (1100, 1150)', returns the sliced video files by 'period (1100, 1200)'.

SELECT id, M_Slice( mv, 'Period (1100, 1200)')
FROM userVideos
WHERE M_Overlaps(mv, 'Period (1100, 1150)');


Spatial and spatiotemporal queries


 

Table 2: Spatial and Spatiotemporal Operations in PostGeoMedia

Type

Signature

Spatial

and

Spatio-

temporal

M_TimeAtCummulative (mgeo, double) →long
M_Slice (mgeo, geo) →mgeo +
M_SnapToGrid (mgeo, int) mgeo +
M_Intersects (mgeo, mgeo) mbool M_mIntersects (mgeo, geo) →bool
M_mEnters (mgeo, geo) bool
M_mBypasses (mgeo, geo) bool
M_mStayIn (mgeo, geo) bool
M_mLeaves (mgeo, geo) bool
M_mCrosses (mgeo, geo) bool
M_EvenTime (mgeo, mgeo) [minstant]
M_Relationship (mgeo, mgeo) mstring
M_Inside (mgeo, mgeo) mbool
M_Equal (mgeo, mgeo) mbool
M_Overlaps (mgeo, mgeo) mbool
M_Disjoint (mgeo, mgeo) mbool
M_Meet (mgeo, mgeo) mbool
M_Distance (mgeo, mgeo) →mdouble M_Distance (mgeo, geo) →mdouble
M_Area (mgeo) mdouble
M_Direction (mgeo) mdouble
M_VeolocityAtTime (mgeo, instant) double
M_AccelerationAtTime (mgeo, instant) double
M_Max(mdouble) double
M_Min(mdouble) double
M_Avg(mdouble) double M_Avg(mdouble,duration) double
M_Max(mint) int
M_Min(mint) int
M_Avg(mint) double M_Avg(mint,duration) double
M_DWithin( mgeo, mgeo, double ) bool


Test I

SELECT M_TimeAtCummulative('MPOINT ((40.67 -73.83) 1000,(41.67 -73.81) 2000)', 2);
	------>Return: 1504354471666

SELECT M_Slice('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)', 'POLYGON ((39 -74, 39 -72, 43 -72, 43 -74, 39 -74))');
	------>Return:(,,"{""(40.77,-73.95)"",""(40.77,-73.96)""}","{""2017-09-02 08:14:22"",""2017-09-02 08:14:23""}") 

SELECT M_SnapToGrid('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)', 1);
	------>Return:(,,"{""(40.8,-74.0)"",""(40.8,-74.0)""}","{""2017-09-02 08:14:22"",""2017-09-02 08:14:23""}") 

SELECT M_Intersects('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)', 
	'MVIDEO ((00001.mp4?t=1 10 -1 0.1 -5.59 -1 -1 null null 40.67 -73.83) 1000,
		(00001.mp4?t=2 10 -1 0.1 -5.61 -1 -1 null null 41.67 -73.81) 2000)');
	------>Return:(,,"{t,t}","{""2017-09-02 08:14:22"",""2017-09-02 08:14:23""}") 

SELECT M_mEnters('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)', 'POLYGON ((39 -74, 39 -72, 43 -72, 43 -74, 39 -74))');
	------>Return:false

SELECT M_mBypasses('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)', 'POLYGON ((39 -74, 39 -72, 43 -72, 43 -74, 39 -74))');
	------>Return:false

SELECT M_mStayIn('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)', 'POLYGON ((39 -74, 39 -72, 43 -72, 43 -74, 39 -74))');
	------>Return:true

SELECT M_mLeaves('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)', 'POLYGON ((39 -74, 39 -72, 43 -72, 43 -74, 39 -74))');
	------>Return:false

SELECT M_mCrosses('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)', 'POLYGON ((39 -74, 39 -72, 43 -72, 43 -74, 39 -74))');
	------>Return:false
	
SELECT M_Direction('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)');
	------>Return: (,,"{0,-0.08}","{""2017-09-02 08:14:22"",""2017-09-02 08:14:23""}") 
	
SELECT M_VelocityAtTime('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)', 1500);
	------>Return: 1.37
	
SELECT M_AccelerationAtTime('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)', 1500);
	------>Return: 0.0006
	
SELECT M_Max('MDOUBLE (1.002 1503828254949, 1.042 1503828254969)');
	------>Return: 1.042
	
SELECT M_Min('MDOUBLE (1.002 1503828254949, 1.042 1503828254969)');
	------>Return: 1.002
	
SELECT M_Avg('MDOUBLE (1.002 1503828254949, 1.042 1503828254969)');
	------>Return: 1.022
	
SELECT M_DWithin('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)', 
	'MVIDEO ((00001.mp4?t=1 10 -1 0.1 -5.59 -1 -1 null null 40.67 -73.83) 1000, 
		(00001.mp4?t=2 10 -1 0.1 -5.61 -1 -1 null null 41.67 -73.81) 2000)', 500);
	------>Return: true
	

Test II

SELECT M_TimeAtCummulative(mt, 2) FROM usertrajs;
	------>Return: 1504354471666

SELECT M_Slice(mt, 'POLYGON ((39 -74, 39 -72, 43 -72, 43 -74, 39 -74))') FROM usertrajs;
	------>Return:(1,286114,"{""(40.77,-73.95)"",""(40.77,-73.96)""}","{""2017-09-02 08:14:22"",""2017-09-02 08:14:23""}") 

SELECT M_SnapToGrid(mt, 1) FROM usertrajs;
	------>Return:(1,286114,"{""(40.8,-74.0)"",""(40.8,-74.0)""}","{""2017-09-02 08:14:22"",""2017-09-02 08:14:23""}") 

SELECT M_mEnters(mt, 'POLYGON ((39 -74, 39 -72, 43 -72, 43 -74, 39 -74))') FROM usertrajs;
	------>Return:false

SELECT M_mBypasses(mt, 'POLYGON ((39 -74, 39 -72, 43 -72, 43 -74, 39 -74))') FROM usertrajs;
	------>Return:false

SELECT M_mStayIn(mt, 'POLYGON ((39 -74, 39 -72, 43 -72, 43 -74, 39 -74))') FROM usertrajs;
	------>Return:true

SELECT M_mLeaves(mt, 'POLYGON ((39 -74, 39 -72, 43 -72, 43 -74, 39 -74))') FROM usertrajs;
	------>Return:false

SELECT M_mCrosses(mt, 'POLYGON ((39 -74, 39 -72, 43 -72, 43 -74, 39 -74))') FROM usertrajs;
	------>Return:false

SELECT M_Inside('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)', mv) from userVideos;
	------>Return: (1,286114,"{f,t}","{""2017-09-02 08:14:22"",""2017-09-02 08:14:23""}") 

SELECT M_Equal('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)', mv) from userVideos;
	------>Return: (1,286114,"{f,f}","{""2017-09-02 08:14:22"",""2017-09-02 08:14:23""}") 
	
SELECT M_Overlaps('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)', mv) from userVideos;
	------>Return: (1,286114,"{f,f}","{""2017-09-02 08:14:22"",""2017-09-02 08:14:23""}") 
	
SELECT M_Disjoint('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)', mv) from userVideos;
	------>Return: (1,286114,"{f,f}","{""2017-09-02 08:14:22"",""2017-09-02 08:14:23""}") 
	
SELECT M_Meet('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)', mv) from userVideos;
	------>Return: (1,286114,"{t,f}","{""2017-09-02 08:14:22"",""2017-09-02 08:14:23""}") 
	
SELECT M_Distance('MPOINT ((40.67 -73.83) 1000, (41.67 -73.81) 2000)', mv) from userVideos;
	------>Return: (1,286114,"{0,0}","{""2017-09-02 08:14:22"",""2017-09-02 08:14:23""}") 
	
SELECT M_Area(mv) FROM uservideos;
	------>Return: (1,286114,"{57.7,57.7}","{""2017-09-02 08:14:22"",""2017-09-02 08:14:23""}") 
	
SELECT M_Direction(mt) FROM usertrajs;
	------>Return: (1,286114,"{0,-0.08}","{""2017-09-02 08:14:22"",""2017-09-02 08:14:23""}") 
	
SELECT M_VelocityAtTime(mt, 2000) FROM usertrajs;
	------>Return: 1.37
	
SELECT M_AccelerationAtTime(mt, 2000) FROM usertrajs;
	------>Return: 0.0006
	
SELECT M_Avg(md_accx) FROM userSensors;
	------>Return: 0.9
	
Query Examples

Retrieve videos in userVideos table which have entered the city 'New York'.

SELECT id, name, mv
FROM userVideos a, city c
WHERE M_Enters(a.mv, c.geo ) = true AND c.name='New York';

Retrieve the cars in userTrajs table that have left from city ‘New York’ during 'period (1100, 1200)'.

SELECT id, carnumber
FROM userTrajs a, city c
WHERE  M_Leaves(M_Slice(a.mt,'Period (1100, 1200)'), c.geo) = true AND c.name = 'New York';

Retrieve the cars in userTrajs table that traveled up to 500m from central New York city.

SELECT id, carnumber
FROM userTrajs a 
WHERE  M_Max( 
M_Distance( a.mt, 'POLYGON ((40.74 -73.99, 40.74 -73.98, 40.73 -73.98, 40.73 -73.99, 40.74 -73.99 ))')) < 500.0;


Similarity queries


 

Table 3: Trajectory Similarity Operations

Type

Signature

Similarity

M_Hausdorff (mgeo, mgeo) double
M_LCSS (mgeo, mgeo) double
M_Traclus (mgeo, mgeo) double
M_LCVS (mgeo, mgeo) double

Test I

SELECT M_Hausdorff('MPOINT ((40.67 -73.83) 1000,(41.67 -73.81) 2000)', 
	''MPOINT ((40.67 -73.83) 1000,(41.67 -73.81) 2000)');
	------>Return: 0

SELECT M_LCSS('MPOINT ((40.67 -73.83) 1000,(41.67 -73.81) 2000)', 
	''MPOINT ((40.67 -73.83) 1000,(41.67 -73.81) 2000)');
	------>Return: 1

SELECT M_Traclus('MPOINT ((40.67 -73.83) 1000,(41.67 -73.81) 2000)', 
	''MPOINT ((40.67 -73.83) 1000,(41.67 -73.81) 2000)');
	------>Return: 0

SELECT M_LCVS('MPOINT ((40.67 -73.83) 1000,(41.67 -73.81) 2000)', 
	''MPOINT ((40.67 -73.83) 1000,(41.67 -73.81) 2000)');
	------>Return: 1


Test II

SELECT M_Hausdorff('MPOINT ((40.67 -73.83) 1000,(41.67 -73.81) 2000)', mv) FROM userVideos;
	------>Return: 0

SELECT M_LCSS('MPOINT ((40.67 -73.83) 1000,(41.67 -73.81) 2000)', mv) FROM userVideos;
	------>Return: 1

SELECT M_Traclus('MPOINT ((40.67 -73.83) 1000,(41.67 -73.81) 2000)', mv) FROM userVideos;
	------>Return: 0.00145

SELECT M_LCVS('MPOINT ((40.67 -73.83) 1000,(41.67 -73.81) 2000)', mv) userVideos;
	------>Return: 1

Query Examples

Return LCVS similarity distances between two videos in userVideos table.

SELECT a.id, b.id, M_LCVS (a.mv, b.mv, 40) 
FROM userVideos a, userVideos b;



FOV queries


Test I


And also support Table 1,2,3 functions.


Test II


Query Examples

Retrieve FOVs from userVideos table.

SELECT id, M_FOV(mv) 
FROM userVideos;

Retrieve FOVs in userVideos table that the shortest distance is less than 10m.

SELECT a.id, b.id, M_FOV(a.mv), M_FOV(b.mv)
FROM userVideos a, userVideos b 
WHERE M_DWithin(a.mv, a.mv, 10);


Join queries


Test I

SELECT M_Intersects(a.mt, b.mv) FROM usertrajs a, userVideos b;
	------>Return:(1,286114,"{t,t}","{""2017-09-02 08:14:22"",""2017-09-02 08:14:23""}") 

SELECT M_EvenTime(a.mt, b.mv) FROM usertrajs a, userVideos b;
	------>Return: (1,286114,"{""2017-09-02 08:14:22"",""2017-09-02 08:14:23""}") 
	
SELECT M_Relationship(a.mt, b.mv) FROM usertrajs a, userVideos b;
	------>Return: (1,286114,"{meet"",inside""}") 

SELECT M_Inside(a.mt, b.mv) FROM usertrajs a, userVideos b;
	------>Return: (1,286114,"{f,t}","{""2017-09-02 08:14:22"",""2017-09-02 08:14:23""}") 

SELECT M_Equal(a.mt, b.mv) FROM usertrajs a, userVideos b;
	------>Return: (1,286114,"{f,f}","{""2017-09-02 08:14:22"",""2017-09-02 08:14:23""}") 
	
SELECT M_Overlaps(a.mt, b.mv) FROM usertrajs a, userVideos b;
	------>Return: (1,286114,"{f,f}","{""2017-09-02 08:14:22"",""2017-09-02 08:14:23""}") 
	
SELECT M_Disjoint(a.mt, b.mv) FROM usertrajs a, userVideos b;
	------>Return: (1,286114,"{f,f}","{""2017-09-02 08:14:22"",""2017-09-02 08:14:23""}") 
	
SELECT M_Meet(a.mt, b.mv) FROM usertrajs a, userVideos b;
	------>Return: (1,286114,"{t,f}","{""2017-09-02 08:14:22"",""2017-09-02 08:14:23""}") 
	
SELECT M_Distance(a.mt, b.mv) FROM usertrajs a, userVideos b;
	------>Return: (1,286114,"{0,0}","{""2017-09-02 08:14:22"",""2017-09-02 08:14:23""}") 
	
SELECT M_DWithin(a.mt, b.mv, 500) FROM usertrajs a, userVideos b;
	------>Return: true
	
SELECT M_Hausdorff(a.mt, b.mv) FROM usertrajs a, userVideos b;
	------>Return: 0

SELECT M_LCSS(a.mt, b.mv) FROM usertrajs a, userVideos b;
	------>Return: 1

SELECT M_Traclus(a.mt, b.mv) FROM usertrajs a, userVideos b;
	------>Return: 0.00145

SELECT M_LCVS(a.mv, b.mv) FROM userVideos a, userVideos b;
	------>Return: 1

Query Examples

Find the videos which could be taken car 'TRUMP001'.

SELECT a.id, b.id, a.mv
FROM userVideos a, userTrajs b
WHERE M_ANY(M_Intersects( a.mv, b.mt ) ) = true AND a.name ='TRUMP001';

Find the videos in userVideos table which have the same movement trajectory during 'period (1100, 1150)'.

SELECT a.id, b.id
FROM userVideos a, userVideos b 
WHERE M_LCSS( M_Slice(a.mv, 'Period (1100, 1150)'), M_Slice(b.mv, 'Period (1100, 1150)'), 0.01, 40) = 1;
Other queries.

SELECT m_numof(a.mv)
FROM uservideos a
WHERE (m_spatial(a.mv) && ST_MakeEnvelope ( -73.857803, 40.659805, -73.798346, 40.692615, 4326) AND 
	m_tIntersects(a.mv, 'Period (1503828255000, 1503828259000)'));
	
SELECT m_min(m_distance(a.mv, b.mv))
FROM uservideos a, uservideos b
WHERE ( m_spatial(a.mv) && ST_MakeEnvelope (  -73.857803, 40.659805, -73.798346, 40.692615, 4326) AND 
	m_tIntersects(a.mv , ‘Period (1503828255000, 1503828259000)’))
      AND ( m_spatial(b.mv) && ST_MakeEnvelope (  -73.857803, 40.659805,  -73.798346, 40.692615,  4326) AND
	m_tIntersects(b.mv , 'Period (1503828255000, 1503828259000)'));
	
SELECT m_slice(a.mt, 'Period (1503828255000, 1503828259000)') 
FROM usertrajs a
WHERE ( m_spatial(a.mt) && ST_MakeEnvelope (  -73.857803, 40.659805, -73.798346, 40.692615, 4326) AND
	m_tIntersects(a.mt , 'Period (1503828255000, 1503828259000)'));

SELECT m_slice(a.mt, 'Period (1503828255000, 1503828259000)', 'POLYGON ((39 -74, 39 -72, 43 -72, 43 -74, 39 -74))')
FROM usertrajs a
WHERE ( m_spatial(a.mt) && ST_MakeEnvelope (  -73.857803, 40.659805, -73.798346, 40.692615, 4326) AND 
	m_tIntersects(a.mt , 'Period (1503828255000, 1503828259000)'));
	

SELECT m_leaves(a.mt,  b.mv)
FROM usertrajs a, uservideos b 
WHERE m_tIntersects(a.mt , 'Period (1503828255000, 1503828259000)'));

SELECT M_Hausdorff(a.mv, b.mv)
FROM uservideos a, uservideos b
WHERE ( m_spatial(a.mv) && ST_MakeEnvelope (  -73.857803, 40.659805, -73.798346, 40.692615, 4326) AND 
	m_tIntersects(a.mv , ‘Period (1503828255000, 1503828259000)’))
      AND  ( m_spatial(b.mv) && ST_MakeEnvelope (  -73.857803, 40.659805,  -73.798346, 40.692615,  4326) AND
	m_tIntersects(b.mv , 'Period (1503828255000, 1503828259000)'));