1.栅格数据
WorldClim是一个高空间分辨率的全球天气和气候数据的数据库。可以从该网站下载天气数据。网址如下:https://www.worldclim.org。
下面是12个月份温度统计数据。
2.使用工具raster2pgsql 将栅格数据导入到postgis
首先,生成sql文件。
raster2pgsql -d -I -C -M -F -t 100x100 -s 4326 tmax*.bil public.tmax > tmax.sql
其中,命令参数如下:
参数 | 含义 |
---|---|
-d | 表存在时,删除并重新创建 |
-I | 在栅格数据列上生成GIST空间索引 |
-C | 在栅格数据列上生成约束 |
-M | 在栅格列上运行VACUUM ANALYZE |
-F | 增加一列,值为文件名 |
-t | 将栅格数据切分为片,片的大小格式为WIDTHxHEIGHT,然后插入每一行。 |
-s | 空间坐标系 |
然后,执行sql文件。
psql -d postgis_32_sample -U postgres -f tmax.sql
命令中的参数如下:
参数 | 含义 |
---|---|
-d | 数据库 |
-U | 用户名 |
-f | 文件名 |
3.查看表raster_columns信息
SELECT * FROM raster_columns where r_table_name = 'tmax';
在pgAdmin中显示查询结果:
4.查看栅格块元信息
SELECT rid, (foo.md).* FROM (SELECT rid, ST_MetaData(rast) As md FROM public.tmax ) As foo;
在pgAdmin中显示查询结果:
5.统计栅格块数目
SELECT MIN(filename), COUNT(*) AS num_raster
FROM public.tmax
GROUP BY filename
ORDER BY filename;
在pgAdmin中显示查询结果:
6.统计经度12.49,纬度41.88的地方每个月的平均温度
SELECT REPLACE(REPLACE(filename, 'tmax', ''), '.bil', '') As month,
(ST_VALUE(rast, ST_SetSRID(ST_Point(12.49, 41.88),4326))/10) As tmaxtemp
From tmax where rid IN
(SELECT rid FROM tmax WHERE ST_Intersects(ST_Envelope(rast), ST_SetSRID(ST_Point(12.49, 41.88),4326)))
ORDER BY tmaxtemp;
命令中用到的函数如下:
函数 | 含义 |
---|---|
ST_Point | 使用给定坐标值,构建point对象。 |
ST_Envelope | 根据栅格的地理参考信息,获得栅格对象的外包矩形 |
ST_Intersects | 判断空间上是否相交 |
ST_VALUE | 输出指定位置的元素值 |
ST_SetSRID | 设置栅格对象的空间参考标识符 |
在pgAdmin中显示查询结果: