gis导出栅格数据为什么不能tif_PostGIS导出指定范围内的栅格数据

本文介绍了如何利用PostGIS查询SQL语句,结合Python代码,从PostgreSQL数据库中导出经经纬度范围裁剪后的栅格数据为TIFF格式。首先,通过ST_MakeEnvelope创建矩形范围,然后使用ST_Intersects选择与范围相交的栅格,再用ST_Clip裁剪,最后用ST_Union聚合所有数据。Python代码演示了连接数据库、执行SQL并保存结果到TIFF文件的过程。
摘要由CSDN通过智能技术生成

针对已经通过PostGIS导入到PostgreSQL中的栅格数据,给定经纬度范围,实现栅格数据的导出。

查询SQL语句如下:

SELECT ST_Union(ST_Clip(rast,geom)) AS rast FROM public.alt CROSS JOIN

ST_MakeEnvelope(90,60,120,45,4326) As geom WHERE ST_Intersects(rast,geom);

其中PostGIS函数的含义如下:

ST_MakeEnvelope:函数用于构造一个矩形范围,其参数分别是最小X值,最小Y值,最大X值,最大Y值和坐标系代码

ST_Intersects:函数用于选择出与geom矩形相交的栅格Tiles

ST_Clip:函数用于将选择出来的Tiles进行裁剪,得到geom范围的数据

ST_Union:函数用于聚合选择出来的数据为一个整体

导出TIF格式的SQL语句如下:

SELECT ST_AsTIFF(rast, 'LZW') FROM (SELECT ST_Union(ST_Clip(rast,geom)) AS rast FROM public.alt

CROSS JOIN ST_MakeEnvelope(90,60,120,45,4326) As geom WHERE ST_Intersects(rast,geom)) AS rasttiff;

完整的Python代码如下:

import psycopg2

# Connect to an existing database

conn = psycopg2.connect('host=localhost port=5432 user=postgres password=123456 dbname=rastertest')

# Open a cursor to perform database operations

cur = conn.cursor()

strsql = "SELECT ST_AsTIFF(rast, 'LZW') " \

"FROM (" \

"SELECT ST_Union(ST_Clip(rast,geom)) AS rast " \

"FROM " \

"alt " \

"CROSS JOIN " \

"ST_MakeEnvelope(90,60,120,45,4326) As geom " \

"WHERE ST_Intersects(rast,geom)" \

") AS rasttiff"

cur.execute(strsql)

# Fetch data as Python objects

rasttiff = cur.fetchone()

# Write data to file

if rasttiff is not None:

open('E:/personalfile/cs1/alt_ex1.tif', 'wb').write(str(rasttiff[0]))

# Close communication with the database

cur.close()

conn.close()

具体裁切导出效果如下图所示:

影像导出效果图.png

参考原文链接:

http://blog.csdn.net/theonegis/article/details/55211846

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值