日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

本文介紹了軌跡模型的用途、基本構(gòu)成和快速入門等內(nèi)容。

模型用途

簡(jiǎn)介

軌跡模型是符合一定條件的移動(dòng)對(duì)象集合,通常應(yīng)用于交通、物流、出行、汽車等領(lǐng)域。

Ganos Trajectory是對(duì)象關(guān)系型數(shù)據(jù)庫(kù)PostgreSQL兼容版本(PolarDB PostgreSQL版)的一個(gè)時(shí)空引擎擴(kuò)展,Trajectory是Ganos自主研發(fā)的一種數(shù)據(jù)類型,主要用來(lái)存儲(chǔ)移動(dòng)對(duì)象的采樣點(diǎn)和屬性信息,并對(duì)其執(zhí)行分析任務(wù)。

功能概述

Trajectory支持軌跡數(shù)據(jù)存儲(chǔ)與分析方面的多種功能:

  • 軌跡構(gòu)建:通過(guò)幾何形狀(geometry)和時(shí)間戳、數(shù)組、數(shù)據(jù)表等數(shù)據(jù)源構(gòu)建軌跡。

  • 軌跡編輯:編輯軌跡的時(shí)間、幾何、屬性、事件等對(duì)象信息,同時(shí)支持軌跡的抽稀、切分、平滑、子軌跡提取、時(shí)空特征編輯等能力。

  • 軌跡分析:支持軌跡的空間關(guān)系判斷、時(shí)空關(guān)系判斷、相似度分析、特征提取等功能。

  • 軌跡索引:即創(chuàng)建軌跡時(shí)空索引加速上述查詢分析。

更多內(nèi)容請(qǐng)參見(jiàn)Trajectory SQL參考

主要業(yè)務(wù)場(chǎng)景

下面列舉了幾個(gè)典型的軌跡模型應(yīng)用場(chǎng)景。

  • 歷史軌跡的歸檔存儲(chǔ)

    將共享單車的一類的高頻采樣點(diǎn)聚合成為軌跡,利用軌跡簡(jiǎn)化算法進(jìn)行簡(jiǎn)化和降采樣后,將簡(jiǎn)化后的軌跡存儲(chǔ)到數(shù)據(jù)庫(kù)中或外部OSS存儲(chǔ)中,以節(jié)省存儲(chǔ)空間和存儲(chǔ)成本。Ganos支持以統(tǒng)一的方式訪問(wèn)軌跡數(shù)據(jù),無(wú)需注意其存儲(chǔ)在數(shù)據(jù)表內(nèi)還是OSS中。

  • 軌跡的時(shí)空分析和伴隨分析

    通過(guò)給出一個(gè)關(guān)注的時(shí)空區(qū)域或時(shí)空軌跡,查找經(jīng)過(guò)這個(gè)時(shí)空區(qū)域的軌跡或是查找和已知軌跡相似的軌跡,從而得到數(shù)據(jù)庫(kù)中值得關(guān)注的軌跡,用以支持定位一類用戶、發(fā)放優(yōu)惠券等業(yè)務(wù)。

  • 軌跡的特征提取和分析

    對(duì)用戶的歷史軌跡,通過(guò)重采樣和漂移點(diǎn)去除來(lái)清洗數(shù)據(jù)后,提取出長(zhǎng)度、持續(xù)時(shí)間、駐留點(diǎn)、彎道等統(tǒng)計(jì)信息,將其作為機(jī)器學(xué)習(xí)的特征信息輸入到神經(jīng)網(wǎng)絡(luò)或其它算法中,用以生成用戶畫像來(lái)指導(dǎo)業(yè)務(wù)上對(duì)用戶的管理和推薦等。

基本構(gòu)成

概述

現(xiàn)實(shí)世界中,一個(gè)運(yùn)動(dòng)物體會(huì)在不同的時(shí)刻,記錄其空間位置。一個(gè)物體的軌跡是一個(gè)包含時(shí)間和空間信息的點(diǎn)的序列,記錄了該物體在不同時(shí)刻的空間位置。

例如,某共享單車在2020-04-11 17:42:30時(shí)上報(bào)了其經(jīng)緯度坐標(biāo)(114.35, 39.28),則其在數(shù)據(jù)庫(kù)中可以表示為一條記錄:

time

x

y

2020-04-11 17:42:30

114.35

39.28

通常,在軌跡的采樣點(diǎn)上,還會(huì)記錄一些其它信息。例如速度、方向等。這里假設(shè)其記錄了速度的數(shù)據(jù):

time

x

y

speed

2020-04-11 17:42:30

114.35

39.28

4.3

隨著時(shí)間的推移,將會(huì)有一系列軌跡點(diǎn)。這里假設(shè)其有三條記錄:

time

x

y

speed

2020-04-11 17:42:30

114.35

39.28

4.3

2020-04-11 17:43:30

114.36

39.28

4.8

2020-04-11 17:45:00

114.35

39.29

3.5

則這三個(gè)點(diǎn)組合起來(lái),就構(gòu)成了一條時(shí)空軌跡,其形狀大致如下圖所示:

image

Ganos的軌跡模型將一個(gè)運(yùn)動(dòng)物體的多個(gè)軌跡點(diǎn)聚合起來(lái)存儲(chǔ),和把每個(gè)軌跡點(diǎn)單獨(dú)存儲(chǔ)相比:一方面,我們可以針對(duì)多個(gè)軌跡點(diǎn)進(jìn)行壓縮,節(jié)省存儲(chǔ)成本;另一方面,針對(duì)聚合后的軌跡,可以執(zhí)行多種針對(duì)整條軌跡而非單個(gè)軌跡點(diǎn)的操作,例如:軌跡相交、提取子軌跡,軌跡相似性判斷等。

此外,Ganos還支持保存軌跡的事件屬性,其記錄和單個(gè)采樣點(diǎn)無(wú)關(guān)的、在不同時(shí)刻發(fā)生的事件信息。其格式為{type:timestamp}的二元組,其中 type 為用戶自定義的事件編號(hào)(整數(shù)類型),timestamp為事件發(fā)生的時(shí)間。

存儲(chǔ)方式

在業(yè)務(wù)上,對(duì)于移動(dòng)對(duì)象的軌跡,常見(jiàn)的三種表示方式:

  • 方式一:存儲(chǔ)為表格中的行,每一行分別記錄時(shí)間、x坐標(biāo)、y坐標(biāo)等信息。

  • 方式二:存儲(chǔ)為二維或三維的幾何類型LINESTRING/LINESTRING M,用M維度存儲(chǔ)時(shí)間戳。

  • 方式三:存儲(chǔ)為軌跡類型。

其中,方式一更新方便,但查詢效率較低,存儲(chǔ)空間占用較多。方式二降低了更新效率,但增強(qiáng)了空間查詢效率,并節(jié)約了存儲(chǔ)空間,但無(wú)法存儲(chǔ)屬性信息。方式三在方式二的基礎(chǔ)上對(duì)時(shí)間的處理能力進(jìn)一步增強(qiáng),同時(shí)支持屬性和事件。用戶可以根據(jù)實(shí)際需要選擇存儲(chǔ)時(shí)使用的表示方式,并在查詢時(shí)轉(zhuǎn)化為其它表示方式進(jìn)行處理和分析。

--構(gòu)建存儲(chǔ)為行的數(shù)據(jù),每一行代表一個(gè)軌跡點(diǎn)
CREATE TABLE sample_points(userid numeric, sample_time timestamp, x double precision, y double precision, z double precision, intensity int);
INSERT INTO sample_points VALUES
                            (1,'2020-04-11 17:42:30',114.35, 39.28, 4, 80),
                            (1,'2020-04-11 17:43:30',114.36, 39.28, 4, 30),
                            (1,'2020-04-11 17:45:00',114.35, 39.29, 4, 50),
                            (2,'2020-04-11 17:42:30',114.3, 39, 34, 60),
                            (2,'2020-04-11 17:43:30',114.3, 39, 38, 58);

--從行類型轉(zhuǎn)化為軌跡類型,每一行代表一個(gè)軌跡點(diǎn)
CREATE TABLE trajectory_table(userid numeric PRIMARY KEY, traj trajectory);

INSERT INTO trajectory_table
SELECT userid, ST_Sort(ST_MakeTrajectory(pnts.tjraw, true, '{"intensity"}'::cstring[]))
FROM
  (SELECT sample_points.userid, array_agg(ROW(sample_points.sample_time, sample_points.x, sample_points.y, sample_points.z, sample_points.intensity)) as tjraw FROM sample_points GROUP BY userid) pnts;

--從軌跡類型轉(zhuǎn)化為行類型
SELECT f.* from trajectory_table,ST_AsTable(traj) as f(t timestamp, x double precision, y double precision, z double precision, intensity integer);

-- 轉(zhuǎn)化軌跡類型為L(zhǎng)INESTRING類型,其中只包含空間信息
SELECT ST_trajspatial(traj) FROM trajectory_table;

-- 使用LINESTRING類型的空間形狀和時(shí)間范圍構(gòu)建軌跡
SELECT ST_MakeTrajectory('STPOINT'::leaftype, st_geomfromtext('LINESTRING (114 35, 115 36, 116 37)', 4326), '[2010-01-01 14:30, 2010-01-01 15:30)'::tsrange, '{}');

輸出格式

Ganos Trajectory中的一條軌跡由時(shí)間、空間、屬性、事件四個(gè)部分構(gòu)成,在將其轉(zhuǎn)化為文本輸出時(shí),也會(huì)依照四個(gè)部分,格式化為JSON格式進(jìn)行輸出。示例如下:

{
  "trajectory": {
    "version": 1,
    "type": "STPOINT",
    "leafcount": 3,
    "start_time": "2010-01-01 14:30:00",
    "end_time": "2010-01-01 15:30:00",
    "spatial": "SRID=4326;LINESTRING(114 35,115 36,116 37)",
    "timeline": [
      "2010-01-01 14:30:00",
      "2010-01-01 15:00:00",
      "2010-01-01 15:30:00"
    ],
    "attributes": {
      "leafcount": 3,
      "velocity": {
        "type": "integer",
        "length": 2,
        "nullable": true,
        "value": [120, 130, 140]
      },
      "accuracy": {
        "type": "float",
        "length": 4,
        "nullable": false,
        "value": [120.0, 130.0, 140.0]
      },
      "bearing": {
        "type": "float",
        "length": 8,
        "nullable": false,
        "value": [120.0, 130.0, 140.0]
      },
      "acceleration": {
        "type": "string",
        "length": 20,
        "nullable": true,
        "value": ["120", "130", "140"]
      },
      "active": {
        "type": "timestamp",
        "length": 8,
        "nullable": false,
        "value": [
          "2010-01-01 14:30:00",
          "2010-01-01 15:00:00",
          "2010-01-01 15:30:00"
        ]
      }
    },
    "events": [
      {
        "1": "2010-01-01 14:30:00"
      },
      {
        "2": "2010-01-01 15:00:00"
      },
      {
        "3": "2010-01-01 15:30:00"
      }
    ]
  }
}

其中:

  • version、type:固定值。

  • leafcount:表示軌跡采樣點(diǎn)個(gè)數(shù)。

  • start_time、end_time:表示軌跡的開(kāi)始和結(jié)束時(shí)間。

  • spatial:表示軌跡的空間形狀,以WKT形式顯示。

  • timeline:表示采樣點(diǎn)的時(shí)間戳,以字符數(shù)組的格式顯示。

  • attributes:表示軌跡的屬性,其中l(wèi)eafcount是元素個(gè)數(shù),其余的鍵是屬性的名稱,而屬性值中type是數(shù)據(jù)類型,length是數(shù)據(jù)類型的長(zhǎng)度,nullable為是否接受空值。

  • events:表示軌跡的事件,其由多個(gè)鍵值對(duì)的數(shù)組組成。

空間參考系

空間參考系(Spatial Reference System,以下簡(jiǎn)稱為SRS )定義了如何將Trajectory對(duì)象關(guān)聯(lián)到地球表面上某個(gè)具體位置。

Ganos使用一個(gè)整數(shù)來(lái)表示SRS的定義引用,稱為SRID。Trajectory對(duì)象通過(guò)其自身的SRID值與SRS關(guān)聯(lián)。

更多內(nèi)容請(qǐng)參見(jiàn)空間參考

數(shù)據(jù)列視圖

trajectory_columns是從數(shù)據(jù)庫(kù)系統(tǒng)目錄表中讀取全部柵格列的視圖,其結(jié)構(gòu)如下:

列名

類型

說(shuō)明

t_table_catalog

varchar(256)

一般為固定值postgres。

t_table_schema

varchar(256)

該表所在的schema。

t_table_name

varchar(256)

該表的表名。

t_trajectory_column

varchar(256)

該表中某個(gè)Trajectory列的列名。

可以通過(guò)如下語(yǔ)句查詢當(dāng)前數(shù)據(jù)庫(kù)中全部幾何數(shù)據(jù)列:

SELECT * FROM trajectory_columns;

索引

Ganos為軌跡數(shù)據(jù)提供了GiST索引:

索引名稱

索引說(shuō)明

索引特點(diǎn)

GiST (Generalized Search Tree)

GiST索引是一種平衡搜索樹(shù),是最常用、最通用的空間索引方法,提供非常好的查詢性能。

GiST索引允許定義一些規(guī)則將任意類型的數(shù)據(jù)分布在一棵平衡樹(shù)上,同時(shí)也允許定義一些方法訪問(wèn)這些數(shù)據(jù)。

實(shí)現(xiàn)標(biāo)準(zhǔn)

Ganos軌跡模型實(shí)現(xiàn)了OGC Moving Features標(biāo)準(zhǔn)所定義的接口,同時(shí)對(duì)其進(jìn)行了擴(kuò)展。軌跡中的幾何屬性依照幾何模型進(jìn)行實(shí)現(xiàn),并可使用ST_trajectorySpatial函數(shù)將一條軌跡的幾何部分提取出來(lái)進(jìn)行操作。

快速入門

簡(jiǎn)介

快速入門文檔幫助用戶快速理解Ganos Trajectory引擎的基本用法,包括擴(kuò)展創(chuàng)建、創(chuàng)建表、插入數(shù)據(jù)、創(chuàng)建索引、查詢、相似性分析等內(nèi)容。

更多專業(yè)用法可參考Trajectory最佳實(shí)踐文章:

語(yǔ)法說(shuō)明

  • 創(chuàng)建擴(kuò)展。

    CREATE extension ganos_trajectory cascade;
    說(shuō)明

    建議將擴(kuò)展安裝在public模式下,避免權(quán)限問(wèn)題。

    CREATE extension ganos_trajectory WITH schema public cascade;
  • 創(chuàng)建軌跡表。

     CREATE TABLE traj_table (id integer, traj trajectory);
  • 插入軌跡數(shù)據(jù)。

     INSERT INTO traj_table VALUES
     (1, ST_MakeTrajectory('STPOINT'::leaftype, st_geomfromtext('LINESTRING (114 35, 115 36, 116 37)', 4326), '[2010-01-01 14:30, 2010-01-01 15:30)'::tsrange, '{"leafcount": 3,"attributes" : {"velocity" : {"type":"integer","length":4,"nullable":false,"value":[120, 130, 140]},"accuracy":{"type":"integer","length":4,"nullable":false,"value":[120, 130, 140]},"bearing":{"type":"float","length":4,"nullable":false,"value":[120, 130, 140]},"acceleration":{"type":"float","length":4,"nullable":false,"value":[120, 130, 140]}}}')),
     (2, ST_MakeTrajectory('STPOINT'::leaftype, st_geomfromtext('LINESTRING (114 35, 115 36, 116 37)', 4326), '2010-01-01 14:30'::timestamp, '2010-01-01 15:30'::timestamp, '{"leafcount": 3,"attributes" : {"velocity" : {"type":"integer","length":4,"nullable":false,"value":[120, 130, 140]},"accuracy":{"type":"integer","length":4,"nullable":false,"value":[120, 130, 140]},"bearing":{"type":"float","length":4,"nullable":false,"value":[120, 130, 140]},"acceleration":{"type":"float","length":4,"nullable":false,"value":[120, 130, 140]}}}')),
     (3, ST_MakeTrajectory('STPOINT'::leaftype, st_geomfromtext('LINESTRING (114 35, 115 36, 116 37)', 4326), ARRAY['2010-01-01 14:30'::timestamp, '2010-01-01 15:00'::timestamp, '2010-01-01 15:30'::timestamp], '{"leafcount": 3,"attributes" : {"velocity" : {"type":"integer","length":4,"nullable":false,"value":[120, 130, 140]},"accuracy":{"type":"integer","length":4,"nullable":false,"value":[120, 130, 140]},"bearing":{"type":"float","length":4,"nullable":false,"value":[120, 130, 140]},"acceleration":{"type":"float","length":4,"nullable":false,"value":[120, 130, 140]}}}')),
     (4, ST_MakeTrajectory('STPOINT'::leaftype, st_geomfromtext('LINESTRING (114 35, 115 36, 116 37)', 4326), '[2010-01-01 14:30, 2010-01-01 15:30)'::tsrange, null));
  • 創(chuàng)建軌跡索引并加速各類查詢。

     --創(chuàng)建軌跡索引,加速時(shí)空過(guò)濾效率
     CREATE index tr_index ON traj_table USING trajgist (traj);
    
     --空間查詢時(shí),加速空間過(guò)濾
     SELECT id, traj FROM traj_table WHERE st_3dintersects(traj, ST_GeomFromText('POLYGON((116.46747851805917 39.92317964155052,116.4986540687358 39.92317964155052,116.4986540687358 39.94452401711516,116.46747851805917 39.94452401711516,116.46747851805917 39.92317964155052))'));
    
     --時(shí)間查詢時(shí),加速時(shí)間過(guò)濾
     SELECT id, traj FROM traj_table WHERE st_TIntersects(traj, '2010-01-01 12:30:44'::timestamp,'2010-01-01 14:30:44'::timestamp);
    
     --時(shí)空查詢時(shí),加速時(shí)空過(guò)濾
     SELECT id, traj FROM traj_table WHERE st_3dintersects(traj, ST_GeomFromText('POLYGON((116.46747851805917 39.92317964155052,116.4986540687358 39.92317964155052,116.4986540687358 39.94452401711516,116.46747851805917 39.94452401711516,116.46747851805917 39.92317964155052))'),'2010-01-01 13:30:44'::timestamp,'2010-01-03 17:30:44'::timestamp);
  • 查詢軌跡起、止時(shí)間。

     SELECT st_startTime(traj), st_endTime(traj) FROM traj_table ;
         st_starttime     |     st_endtime
     ---------------------+---------------------
      2010-01-01 14:30:00 | 2010-01-01 15:30:00
      2010-01-01 14:30:00 | 2010-01-01 15:30:00
      2010-01-01 14:30:00 | 2010-01-01 15:30:00
      2010-01-01 14:30:00 | 2010-01-01 15:30:00
     (4 rows)
  • 分析軌跡間的相近性。

     With traj AS (
       SELECT ST_makeTrajectory('STPOINT', 'LINESTRING(1 1, 5 6, 9 8)'::geometry, '[2010-01-01 11:30, 2010-01-01 15:00)'::tsrange,
       '{"leafcount":3,"attributes":{"velocity": {"type": "integer", "length": 2,"nullable" : true,"value": [120,130,140]}, "accuracy": {"type": "float", "length": 4, "nullable" : false,"value": [120,130,140]}, "bearing": {"type": "float", "length": 8, "nullable" : false,"value": [120,130,140]}, "acceleration": {"type": "string", "length": 20, "nullable" : true,"value": ["120","130","140"]}, "active": {"type": "timestamp", "nullable" : false,"value": ["Fri Jan 01 11:35:00 2010", "Fri Jan 01 12:35:00 2010", "Fri Jan 01 13:30:00 2010"]}}, "events": [{"2" : "Fri Jan 02 15:00:00 2010"}, {"3" : "Fri Jan 02 15:30:00 2010"}]}') a,
       ST_makeTrajectory('STPOINT', 'LINESTRING(1 0, 4 2, 9 6)'::geometry, '[2010-01-01 11:30, 2010-01-01 15:00)'::tsrange,
       '{"leafcount":3,"attributes":{"velocity": {"type": "integer", "length": 2,"nullable" : true,"value": [120,130,140]}, "accuracy": {"type": "float", "length": 4, "nullable" : false,"value": [120,130,140]}, "bearing": {"type": "float", "length": 8, "nullable" : false,"value": [120,130,140]}, "acceleration": {"type": "string", "length": 20, "nullable" : true,"value": ["120","130","140"]}, "active": {"type": "timestamp", "nullable" : false,"value": ["Fri Jan 01 11:35:00 2010", "Fri Jan 01 12:35:00 2010", "Fri Jan 01 13:30:00 2010"]}}, "events": [{"2" : "Fri Jan 02 15:00:00 2010"}, {"3" : "Fri Jan 02 15:30:00 2010"}]}') b)
     SELECT ST_euclideanDistance(a, b) FROM traj;
      st_euclideandistance
     ----------------------
        0.0888997369940162
     (1 row)
  • 刪除擴(kuò)展(可選)。

    DROP EXTENSION ganos_trajectory CASCADE;

SQL參考

詳細(xì)SQL手冊(cè)請(qǐng)參見(jiàn)Trajectory SQL參考