1.內(nèi)容介紹
基于已經(jīng)分類(lèi)的影像數(shù)據(jù)刘离,利用postgis提取不同類(lèi)別的像素值個(gè)數(shù)媳瞪,并通過(guò)albers等面積投影粘优,計(jì)算像素值面積仇味。實(shí)現(xiàn)影像數(shù)據(jù)不同類(lèi)別要素的面積統(tǒng)計(jì)分析呻顽。
2.ST_ValueCount提取函數(shù)
該函數(shù)返回一個(gè)記錄集,包括像素值和指定柵格(或柵格覆蓋)的指定波段的像素值在一個(gè)值集合內(nèi)的像素個(gè)數(shù)邪铲。如果沒(méi)有指定波段芬位,那么默認(rèn)是波段1。默認(rèn)也不統(tǒng)計(jì)值為NODATA的像素带到。像素值如果不是整數(shù)昧碉,那么像素值會(huì)進(jìn)行round四舍五入處理得到一個(gè)最接近的整數(shù)值。
具體應(yīng)用如下:
-- 查詢(xún)指定范圍內(nèi)柵格揽惹,指定波段被饿,指定像素值的數(shù)量
SELECT rid, ST_ValueCount(rast,2,100) As count
FROM test
WHERE ST_Intersects(rast,
ST_GeomFromText(’POLYGON((224486 892151,224486 892200,224706 892200,224706
892151,224486 892151))’,26986)
);
3.PostGIS存儲(chǔ)過(guò)程
具體存儲(chǔ)過(guò)程如下所示:
--提取存儲(chǔ)過(guò)程
CREATE OR REPLACE FUNCTION sjycount2(band int, pixValue int, region varchar)
returns setof record as
$BODY$
DECLARE
rd RECORD;
asql varchar;
BEGIN
asql = 'SELECT sum(ST_ValueCount(rast,'''|| band ||''','''|| pixValue ||''')) As count FROM test WHERE ST_Intersects(rast,(select geom from xingzheng where name = '''|| region ||'''));';
EXECUTE asql;
return;
END;
$BODY$ LANGUAGE plpgsql VOLATILE