25.1. 什么是轨迹匹配
一:什么是轨迹
所谓的轨迹 是由一系列经纬度点组成的线,这些线连接在一起形成一个轨迹
二:轨迹怎么匹配
我们可以选取一些经纬度点,这些点如果与轨迹点在某一半径范围能重叠,如果重叠的点超过设定的阈值,则认为数据库中的轨迹与这些点匹配相识
三:轨迹匹配与时空碰撞的区别
1:轨迹匹配只考虑位置,不额外考虑时间,速度,方向等地理位置之外的因素
2:时空匹配仅仅是点之间的匹配,估计匹配会考虑两点之间连接的线是否与之匹配.
25.2. 建表示例
CREATE FOREIGN TABLE test_line(
line float8[] options(store 'idsl'),
queryscore float8,
entityId text OPTIONS(key 'unique'),
upmode text
) SERVER lxdb options(store 'ids');
25.3. 建表示例的字段意义解释
25.4. 轨迹匹配-入库例子
INSERT INTO test_line(line , entityId, upmode) VALUES
(ARRAY[118.83,32.04,118.83,32.05,118.84,32.05,118.83,32.05,118.82,32.06,118.82,32.06,118.82,32.06,118.83,32.07,118.84,32.07],'轨迹0','incr'),
(ARRAY[118.83,32.04,118.83,32.05,118.84,32.05,118.83,32.05,118.82,32.06,118.82,32.06,118.82,32.06,118.83,32.07,118.84,32.07],'轨迹1','incr'),
(ARRAY[118.83,32.04,118.83,32.05,118.84,32.05,118.83,32.05,118.82,32.06,118.82,32.06,118.82,32.06,118.83,32.07,118.84,32.07],'轨迹2','incr'),
(ARRAY[118.83,32.04,118.83,32.05,118.84,32.05,118.83,32.05,118.82,32.06,118.82,32.06,118.82,32.06,118.83,32.07,118.84,32.07],'轨迹3','incr'),
(ARRAY[118.83,32.04,118.83,32.05,118.84,32.05,118.83,32.05,118.82,32.06,118.82,32.06,118.82,32.06,118.83,32.07,118.84,32.07],'轨迹4','incr');
25.5. 入库例子解释
25.6. 查询
select * from test_line where line @> trace(array[
array[118.83,32.04]::float8[],
array[118.89, 32.06]::float8[],
array[118.83,32.05]::float8[],
array[118.82, 32.00]::float8[],
array[118.81, 32.08]::float8[],
array[118.83, 32.07]::float8[],
array[118.86, 32.04]::float8[],
array[118.84, 32.01]::float8[],
array[118.81, 32.04]::float8[],
array[118.88, 32.06]::float8[]]::float8[][],
array[450,1]::float8[]);
25.7. 查询语法的说明
25.8. 追加轨迹路线
INSERT INTO test_line(line, entityId, upmode) VALUES
(ARRAY[118.87, 32.01, 118.89, 32.06],'轨迹1','incr')
25.9. 按照匹配度排序
select line, entityid,queryscore from test_line where line @> trace(array[
array[118.87, 32.01]::float8[],
array[118.89, 32.06]::float8[],
array[118.82, 32.05]::float8[],
array[118.82, 32.01]::float8[],
array[118.81, 32.08]::float8[],
array[118.83, 32.07]::float8[],
array[118.86, 32.04]::float8[],
array[ 118.81, 32.04]::float8[]]
::float8[][],array[800,2]::float8[]) order by queryscore limit 100;