首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PostGIS批量导入栅格数据

PostGIS批量导入栅格数据

作者头像
卡尔曼和玻尔兹曼谁曼
发布2019-01-22 10:45:03
2.1K0
发布2019-01-22 10:45:03
举报

如果我们有一批以文件存储的影像数据如何利用PostGIS批量的导出到PostgreSQL数据库中进行管理呢? (单个数据的导入参见我上篇博文:PostGIS导入导出栅格数据

我的实验环境如下: OS: Ubuntu 16.04 LTS PostgreSQL:9.5.5 PostGIS: 2.2

我的实验数据是全球气象数据(不过,我只下载了中国部分19区的平均气温数据(TIF格式)做示例演示) 下载网址:http://www.worldclim.org/tiles.php 下载好的数据进行解压可以看到包含了12个月的平均气温数据:

数据准备
数据准备

使用GDAL的命令行工具gdalinfo查看其元数据,可以看到其采用的是WGS84坐标系,大小是3600×3600。

gdalinfo查看元数据
gdalinfo查看元数据

我们可以在raster2pgsql命令中使用通配符批量的导入数据到PostgreSQL数据库,命令如下: (具体参数可自行查看命令的帮助文档)

raster2pgsql -s 4326 -I -C -M ./*.tif -F -t 256x256 staging.tmean_19 | psql -h localhost -p 5432 -U postgres -d postgis_in_action -W

需要说明的是: -t参数指定了数据的分块大小,原始的3600×3600以256×256的Tile进行划分存储。 -F参数在关系表中增加名为filename的列用于保存原始文件的名称,这在我们进行Tile的合并的时候很有用。

raster2pgsql导入数据
raster2pgsql导入数据

进入数据库可以查看我们导入的数据表

栅格数据导入关系表
栅格数据导入关系表

通过SQL进行查看,发现每个文件被分割成了225块。(但是(3600*3600)/(256*256)应该是197,不是225,我也不知道为什么被分割成了225块???)

导入影像分块数目
导入影像分块数目

最后,说说怎么导出数据到文件。和上一篇博文一样,我们还是使用Python脚本进行导出。这里主要用到了两个函数ST_AsTIFF和ST_Union。ST_AsTIFF上一篇中我们已经使用过,用于将PostgreSQL中的raster类型导出为TIFF格式对应的bytea类型,而ST_Union对于栅格数据来说,用于将分块的影像重新拼接为完整的一副影像。 详细代码如下:

# -*- coding: utf-8 -*-

import psycopg2

# Connect to an existing database
conn = psycopg2.connect('host=localhost port=5432 user=postgres password=password dbname=postgis_in_action')

# Open a cursor to perform database operations
cur = conn.cursor()

# Execute SQL query
# cur.execute("SELECT ST_AsTIFF(rast, 'LZW') AS rasttiff FROM staging.wsiearth WHERE rid=1;")
cur.execute("SELECT ST_AsTIFF(ST_Union(rast), 'LZW') AS rasttiff FROM staging.tmean_19 WHERE filename='tmean1_19.tif';")

# Fetch data as Python objects
rasttiff = cur.fetchone()

# Write data to file
if rasttiff is not None:
    open('/home/theone/Desktop/tmean1.tif', 'wb').write(str(rasttiff[0]))

# Close communication with the database
cur.close()
conn.close()

导出的结果可以在QGIS中查看和原来的影像一模一样:

PostGIS导出结果
PostGIS导出结果
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年02月14日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档