PostGIS批量导入栅格数据

网友投稿 1062 2022-10-11

PostGIS批量导入栅格数据

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

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

我的实验数据是全球气象数据(不过,我只-了中国部分19区的平均气温数据(TIF格式)做示例演示)

-网址:​​-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的合并的时候很有用。

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

通过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 databaseconn = psycopg2.connect('host=localhost port=5432 user=postgres password=password dbname=postgis_in_action')# Open a cursor to perform database operationscur = 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 objectsrasttiff = cur.fetchone()# Write data to fileif rasttiff is not None: open('/home/theone/Desktop/tmean1.tif', 'wb').write(str(rasttiff[0]))# Close communication with the database

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:使用Python的netCDF4和matplotlib.basemap包进行气象数据的可视化
下一篇:Java并发编程之原子操作类详情
相关文章

 发表评论

暂时没有评论,来抢沙发吧~