【616】安装 GDAL(rasterio)

参考:

  Windows 电脑很容易,但是 Mac 很不好装(目前还没装上,可能是系统版本,可能是 python 版本)

Windows 版:

MacOS 版:

  未完待续

参考:使用Rasterio读取栅格数据

参考:rasterio 官方 Tutorial

  虽然没装上 GDAL,不过找到了替代方案 rasterio,安装超级简单,直接通过 pip install rasterio 即可

  相关功能说明:

  • 数据读取:ds = rasterio.open

  • 波段数目:ds.count

  • 影像宽度:ds.width

  • 影像高度:ds.height

  • 地理范围:ds.bounds,可以获取四个顶点的经纬度 

    • BoundingBox(left=121.5971892, bottom=31.2733359001, right=121.5989442, top=31.2750909001)
    • ds.bounds.left
  • 获取波段:band1 = ds.read(1), band2 = ds.read(2), band3 = ds.read(3), 获取第 一/二/三 个波段数据,跟GDAL一样索引从1开始,直接获得 numpy.ndarray 类型的二维数组表示,如果 read() 函数不加参数,则得到所有波段(第一个维度是波段,直接输入神经网络会有问题,一般是波段放在第三维)

  • ds.transform:返回一个 6 个值的 tuple。

    • Affine(2.7000000000043656e-06, 0.0, 121.5971892,
             0.0, -2.6999999999988997e-06, 31.2750909001)
    • # transform[0]: 影像宽度方向上的分辨率(经度范围/像素个数),经度往右/东 变大,因此是正

    • # transform[1]: 旋转,0 表示上面为北方

    • # transform[2]: 左上角像素经度

    • # transform[3]: 旋转,0 表示上面为北方

    • # transform[4]: 影像高度方向上的分辨率(纬度范围/像素个数),纬度往下/南 变小,因此是负

    • # transform[5]: 左上角像素纬度

    • # 从左边的经度值推导出右边的经度值
      ds.transform[2] + ds.transform[0] * ds.width == ds.bounds.right 
      # True
      
      # 从上面的纬度值推导出下面的纬度值
      ds.transform[5] + ds.transform[4] * ds.height == ds.bounds.bottom
      # True
  • 通过放射计算,可以直接计算指定像素对的经纬度信息,与下面的操作正好相反

    • # 左上角的经纬度
      ds.transform * (0, 0) 
      
      # (121.5971892, 31.2750909001)
      
      # 右下角的经纬度
      ds.transform * (ds.width, ds.height)
      
      # (121.5989442, 31.2733359001)
  • ds.index(121.5989442, 31.2733359001):获取输入经纬度对应的图像像素对,可以用于矢量转栅格的相应计算

  • 图像显示:

    • # 可以直接显示 uint16 的图像(很多数据点超过255,不能直接显示)
      # 其他正常的显示需要 uint8 的图像
      
      from rasterio.plot import show 
      show(ds) 
      
原文地址:https://www.cnblogs.com/alex-bn-lee/p/15033900.html