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 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');
--------'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;
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+ |
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
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
SELECT id, mv FROM userVideos WHERE M_Overlaps(mv, 'Period (1100, 1150)');
SELECT id, M_Slice( mv, 'Period (1100, 1200)') FROM userVideos WHERE M_Overlaps(mv, 'Period (1100, 1150)');
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 |
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
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
SELECT id, name, mv FROM userVideos a, city c WHERE M_Enters(a.mv, c.geo ) = true AND c.name='New York';
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';
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;
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 |
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
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
SELECT a.id, b.id, M_LCVS (a.mv, b.mv, 40) FROM userVideos a, userVideos b;
And also support Table 1,2,3 functions.
SELECT id, M_FOV(mv) FROM userVideos;
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);
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
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';
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;
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)'));
© 2019 PostGeoMedia. All Rights Reserved | Design by InfoLab