当前位置:   article > 正文

【Python&RS】Rasterio库安装+基础函数使用教程_rasterio安装

rasterio安装

        Rasterio是一个Python库,专门用于栅格数据的读写操作。它支持多种栅格数据格式,如GeoTIFF、ENVI和HDF5,为处理和分析栅格数据提供了强大的工具。RasterIO适用于各种栅格数据应用,如卫星遥感、地图制作等。通过RasterIO,用户可以方便地读取、写入和操作栅格数据,提高数据处理效率。此外,RasterIO还支持自定义栅格数据类型和变换操作,具有很高的灵活性和可扩展性。总的来说,RasterIO是一个功能强大、易用的栅格数据处理库,对于遥感、地理信息系统等领域的数据处理和分析具有重要意义。

1 Rasterio库安装

        Rasterio依赖于pyproj、Shapely、GDAL、Fiona、geopandas、rasterio等库,如果你之前安装过GDAL就大可不必担心,因为GDAL的使用包揽了这些库。如果没有我建议直接安装rasterio库,然后报错什么库就安装什么库。注意自己的Python版本号!!!下载地址:Rasterio库

2 导入常用函数

        这些都是我后面代码需要使用到的函数,注意要导入,别到时候报错。

  1. import os
  2. import rasterio
  3. from rasterio.plot import show
  4. from rasterio.windows import Window

3 基础操作代码展示

3.1 获取影像基本信息

  1. def Get_data(filepath):
  2. ds = rasterio.open(filepath) # 打开文件
  3. ds_bands = ds.count # 波段数
  4. ds_width = ds.width # 宽度
  5. ds_height = ds.height # 高度
  6. ds_bounds = ds.bounds # 四至范围
  7. ds_geo = ds.transform # 仿射地理变换参数
  8. ds_prj = ds.crs # 投影坐标系
  9. # print(ds.crs.wkt)
  10. # ds.nodatavals # 缺失值
  11. # ds.dirver # 数据格式
  12. print("影像的宽度为:" + str(ds_width))
  13. print("影像的高度为:" + str(ds_height))
  14. print("仿射地理变换参数为:" + str(ds_geo))
  15. print("投影坐标系为:" + str(ds_prj))

3.2 读写数据

        这里的读写其实都和GDAL库差不多。读取的话都是读成数组,然后可以选择波段和读取范围;保存时都是选择波段数、仿射地理变换参数和投影信息。

  1. def Read_Write_data(filepath):
  2. ds = rasterio.open(filepath)
  3. bands = ds.read() # 以数组的形式读取所有波段
  4. band1 = ds.read(1, window=Window(0, 0, 512, 256)) # 以数组的形式打开波段1读取512*256
  5. new_dataset = rasterio.open(
  6. '/tmp/new.tif',
  7. 'w',
  8. driver='GTiff',
  9. height=band1.shape[0],
  10. width=band1.shape[1],
  11. count=1,
  12. dtype=band1.dtype,
  13. crs='+proj=latlong', # ds.crs
  14. transform=ds.transform,
  15. )
  16. new_dataset.write(band1, 1) # 将band1的值写入new_dataset的第一个波段

3.3 可视化影像

        这里是Rasterio自己集成了一个显示函数,不用我们自己再去使用matplotlib库绘制影像了。我这里就展示了一种用法,官方给了好几个demo,大家有兴趣可以自己去看。

  1. def Show_data(filepath):
  2. ds = rasterio.open(filepath)
  3. show(ds, transform=ds.transform)

3.4 计算NDVI

        这里给大家介绍一个经典案例,就是NDVI的计算。通过这个应该很容易就能理解Rasterio库的数据结构了。

  1. def Get_NDVI(filepath):
  2. ds = rasterio.open(filepath)
  3. red = ds.read(4).astype('float64')
  4. nir_red = ds.read(5).astype('float64')
  5. ndvi = (nir_red - red) / (nir_red + red)
  6. new_dataset = rasterio.open('ndvi.tif',
  7. 'w',
  8. driver='GTiff',
  9. height=ds.height,
  10. width=ds.width,
  11. count=1,
  12. dtype='float64',
  13. crs=ds.crs,
  14. transform=ds.transform)
  15. new_dataset.write(ndvi, 1)
  16. new_dataset.close()

4 完整代码

  1. # -*- coding: utf-8 -*-
  2. """
  3. @Time : 2023/10/19 11:20
  4. @Auth : RS迷途小书童
  5. @File :Rasterio Functions.py
  6. @IDE :PyCharm
  7. @Purpose:rasterio库常用操作
  8. """
  9. import os
  10. import rasterio
  11. from rasterio.plot import show
  12. from rasterio.windows import Window
  13. def Get_data(filepath):
  14. ds = rasterio.open(filepath) # 打开文件
  15. ds_bands = ds.count # 波段数
  16. ds_width = ds.width # 宽度
  17. ds_height = ds.height # 高度
  18. ds_bounds = ds.bounds # 四至范围
  19. ds_geo = ds.transform # 仿射地理变换参数
  20. ds_prj = ds.crs # 投影坐标系
  21. # print(ds.crs.wkt)
  22. # ds.nodatavals # 缺失值
  23. # ds.dirver # 数据格式
  24. print("影像的宽度为:" + str(ds_width))
  25. print("影像的高度为:" + str(ds_height))
  26. print("仿射地理变换参数为:" + str(ds_geo))
  27. print("投影坐标系为:" + str(ds_prj))
  28. def Read_Write_data(filepath):
  29. ds = rasterio.open(filepath)
  30. bands = ds.read() # 以数组的形式读取所有波段
  31. band1 = ds.read(1, window=Window(0, 0, 512, 256)) # 以数组的形式打开波段1读取512*256
  32. new_dataset = rasterio.open(
  33. '/tmp/new.tif',
  34. 'w',
  35. driver='GTiff',
  36. height=band1.shape[0],
  37. width=band1.shape[1],
  38. count=1,
  39. dtype=band1.dtype,
  40. crs='+proj=latlong', # ds.crs
  41. transform=ds.transform,
  42. )
  43. new_dataset.write(band1, 1) # 将band1的值写入new_dataset的第一个波段
  44. def Show_data(filepath):
  45. ds = rasterio.open(filepath)
  46. show(ds, transform=ds.transform)
  47. def Get_NDVI(filepath):
  48. ds = rasterio.open(filepath)
  49. red = ds.read(4).astype('float64')
  50. nir_red = ds.read(5).astype('float64')
  51. ndvi = (nir_red - red) / (nir_red + red)
  52. new_dataset = rasterio.open('ndvi.tif',
  53. 'w',
  54. driver='GTiff',
  55. height=ds.height,
  56. width=ds.width,
  57. count=1,
  58. dtype='float64',
  59. crs=ds.crs,
  60. transform=ds.transform)
  61. new_dataset.write(ndvi, 1)
  62. new_dataset.close()
  63. if __name__ == "__main__":
  64. filepath1 = r'B:\Personal\Rasterio_try/46_22.tif'

        总结来说,Rasterio库是一个很好的二次封装的库,可以更方便快捷地处理遥感栅格数据。但我个人使用GDAL习惯了,所以不怎么用Rasterio库,如果大家刚开始学习使用Python去处理地理空间数据,那么Rasterio库是一个很好的推荐。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/71090
推荐阅读
相关标签
  

闽ICP备14008679号