PIE-SDK For C++打开长时间序列数据
1.功能简介
时间序列数据(time series data)是在不同时间上收集到的数据,这类数据是按时间顺序收集到的,用于所描述现象随时间变化的情况。当前随着遥感卫星技术日新月异的发展,遥感卫星的重访周期越来越短,外加历史数据的积累,产生了海量的遥感时间序列数据产品,这些数据真实地反映了地表在一段时间范围内的动态变化情况,成为了遥感影像信息提取和分析的重要数据参考。
[洞庭湖春、夏、秋、冬季影像图]
PIE支持长时间序列卫星影像数据的加载和动态显示,并且提供了便利的控制方式。
2. 功能实现说明
2.1. 实现思路及原理说明
第一步 |
获取数据(序列化栅格数据至少两个数据) |
第二步 |
将栅格图层添加至动画图层Animation对象中 |
第三步 |
将动画图层添加到地图中进行播放 |
2.2. 核心接口与方法
接口/类 |
方法 |
说明 |
SysCarto::AnimationLayer |
AddLayer() |
增加图层 |
Start() |
开始图层播放 |
|
Pause() |
暂停图层播放 |
|
Resume() |
继续播放 |
|
SetInterval(int msec) |
设置播放间隔 |
|
GetAnimationState |
获取当前的动画状态 |
2.3. 示例代码
项目名称 |
百度云盘地址下/PIE示例程序/03.数据加载/08.打开长时间序列数据 |
数据位置 |
百度云盘地址下/PIE示例数据/栅格数据/06.长时间序列数据 |
视频位置 |
百度云盘地址下/PIE视频教程/03.数据加载/08.打开长时间序列数据.avi |
示例代码 |
|
注:m_AnimationLayerPtr声明在头文件中
void PIEMainWindow::On_ActionAddSeriesData_Triggered(bool checked) { QString filter = "序列数据 (*.tif *.tiff *.img)"; QStringList lstFile = QFileDialog::getOpenFileNames(nullptr, "添加数据", "", filter); if (lstFile.count() < 1) return; m_AnimationLayerPtr = new SysCarto::AnimationLayer(); for each (QString _file in lstFile) { SysCarto::LayerPtr tempLayerPtr = SysCarto::LayerFactory::Instance()->CreateDefaultLayer(_file); if (tempLayerPtr!=nullptr) { SysCarto::RasterLayerPtr rasterLayerPtr = tempLayerPtr; SysCarto::RasterStretchColorRampRenderPtr stretchRender = rasterLayerPtr->GetRenderer(); stretchRender->SetStretchType(SysCarto::RasterStretch_PercentMinimumMaximum); stretchRender->SetLinearStretchPercent(2.0);
m_AnimationLayerPtr->AddLayer(tempLayerPtr); } } m_AnimationLayerPtr->SetName("事件序列图层"); m_pCurrentControl->GetMap()->AddLayer(m_AnimationLayerPtr); m_AnimationLayerPtr->SetInterval(500); m_AnimationLayerPtr->Start(); }
//暂停播放 void PIEMainWindow::On_ActionPause_Triggered(bool checked) { if (m_AnimationLayerPtr == nullptr) return; m_AnimationLayerPtr->Pause(); } //继续播放 void PIEMainWindow::On_ActionResume_Triggered(bool checked) { if (m_AnimationLayerPtr == nullptr) return; m_AnimationLayerPtr->Resume(); } //停止播放 void PIEMainWindow::On_ActionStop_Triggered(bool checked) { if (m_AnimationLayerPtr == nullptr) return; m_AnimationLayerPtr->Stop(); } |