我在PostGIS中有一個表格,其中有幾個柵格,它們具有相同的空間參考,但tiff來自不同的日期。現在我試圖訪問列「rast」來檢測行之間的變化。我的目標是從第二行減去第一行的像素值,然後從第三行的像素值減去像素值,依此類推。通過psycopg2訪問表格的柵格列
如何遍歷行並從下一行中減去每行的像素值?
[此處輸入圖像的描述] [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
這是表是在導入數據後在postgresql中創建的[1]:https://i.stack.imgur.com/uBHX3.jpg
每行代表一個「TIFF」格式的光柵圖像。列「rast」包含像素值。我的目的是計算相鄰行之間的差異...像滯後窗函數一樣,但它不適用於柵格列類型...
唯一的,我修正的是計算兩個之間的差異光柵圖像。爲此,我必須爲每一行創建一個單獨的表格。 U可以在下面看到它:
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個光柵圖像,我想檢測我的表格之間所有相鄰行的變化。
可能你正在尋找這樣的東西:http://stackoverflow.com/questions/41682882/find-diff-between-2-numbers-in-different-rows? –
是的,它可能是,但我無法解決它...是否有一種方法來循環列「像素」列中的像素值,並計算每行之間的差異? – santa
@IjajaEveilä您的以下鏈接http://stackoverflow.com/questions/24691462/postgresql-calculate-difference-between-rows是一個很好的提示,但在我的情況下,我正在使用「rast」列類型。所以這就是爲什麼我得到一個錯誤信息的原因... – santa