【问题标题】:GDAL ReadAsArray does not ignore NoData ValueGDAL ReadAsArray 不会忽略 NoData 值
【发布时间】:2013-02-28 11:22:16
【问题描述】:

我正在尝试将 TIFF 的波段读取为数组。问题是 GDAL 不会忽略 NoData 值。有没有办法告诉GDAL忽略它?

当我计算统计数据时,GDAL 会忽略 NoData 值。

import os, sys, gdal, ogr, numpy
from gdalconst import *

# register all of the drivers
gdal.AllRegister()

# open the image
ds = gdal.Open('test_slope.tif', GA_ReadOnly)

# get image size
rows = ds.RasterYSize
cols = ds.RasterXSize
bands = ds.RasterCount

# Set NoData Value
band = ds.GetRasterBand(1)
ndv = -3.4028230607371e+38
band.SetNoDataValue(ndv)

# Get Statistics
stats = band.ComputeStatistics(0)
print stats

# read in band as array
bandList = []
band.GetNoDataValue()
data = band.ReadAsArray(0, 0, cols, rows)
print data


>>> 
[0.0, 126.59918975830078, 25.757117870945123, 15.399812314100501]
[[ -3.40282306e+38  -3.40282306e+38  -3.40282306e+38 ...,  -3.40282306e+38
   -3.40282306e+38  -3.40282306e+38]
 [ -3.40282306e+38  -3.40282306e+38  -3.40282306e+38 ...,  -3.40282306e+38
   -3.40282306e+38  -3.40282306e+38]
 [ -3.40282306e+38  -3.40282306e+38  -3.40282306e+38 ...,  -3.40282306e+38
   -3.40282306e+38  -3.40282306e+38]
 ..., 
 [ -3.40282306e+38  -3.40282306e+38  -3.40282306e+38 ...,  -3.40282306e+38
   -3.40282306e+38  -3.40282306e+38]
 [ -3.40282306e+38  -3.40282306e+38  -3.40282306e+38 ...,  -3.40282306e+38
   -3.40282306e+38  -3.40282306e+38]
 [ -3.40282306e+38  -3.40282306e+38  -3.40282306e+38 ...,  -3.40282306e+38
   -3.40282306e+38  -3.40282306e+38]]
>>> 

【问题讨论】:

    标签: python gdal no-data


    【解决方案1】:

    我相信您可以从您的numpy.ndarray 创建一个numpy.MaskedArray

    import numpy as np
    import numpy.ma as ma
    
    ndv = -3.40282306e+38
    
    data = np.array([[0.0, 126.59918975830078, 25.757117870945123, 15.399812314100501],
                    [-3.40282306e+38, -3.40282306e+38, -3.40282306e+38, -3.40282306e+38]])
    
    masked_data = ma.masked_where(data == ndv, data)
    print masked_data
    

    结果:

    [[0.0 126.599189758 25.7571178709 15.3998123141]
    [-- -- -- --]]
    

    numpya combination of a numpy.ndarray and a mask is used to allow for handling of missing data

    【讨论】:

      猜你喜欢
      • 2018-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-18
      相关资源
      最近更新 更多