前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PostGIS查询指定范围的数据

PostGIS查询指定范围的数据

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

对于上一篇PostGIS批量导入栅格数据中导入的气温数据,如何查询指定范围的气温呢? 比如,给定了经纬度范围,如何取出给定月份的数据? 下面的SQL代码给出了查询方法:

SELECT ST_Union(ST_Clip(rast,geom)) AS rast
FROM
staging.tmean_19
CROSS JOIN
ST_MakeEnvelope(3.87,73.67,53.55,135.05,4326) As geom
WHERE ST_Intersects(rast,geom) AND month=1;

其中, ST_MakeEnvelope函数用于构造一个矩形范围,其参数分别是最小X值,最小Y值,最大X值,最大Y值和坐标系代码; ST_Intersects函数用于选择出与geom矩形相交的栅格Tiles; ST_Clip函数用于将选择出来的Tiles进行裁剪,得到geom范围的数据; ST_Union函数用于聚合选择出来的数据为一个整体; 上述的SQL返回的结果是raster类型的数据,如果想要将结果导出为TIFF格式的数据,SQL代码如下:

SELECT ST_AsTIFF(rast, 'LZW')
FROM (
SELECT ST_Union(ST_Clip(rast,geom)) AS rast
FROM
staging.tmean_19
CROSS JOIN
ST_MakeEnvelope(97.51,37.28,111.55,50.52,4326) As geom
WHERE month=1 AND ST_Intersects(rast,geom)
) AS rasttiff;

完整的Python代码如下:

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

import psycopg2

# Connect to an existing database
conn = psycopg2.connect('host=localhost port=5432 user=postgres password=post1231 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';")
strsql = "SELECT ST_AsTIFF(rast, 'LZW') " \
         "FROM (" \
         "SELECT ST_Union(ST_Clip(rast,geom)) AS rast " \
         "FROM " \
         "staging.tmean_19 " \
         "CROSS JOIN " \
         "ST_MakeEnvelope(97.51,37.28,111.55,50.52,4326) As geom " \
         "WHERE month=1 AND 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('/home/theone/Desktop/tmean1.tif', 'wb').write(str(rasttiff[0]))

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

我们可以在QGIS中查看结果,并和原图进行对比:

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档