1. 程式人生 > >ArcGIS柵格資料SetNull IsNull Con函式

ArcGIS柵格資料SetNull IsNull Con函式

當兩個柵格進行疊加,有時會有一部分沒有資料,即用identify點選該區域,Value為NoData,而不是像其他非空區域一樣有值。如果不進行處理的話,nodata資料跟其他圖層做運算是會變為nodata。所以nodata區域要賦予0值,因為nodata任何數=nodata,因此當需要對柵格空值資料賦值時,要採用條件查詢函式將NoData的地方進行賦值。
以下以arcgis10.0為例:
(1)方法是ArcTools->Spatial AnalystTools->Map Algebra
(2)輸入演算法表示式為:CON(ISNULL([raster]),0,[raster])。其中[raster]是你要處理的柵格圖。
          該函式解釋如下:
                            首先,isnull 函式是判斷當前是否為null,即nodata,如果是則範圍1,否則返回0;
                            其次,CON函式是一個條件函式(condition),他的引數一般有3個。第一個是包含了0或者1的邏輯圖層,就如isnull返回的結果一樣,第二個引數是指的滿足條
                            件時你要賦的值,該例子中就是說滿足的我賦值為0,。那不滿足的賦的值就是第三個引數了,我們這個例子想保留原值,所以直接把該圖層放進去即可。             注意:在執行時一定首先在環境變數中設定處理範圍,其範圍選擇較大的那個圖層,這樣會自動生成一個以輸入柵格影象的外接長方形為範圍的柵格影象,非空的地方為柵格值,   NoData的地方為0。
(3)如果需要賦值為0的NoData區域大於這個外接長方形,可在Single OutputMap Algebra對話方塊
     Environment->Generalsetting->Extent中設定你所需要的mask。
(4)然後就可以直接用spatial analysis->raster calculate進行計算了。
補充:con函式可以把特定的柵格值設定為某一個值。
     setnull函式可將特定的柵格值賦值為空值。
    setnull([raster==1],[raster]),將raster中值為1的資料賦為空,其他保留原值 mask=IsNull("SmallRegion.tif")   設定非空區域為0,空值區域為1。
SetNull("mask"==0,1)        設定掩膜層中值為0的為nodata,而其餘 的為1
SetNull("mask"==0,"mask")   設定mask圖層中值為0的為nodata,而其餘區域為原始資料。