私は、同じ空間参照を持ついくつかのラスタを持つPostGISにテーブルを持っていますが、ティファは異なる日付から来ています。今私は行間の変化を検出するために "rast"列にアクセスしようとしています。私の目的は、2行目から1行目のピクセル値を減算し、次に3行目のピクセル値からピクセル値を減算することです。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
これは表にはです
各行は、「TIFF」形式の1つのラスタイメージを表しています。データのインポート後にpostgresqlで作成されました。列「rast」にはピクセル値が含まれています。私の目的は、隣接する行の間の差異を計算することです...ラグウィンドウ関数のように同じですが、ラスタ列型では機能しません...
唯一のことは、2つの間のdiffrenceラスタ画像。そのためには、各行ごとに別のテーブルを作成する必要がありました。
CREATE TABLE table1 AS SELECT * FROM my_tabke WHERE rid=1;
CREATE TABLE table2 AS SELECT * FROM my_table WHERE rid=2;
をそして私はこのような両方のテーブルの上に簡単なMapAlgebra操作をした:Uは、以下のそれを見ることができます
SELECT ST_MapAlgebra(t1.rast,t2.rast, '([rast1]-[rast2])') AS rast INTO diffrence FROM table1 t1, table2 t2;
が、これは2つのラスタの間だけdiffrenceあり、かつMapAlgebra操作用のIラスターイメージごとに余分なテーブルを作成する必要がありました。しかし、40個のラスターイメージが1つのテーブルにあり、テーブル間の隣接するすべての行の変化を検出したいと考えています。
このようなものをお探しですか?http://stackoverflow.com/questions/41682882/find-diff-between-2-numbers-in-different-rows? –
はい、私はそれを解決できませんでした...列 "rast"のピクセル値をループし、各行間のdiffrenceを計算する方法はありますか? – santa
@IljaEveiläあなたの次のリンクhttp://stackoverflow.com/questions/24691462/postgresql-calculate-difference-betweenrowsは良いヒントでしたが、私の場合、私は "rast"型で作業しています。だからこそ、なぜ私はエラーメッセージを受け取るのですか... – santa