Step1:統(tǒng)計(jì)
輸入:時(shí)間范圍,空間范圍
輸出:(geohash,時(shí)間序列), count,row,col(以0為開頭)
Step2:生成完整時(shí)間序列的網(wǎng)格
輸入:時(shí)間范圍,空間范圍
輸出:生成完整時(shí)間序列的網(wǎng)格
Step1
1.時(shí)間范圍和空間范圍的定義
{
? ? "time_extend": {
? ? ? ? "end_time": "2012123123",
? ? ? ? "timestep": "1",
? ? ? ? "start_time": "2012010100"
? ? },
? ? "space_extend": {
? ? ? ? "east": 121.382326,
? ? ? ? "west": 119.914598,
? ? ? ? "north": 32.036541,
? ? ? ? "south": 30.760336
? ? }
}
2.獲得數(shù)據(jù)
已知數(shù)據(jù)庫(kù)中的時(shí)間

已知 數(shù)據(jù)庫(kù)中的地址

a. 篩選時(shí)間 ——數(shù)據(jù)
b.數(shù)據(jù)點(diǎn)落在 空間范圍內(nèi)
ST_MakeEnvelope—從最小和最大坐標(biāo)創(chuàng)建一個(gè)矩形Polygon。
ST_Covers—如果幾何B中的任何點(diǎn)都不在幾何A之外,則返回1(TRUE)
select glib.f_quadtree2rowcol('trstrt'); 獲得結(jié)果{行號(hào),列號(hào)}

select crimestat.datacluster('{
? ? ? ? "end_time": 2012123123,
? ? ? ? "timestep": "1",
? ? ? ? "start_time": 2012010100
? ? }'::json, '{
? ? ? ? "east": 121.382326,
? ? ? ? "west": 119.914598,
? ? ? ? "north": 32.036541,
? ? ? ? "south": 30.760336
? ? }'::json,14);
查詢
trstrtrqrsrqqr
Step2:生成完整時(shí)間序列的網(wǎng)格
1. 空白生成
行:0~x
列:0~y
時(shí)間:范圍中的每小時(shí)
排列組合——
2. 新表若相等***
集合返回函數(shù)_?generate_series
交叉連接
交叉連接(CROSS JOIN)把第一個(gè)表的每一行與第二個(gè)表的每一行進(jìn)行匹配。如果兩個(gè)輸入表分別有 x 和 y 行,則結(jié)果表有 x*y 行。
由于交叉連接(CROSS JOIN)有可能產(chǎn)生非常大的表,使用時(shí)必須謹(jǐn)慎,只在適當(dāng)?shù)臅r(shí)候使用它們。
外部連接
SQL 標(biāo)準(zhǔn)定義了三種類型的外部連接: LEFT、RIGHT 和 FULL, PostgreSQL 支持所有這些。對(duì)于左外連接,首先執(zhí)行一個(gè)內(nèi)連接。然后,對(duì)于表 T1 中不滿足表 T2 中連接條件的每一行,其中 T2 的列中有 null 值也會(huì)添加一個(gè)連接行。因此,連接的表在 T1 中每一行至少有一行