网格生成

Step1:统计

输入:时间范围,空间范围

输出:(geohash,时间序列), count,row,col(以0为开头)

Step2:生成完整时间序列的网格

输入:时间范围,空间范围

输出:生成完整时间序列的网格


Step1

1.时间范围和空间范围的定义

{

    "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.获得数据

已知数据库中的时间


已知 数据库中的地址


a. 筛选时间 ——数据

b.数据点落在 空间范围内

ST_MakeEnvelope—从最小和最大坐标创建一个矩形Polygon。

ST_Covers—如果几何B中的任何点都不在几何A之外,则返回1(TRUE)

select glib.f_quadtree2rowcol('trstrt'); 获得结果{行号,列号}




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:生成完整时间序列的网格

1. 空白生成

行:0~x

列:0~y

时间:范围中的每小时

排列组合——

2. 新表若相等***


集合返回函数_ generate_series

交叉连接

交叉连接(CROSS JOIN)把第一个表的每一行与第二个表的每一行进行匹配。如果两个输入表分别有 x 和 y 行,则结果表有 x*y 行。

由于交叉连接(CROSS JOIN)有可能产生非常大的表,使用时必须谨慎,只在适当的时候使用它们。

外部连接

SQL 标准定义了三种类型的外部连接: LEFT、RIGHT 和 FULL, PostgreSQL 支持所有这些。对于左外连接,首先执行一个内连接。然后,对于表 T1 中不满足表 T2 中连接条件的每一行,其中 T2 的列中有 null 值也会添加一个连接行。因此,连接的表在 T1 中每一行至少有一行

COALESCE(d.counts, 0)——对null数据填0

你可能感兴趣的:(网格生成)