1.功能简介
GIS将地理空间数据表示为矢量数据和栅格数据。矢量数据模型使用点、线和多边形来表示具有清晰空间位置和边界的空间要素,如控制点、河流和宗地等,每个要素被赋予一个ID,以便与其属性相关联。栅格数据模型使用一个格网和格网元胞(像元)代表空间要素,元胞值表示该元胞位置的空间要素属性。栅格数据模型适用于表示连续的要素,如海拔和降水量。
[矢量数据模型] [栅格数据模型]
PIE支持多种矢量数据的打开,下面我们就介绍如何在PIE中打开栅格数据。
2.功能实现说明
2.1栅格数据介绍
常见的栅格数据文件格式包括tiff、tif、img、dat等,它们采用文件的方式存储相关信息,一个Tiff数据的文件结构如下所示(GF1数据为例):
[Tiff数据文件结构]
编号 | 后缀 | 文件说明 |
1 | .tiff | 基本文件,存储栅格数据的像素、坐标系、坐标等信息; |
2 | .jpg | 可选文件,栅格数据的示意图; |
3 | .rpb | 可选文件,坐标参数文件; |
4 | .xml | 可选文件,数据相关信息文件; |
5 | .ovr/aux.xml | 可选文件,栅格数据金字塔文件; |
[Tiff数据文件结构说明]
2.2实现思路及原理说明
第一步 | 通过文件路径打开栅格数据集 |
第二步 | 通过栅格数据集创建栅格图层 |
2.3核心接口与方法
接口/类 | 方法 | 说明 |
SysDataSource::DatasetFactory | OpenRasterDataset | 打开栅格数据集 |
SysCarto::LayerFactory | CreateDefaultRasterLayer | 创建栅格图层 |
2.4示例代码
项目路径 | 百度云盘地址下/PIE示例程序/03.数据加载/02.打开栅格数据 |
数据路径 | 百度云盘地址下/PIE示例数据/栅格数据/01.GF1/GF1_PMS1_E116.5_N39.4_20131127_L1A0000117600/xxx.tif |
视频路径 | 百度云盘地址下/PIE视频教程/03.数据加载/02.打开栅格数据.avi |
示例代码 | |
方法(一) QStringfilter = "Raster Files (*.tif *.tiff *.img *.bmp *.jpg *.ldf *.dat *.1bd *.1b);;S57 Files (*.000);;HDF Files (*.hdf *.h5);;NC Files (*.nc);;All Files (*.*)"; QStringListlstFile = QFileDialog::getOpenFileNames(nullptr, "添加数据", "", filter); if (lstFile.count() < 1) return; //直接创建layer进行添加 QList<SysCarto::LayerPtr> lstLayers = SysCarto::LayerFactory::CreateDefaultLayers(lstFile); m_ptrHookHelper->GetFocusMap()->AddLayers(lstLayers); m_ptrHookHelper->GetActiveView()->Refresh();
方法(二) QStringfilter = "Raster Files (*.tif *.tiff *.img *.bmp *.jpg *.ldf *.dat *.1bd *.1b);;S57 Files (*.000);;HDF Files (*.hdf *.h5);;NC Files (*.nc);;All Files (*.*)"; QStringListlstFile = QFileDialog::getOpenFileNames(nullptr, "添加数据", "", filter); if (lstFile.count() < 1) return; foreach (QString_fileinlstFile) { SysDataSource::RasterDatasetPtrrasterDatasetPtr = SysDataSource::DatasetFactory::Instance()->OpenRasterDataset(_file, SysDataSource::OpenMode::GA_ReadOnly); if (rasterDatasetPtr!=nullptr) { SysCarto::RasterLayerPtrrasterLayerPtr = SysCarto::LayerFactory::Instance()->CreateDefaultRasterLayer(rasterDatasetPtr); if (rasterLayerPtr!=nullptr) { m_ptrHookHelper->GetFocusMap()->AddLayer(rasterLayerPtr); } } m_ptrHookHelper->GetActiveView()->Refresh(); } |