Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过psycopg2访问表格的光栅列_Python_Postgresql_Postgis_Postgresql 9.4 - Fatal编程技术网

Python 通过psycopg2访问表格的光栅列

Python 通过psycopg2访问表格的光栅列,python,postgresql,postgis,postgresql-9.4,Python,Postgresql,Postgis,Postgresql 9.4,我在PostGIS中有一个带有多个光栅的表,它们具有相同的空间参考,但TIFF来自不同的日期。现在我尝试访问列“rast”来检测行之间的更改。我的目标是从第二行减去第一行的像素值,然后从第三行的像素值中减去,依此类推 如何迭代行并从下一行中减去每行的像素值 [在此处输入图像描述][1] #!/usr/bin/python # -*- coding: utf-8 -*- import psycopg2 import sys conn = None conn = psycopg2.connec

我在PostGIS中有一个带有多个光栅的表,它们具有相同的空间参考,但TIFF来自不同的日期。现在我尝试访问列“rast”来检测行之间的更改。我的目标是从第二行减去第一行的像素值,然后从第三行的像素值中减去,依此类推

如何迭代行并从下一行中减去每行的像素值

[在此处输入图像描述][1]

#!/usr/bin/python
# -*- coding: utf-8 -*-

import psycopg2
import sys

conn = None

conn = psycopg2.connect(database="postgres", user="postgres",host="localhost", password="password")
cur = conn.cursor()

cur.execute('SELECT * from my_table')

while True:

   row = cur.fetchone()

   if row == None:
     break

   rast_col = row[1]
我通过以下命令导入了几个光栅,它们具有相同的空间面积,但日期不同:

C:\Program Files\PostgreSQL\9.6\bin>raster2pgsql -s 4326 -F -I "C:\User\Desktop\Data\*.tif" public.all_data|psql -U User -h localhost -p 5432
这是在导入数据[1]后在postgresql中创建的表:

每行表示一个“TIFF”格式的光栅图像。列“rast”包含像素值。我的目标是计算相邻行之间的差异…与滞后窗口函数相同,但它不适用于光栅列类型

我唯一解决的问题是计算两个光栅图像之间的差异。为此,我必须为每一行创建一个单独的表。你可以在下面看到:

CREATE TABLE table1 AS SELECT * FROM my_tabke WHERE rid=1;
CREATE TABLE table2 AS SELECT * FROM my_table WHERE rid=2;
然后我在两个表上做了一个简单的MapAlgebra操作,如下所示:

SELECT ST_MapAlgebra(t1.rast,t2.rast, '([rast1]-[rast2])') AS rast INTO diffrence FROM table1 t1, table2 t2;
但这只是两个光栅之间的差异,对于MapAlgebra操作,我必须为每个光栅图像创建额外的表。但是我在一个表中有40多个光栅图像,我想检测表之间所有相邻行的变化。

窗口功能应该在光栅列上工作,就像在任何旧列上一样。它只是从窗口帧中当前偏移量之前的行中选择值

当然,不能只使用Postgresql运算符减去光栅,至少不能不重载

为了计算由
rid
排序的相邻光栅之间的差异,应将滞后光栅作为参数传递给
ST_mapalgerage

SELECT ST_MapAlgebra(rast, lag(rast) OVER (ORDER BY rid DESC),
                     '[rast1] - [rast2]')
FROM my_table;
由于
lag();2在1之前,等等。这也是因为默认情况下是一个窗口框架,这比使用
lead()
和选择当前行后面的行的frame子句更容易

免责声明


我没有使用光栅,您可能需要微调查询以满足您的特定需求。

您可能正在寻找类似的内容:?是的,可能是,但我无法解决它。。。有没有办法循环“rast”列中的像素值并计算每行之间的差异?@Ilja Eveilä您下面的链接是一个很好的提示,但在我的例子中,我使用的是“rast”列类型。这就是为什么我会收到一条错误消息的原因……对我来说,这可能有助于你寻找两个光栅之间的差异。尽管我对PostGIS有点熟悉,但我从未使用过光栅。顺便说一句,如果你能包括你的表定义,以及更多的“光栅按…排序”等内容,这将有助于你获得好的答案。我尝试了你的例子,但我收到以下错误消息-->错误:windows函数lag需要over子句。很抱歉,忘记将over子句放在它所属的位置(使用
lag()
调用)。