PostGIS批量导入栅格数据
如果我们有一批以文件存储的影像数据如何利用PostGIS批量的导出到PostgreSQL数据库中进行管理呢? 我的实验环境如下: 我的实验数据是全球气象数据(不过,我只下载了中国部分19区的平均气温数据(TIF格式)做示例演示) 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
需要说明的是: 最后,说说怎么导出数据到文件。和上一篇博文一样,我们还是使用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中查看和原来的影像一模一样: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |