近来学习植物表型计算相关程序,涉及到计算株高、覆盖度、植被指数和CV,其中接触到了一些新的python库,这里进行了相关资料的查阅,并对相关代码进行了学习,总结如下
(一)OSgeo与GDAL
(1)官网链接:开源地理空间基金会中文分会,OSGeo中文分会,OSGeo中国中心,地理空间数据共享,开放地理空间实验室
开源空间信息基金会(Open Source Geospatial Foundation,简称OSGeo)是一个全球性非营利性组织,目标是支持全球性的合作,建立和推广高品质的空间信息开源软件。 OSGeo中国中心是由国家遥感中心发起、Autodesk中国有限公司。
(2)Python与开源GIS
官网链接Python与开源GIS:数据处理、空间分析与地图制图 — 首页
(3)GIS概念
GIS 是一门综合性学科,其结合了地理学与地图学,已经广泛地应用在不同的领域,是用于输入、存储、查询、分析和显示地理数据的计算机系统,它可以把地图这种独特的视觉化效果和地理分析功能与一般的数据库操作(如查询和统计分析等) 集成在一起。
(4)使用GDAL操作栅格数据
没有一套高效率的数据转换模型和类库就很难完成异构数据的集成与融合,正是有了 GDAL/OGR,构建在其之上的各类地理信息软件工具才有了生命力。
1.GDAL概念
最开始 GDAL 是一个用来处理栅格空间数据的类库,OGR 则是用来处理矢量数据的。后来,这两个库合并成为一个库,在下载安装的时候,都是使用 GDAL 这一个名字。在《Python与开源GIS: 数据处理、空间分析与地图制图》一书中,为了避免这种混乱,将这个组合的库称为 GDAL/OGR,使用 GDAL 来表示处理栅格数据的库,使用 OGR 来表示处理矢量数据的库。
2.GDAL库简介
GDAL 设计用来处理各种栅格地理数据格式的类库。它包括读取、写入、转换及处理各种栅格数据格式。GDAL 使用了一个单一的抽象数据模型来支持大多数的栅格数据格式。
GDAL 库的 Python 版和其他的 Python 库结合得很好,比如可以用常用的NumPy 库进行数据的处理与分析,以及与本书后续章节中的各种类库组合使用。
3.GDAL体系结构
GDAL 使用抽象数据模型 (abstract data model)来解析它所支持的数据格式抽象数据模型包括数据集 (dataset)、标系统 (coordinate system)、仿射地理变换 (affine geo transform)、地面控制点(GCP)、元数据(metadata)、子数据集域subdatasets domain)、图像结构域(image_structure domain)、有理多项式系数域RPC (rational polynomial coeffcient) domain ]、影像域(imagery domain,一般用于遥感)、XML 域(XML domains)、栅格波段(raster band)、颜色表 (color table)及快视图(overviews)。
4.GDAL支持的数据结构
在 GDAL 1.9.0 中,GDAL 支持 120 多种栅格数据格式,而在未来版本中,支持的数据格式会达到 200 种。在 GDAL 默认的编译选项设置下,一部分数据格式直接创建文件,并对它们进行几何配准。
表 2.1 列出了 GDAL 支持的最常见的一些格数据格式及其在 GDAL 中的编码。注意,这些编码具有唯一性,并且在 GDAL 数据读取与写入时会用到。
(5)osgeo python库的安装
这里可以看到直接使用pip install命令安装并不能安装
pycharm的解释器路径中添加也没有
查阅资料发现并不是直接安装osgeo,而是需要使用下载gdal的whl文件进入文件路径路径安装
1.下载gdal
gdal官方链接:https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal
根本我的python版本,我选择cp38版本和64位
2.安装gdl
1)下载好的文件需要放到python3.8的安装路径下,不知道可以去Pycharm中的解释器中查看
2)然后在当前路径下,打开cmd窗口
3)输入命令:pip install GDAL-3.4.3-cp38-cp38-win_amd64.whl 注:这里的文件名需要替换为你自己版本的文件名。
4)查看代码中的库调用,发现已经成功了
(二)株高代码的学习
整体思路:得到遥感的DEM数据,用后阶段的DEM数据减去前阶段DEM数据,得到高程差,进而对差数据可视化显示
1.python包中的set_legend
set_legend:matplotlib中创建图例的库
这里参数的详解
img_show:
为了弄明白这个参数,这里打印了一下img_show的类型,发现是一个多维数组
这里明白了是遥感图映像处理后的数组
lute:
颜色查找表,是一个RGB数值列表
names和strs:
株高类型的名字和图标的名字
beilu:
图标的倍率,要是把图标的倍率改成3,可以看见明显的区别
2.株高计算的主要功能代码
1)提取两个tif文件数据
为了搞清楚上述代码的作用,我这里打印了一下返回值的类型,发现一个是多维数组,一个是元组
说明该函数的作用如下:
gdal打开两个tif文件,并分别提取数据作为np格式
2)矩阵相减的函数
3)对高程数据进行转换,转换为0-255的uint8格式
4)保存tif格式的函数
5)掩膜处理
获得的掩膜图