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中显示查询结果:

版权声明:本文为liyazhen2011原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。