PIE SDK打开静止卫星数据
1. 功能简介
静止卫星是位于地球赤道上空约3.58万km处,与地面始终保持相对静止的卫星,静止卫星的特点是覆盖区域广,具有很强的机动灵活性,能够对特定区域进行分钟级高重复观测,可快速监测灾害目标的动态变化。目前风云2系列、风云4系列、葵花(Himawari)系列、高分4卫星均为静止卫星。
[静止卫星位置示意图] [卫星运行轨迹图]
[FY2G数据成像图] [GF4数据成像图]
PIE支持静止卫星数据的显示和浏览,同时提供了针对常用静止卫星数据显示的优化方案,下面以FY4A数据为例来进行介绍。
2. 功能实现说明
2.1. FY4A数据介绍
[FY4A数据成像图]
FY4A卫星是气象卫星,其数据采用HDF方式存储,包括4000、2000、1000、500四种分辨率的数据,不同分辨率数据包括不同的通道。其各通道均为默认标称投影的全圆盘的数据,其星下点和卫星姿态等信息均存储中HDF的对应数据集下。
[FY4A数据文件截图]
[HDF Explorer查看FY4A的4000分辨率数据]
HDF数据是采用了高效率压缩的数据,实现了高效的存储、分发。但却造成了数据的显示浏览缓慢(每次数据浏览,都需要从压缩文件中解压出原始数据,再获取到要显示浏览的数据),并且整个过程会占用大量的内存资源,为了保证数据的高效浏览效率,我们建议将HDF中的各通道数据生成一份支持快速浏览查看的tiff本地缓存数据,以满足浏览查看的需求。
下面我们以FY4A 4000m数据的NOMChannel13通道为例,来演示如何完成对FY4A数据的快速读取、浏览。
2.2. 实现思路及原理说明
读取静止卫星的数据的思路为把静止卫星数据中的对应通道(NOMChannel13)保存为一份本地的栅格数据,再通过对栅格数据的浏览,完成对静止卫星数据的浏览。
第一步 |
打开静止卫星数据为多数据集 |
第二步 |
获取指定通道的栅格数据集 |
第三步 |
读取第二步中的数据集的数据至内存中 |
第四步 |
创建与静止卫星同数据类型、同宽高、同波段数的目标栅格文件 |
第五步 |
将数据写入目标栅格数据文件 |
第六步 |
对目标栅格数据赋值空间参考和六参数 |
2.3. 核心接口与方法
接口/类 |
方法 |
说明 |
DataSource.DatasetFactory |
OpenDataset |
打开数据集 |
CreateRasterDataset |
创建栅格数据集 |
|
DataSource.IRasterDataset |
Read |
将栅格数据读取至内存中 |
Write |
将内存数据写入至栅格数据中 |
2.4 示例代码
项目路径 |
百度云盘地址下/PIE示例程序/03.数据加载/05.打开静止卫星数据 |
数据路径 |
百度云盘地址下/PIE示例数据/栅格数据/00.FY/FY4A/**.tif |
视频路径 |
百度云盘地址下/PIE视频教程/03.数据加载/05.打开静止卫星数据.avi |
示例代码 |
|
![]() ![]() 1 /// <summary> 2 /// 加载静止卫星数据 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 private void toolStripButton_AddStatic_Click(object sender, EventArgs e) 7 { 8 OpenFileDialog openFile = new OpenFileDialog(); 9 openFile.Filter = "HDF数据|*.hdf"; 10 if (openFile.ShowDialog() != DialogResult.OK) return 11 12 string channelName = "NOMChannel13";//波段名称 13 string tempTif = System.IO.Path.GetDirectoryName(openFile.FileName) + "\\NOMChannel13.tiff";//输出tiff路径 14 ISpatialReference spatialReference = new ProjectedCoordinateSystem();//目标空间参考 15 spatialReference.ImportFromUserInput("+proj=geos +h=35785863 +a=6378137.0 +b=6356752.3 +lon_0=104.7 +no_defs"); 16 17 IRasterLayer rasterLayer = OpenStaticData(openFile.FileName, channelName, tempTif, spatialReference); 18 if (rasterLayer == null) return; 19 mapControlMain.FocusMap.AddLayer(rasterLayer as ILayer); 20 mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll); 21 } 22 23 /// <summary> 24 /// 打开风云4A、风云2G等静止卫星数据,读取指定波段数据为tiff 25 /// </summary> 26 /// <param name="filePath">hdf路径</param> 27 /// <param name="channelName">波段通道名称</param> 28 /// <param name="tiffPath">生成tiff路径</param> 29 /// <param name="spatialReference">空间参考</param> 30 /// <returns></returns> 31 private IRasterLayer OpenStaticData(string filePath, string channelName, string tiffPath, ISpatialReference spatialReference) 32 { 33 IRasterLayer rasteLayer = null; 34 //打开MultiDataset 35 IMultiDataset hdfDataset = PIE.DataSource.DatasetFactory.OpenDataset(filePath, OpenMode.ReadOnly) as IMultiDataset; 36 if (hdfDataset == null) return null; 37 //遍历,查找指定通道的Dataset,进行数据格式转换 38 for (int i = 0; i < hdfDataset.GetDatasetCount(); i++) 39 { 40 //1、获取操作数据 41 IDataset pTempDataset = hdfDataset.GetDataset(i); 42 if (pTempDataset.Name != channelName) continue; 43 IRasterDataset hdfRasterDatasetBand = pTempDataset as IRasterDataset; 44 45 //2、读写栅格数据形成新的栅格数据集 46 int nWidth = hdfRasterDatasetBand.GetRasterXSize(); 47 int nHeight = hdfRasterDatasetBand.GetRasterYSize(); 48 PixelDataType pixDataType = hdfRasterDatasetBand.GetRasterBand(0).GetRasterDataType(); 49 int bandCount = hdfRasterDatasetBand.GetBandCount(); 50 int[] bandMap = new int[bandCount]; 51 for (int j = 0; j < bandCount; j++) 52 { 53 bandMap[j] = j + 1; 54 } 55 UInt16[] arr = new UInt16[nWidth * nHeight * bandCount]; 56 bool IsOk = hdfRasterDatasetBand.Read(0, 0, nWidth, nHeight, arr, nWidth, nHeight, pixDataType, bandCount, bandMap); 57 58 IRasterDataset newRasterDataset = DatasetFactory.CreateRasterDataset(tiffPath, nWidth, nHeight, bandCount, pixDataType, "GTiff", null); 59 bool flag = newRasterDataset.Write(0, 0, nWidth, nHeight, arr, nWidth, nHeight, pixDataType, bandCount, bandMap); 60 newRasterDataset.SpatialReference = spatialReference; 61 newRasterDataset.GetRasterBand(0).SetNoDataValue(65535); 62 63 //六参数,根据输入坐标的不同需要进行动态设置,本示例代码以风云4A-4000m的数据作为实验数据。 64 int beginLineNum = 0; 65 int nReslution = 4000; 66 double[] geoTransform = new double[6]; 67 geoTransform[0] = -5496000; 68 geoTransform[1] = nReslution; 69 geoTransform[2] = 0; 70 geoTransform[3] = 5496000 - beginLineNum * nReslution; 71 geoTransform[4] = 0; 72 geoTransform[5] = -nReslution; 73 newRasterDataset.SetGeoTransform(geoTransform); 74 75 (newRasterDataset as IDisposable).Dispose(); 76 (hdfRasterDatasetBand as IDisposable).Dispose(); 77 rasteLayer = PIE.Carto.LayerFactory.CreateDefaultLayer(tiffPath) as IRasterLayer; 78 break; 79 } 80 return rasteLayer; 81 } View Code |
2.5 示例截图
转载于:https://www.cnblogs.com/PIESat/p/10143034.html
PIE SDK打开静止卫星数据相关推荐
- PIE SDK打开栅格数据
1. 功能简介 GIS将地理空间数据表示为矢量数据和栅格数据.矢量数据模型使用点.线和多边形来表示具有清晰空间位置和边界的空间要素,如控制点.河流和宗地等,每个要素被赋予一个ID,以便与其属性相关联. ...
- PIE SDK打开自定义栅格数据
1. 数据介绍 信息提取和解译的过程中,经常会生成一部分中间临时栅格数据,这些数据在执行完对应操作后就失去了存在的价值,针对这种情况,PIE增加了内存栅格数据集,来协助用户完成对自定义栅格数据的读取和 ...
- PIE SDK CommandTool工具命令一览表
PIE SDK Command&&Tool工具命令一览表 编号 模板 名称(中文) Command&Tool 程序集 备注 1 数据管理 加载栅格数据 PIE.Controls ...
- PIE SDK点元素的绘制
1. 功能简介 在数据的处理中会用到点元素的绘制,目前PIE SDK支持IMarkerSymbol的点元素的绘制,MarkerSymbol对象是用于修饰点状对象的符号,它包括ArrowMarkerSy ...
- PIE SDK影像坏线修复
1.算法功能简介 坏条带的由来:2003年5月31日,Landsat-7ETM+机载扫描行校正器(SLC) 故障,导致此后获取的影像出现了数据条带丢失,严重影响了Landsat ETM遥感影像的使用. ...
- PIE SDK与OpenCV结合说明文档
1.功能简介 OpenCV是基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效--由一系列 C 函数和少量 ...
- PIE SDK栅格生成等值线、面
1.算法功能简介 等值线图能直观地展示数据的变化趋势,是众多领域展示成果的重要图建之一,被广泛应用于石油勘探.矿物开采.气象预报等众多领域.等值线的绘制是指从大量采样数据中提取出具有相同值的点的信 ...
- PIE SDK矢量数据的读取
1.功能简介 GIS将地理空间数据表示为矢量数据和栅格数据.矢量数据模型使用点.线和多边形来表示具有清晰空间位置和边界的空间要素,如控制点.河流和宗地等,每个要素被赋予一个ID,以便与其属性相关联.栅 ...
- PIE SDK傅里叶变换
1.算法功能简介 傅里叶变换能把遥感图像从空域变换到只包含不同频域信息的频域中.原图像上的灰度突变部位(如物体边缘).图像结构复杂的区域.图像细节及干扰噪声等,经傅里叶变换后,其信息大多集中在高频区: ...
最新文章
- C# 数据库存储过程的讲解应用
- 微信小程序 navigateTo 传对象参数
- 英语期末复习unit 1-2课后习题第一题及背诵段落
- 《算法竞赛进阶指南》0.4二分
- 【Codeforces Round #450 (Div. 2) B】Position in Fraction
- 查看cics 运行状态
- vscode settings.json配置
- 2015软件测试面试题第三篇
- 解决Access denied for user ''@'localhost' to database 'mysql'问题
- 抢票软件开发(二) 模拟登录
- 也许你看了一本假的天龙八部
- cba篮球暂停次数和时间_CBA在比赛时,为什么有“官方暂停”?
- 谈谈DRAM的检测等级(eTT与uTT)
- 千耘导航助力新疆精河县数万亩棉花播种
- NandFlash驱动移植基础知识
- Excel单元格数据有空格怎样去掉
- 丁总路由器设置以及401联网
- 齐岳|水溶性竹红菌素PLGA纳米粒|负载奥沙利铂的mPEG-PLGA纳米粒子|包载黄豆苷元的PLGA纳米颗粒
- spyglass使用教程
- 理解线性稳压器及其主要性能参数
热门文章
- 资源 | Intel发布AI免费系列课程3部曲:机器学习基础、深度学习基础以及TensorFlow基础
- Reddit热点 | 想看被打码的羞羞图片怎么办?CNN帮你解决
- 漫画 | 小公司卧薪尝胆三年,意外拿到美团offer
- 它,是一部全网最全的JDK发展历史轨迹图...
- 我在 GitHub 上都见过哪些沙雕项目?
- 15万奖金强化学习赛事!Go-Bigger多智能体决策智能挑战赛来了!
- 十大经典排序算法Python版实现(附动图演示)
- AI十级「找茬」选手,非这个书生莫属,节后开源!
- 全新发布:《SQL语法速成手册》
- 13个你一定要知道的PyTorch特性