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查看FY4A4000分辨率数据]

HDF数据是采用了高效率压缩的数据,实现了高效的存储、分发。但却造成了数据的显示浏览缓慢(每次数据浏览,都需要从压缩文件中解压出原始数据,再获取到要显示浏览的数据),并且整个过程会占用大量的内存资源,为了保证数据的高效浏览效率,我们建议将HDF中的各通道数据生成一份支持快速浏览查看的tiff本地缓存数据,以满足浏览查看的需求。

下面我们以FY4A 4000m数据的NOMChannel13通道为例,来演示如何完成对FY4A数据的快速读取、浏览。

2.2  实现思路及原理说明

读取静止卫星的数据的思路为把静止卫星数据中的对应通道(NOMChannel13)保存为一份本地的栅格数据,再通过对栅格数据的浏览,完成对静止卫星数据的浏览。


第一步


打开静止卫星数据为多数据集


第二步


获取指定通道的栅格数据集


第三步


读取第二步中的数据集的数据至内存中


第四步


创建与静止卫星同数据类型、同宽高、同波段数的目标栅格文件


第五步


将数据写入目标栅格数据文件


第六步


对目标栅格数据赋值空间参考和六参数

2.3  核心接口与方法


接口/类


方法


说明


DataSource.DatasetFactory


OpenDataset


打开数据集


DataSource.DatasetFactory


CreateRasterDataset


创建栅格数据集


DataSource.IRasterDataset


Read


将栅格数据读取至内存中


DataSource.IRasterDataset


Write


将内存数据写入至栅格数据中

2.4  示例代码


项目路径


百度云盘地址下/PIE示例程序/05.打开静止卫星数据


数据路径


百度云盘地址下/PIE示例数据/科学数据集\HDF文件夹下数据


视频路径


百度云盘地址下/PIE视频教程/05.打开静止卫星数据.avi


示例代码


OpenFileDialog openFile = new OpenFileDialog();

openFile.Filter = "HDF数据|*.hdf";

if (openFile.ShowDialog() != DialogResult.OK)

return;

string channelName = "NOMChannel13";//波段名称

string tempTif = System.IO.Path.GetDirectoryName(openFile.FileName) + "\\NOMChannel13.tiff";//输出tiff路径

ISpatialReference spatialReference = new ProjectedCoordinateSystem();//目标空间参考

spatialReference.ImportFromUserInput("+proj=geos +h=35785863 +a=6378137.0 +b=6356752.3 +lon_0=104.7 +no_defs");

IRasterLayer rasterLayer = OpenStaticData(openFile.FileName, channelName, tempTif, spatialReference);// OpenStaticData方法的定义在下面

if (rasterLayer == null)

return;

//添加至地图并刷新视图

mapControlMain.FocusMap.AddLayer(rasterLayer as ILayer);

mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);

/// <summary>

/// 打开风云4A、风云2G等静止卫星数据,读取指定波段数据为tiff

/// </summary>

/// <param name="filePath">hdf路径</param>

/// <param name="channelName">波段通道名称</param>

/// <param name="tiffPath">生成tiff路径</param>

/// <param name="spatialReference">空间参考</param>

/// <returns></returns>

private IRasterLayer OpenStaticData(string filePath, string channelName, string tiffPath, ISpatialReference spatialReference)

{

IRasterLayer rasteLayer = null;

try

{

//打开MultiDataset

IMultiDataset hdfDataset = PIE.DataSource.DatasetFactory.OpenDataset(filePath, OpenMode.ReadOnly) as IMultiDataset;

if (hdfDataset != null)

{

//遍历,查找指定通道的Dataset,进行数据格式转换

for (int i = 0; i < hdfDataset.GetDatasetCount(); i++)

{

IDataset pTempDataset = hdfDataset.GetDataset(i);

if (pTempDataset.Name == channelName)

{

//将RasterDataset写入指定tiff

IRasterDataset hdfRasterDatasetBand = pTempDataset as IRasterDataset;

int nWidth = hdfRasterDatasetBand.GetRasterXSize();

int nHeight = hdfRasterDatasetBand.GetRasterYSize();

PixelDataType eDateType = hdfRasterDatasetBand.GetRasterBand(0).GetRasterDataType();

int count = hdfRasterDatasetBand.GetBandCount();

int[] bandMap = new int[count];

for (int j = 0; j < count; j++)

{

bandMap[j] = j + 1;

}

string[] tempList = null;

IPixelBuffer pixBuffer = hdfRasterDatasetBand.Read(0, 0, nWidth, nHeight, nWidth, nHeight, bandMap);

//创建输出栅格数据集

IRasterDataset tifRasterDataset = DatasetFactory.CreateRasterDataset(tiffPath, nWidth, nHeight, count, eDateType, "GTiff", tempList);

bool flag = tifRasterDataset.Write(0, 0, nWidth, nHeight, pixBuffer.GetData_Ref(), nWidth, nHeight, eDateType, count, bandMap);

tifRasterDataset.SpatialReference = spatialReference;

tifRasterDataset.GetRasterBand(0).SetNoDataValue(65535);

//六参数,根据输入坐标的不同需要进行动态设置,本示例代码以风云4A-4000m的数据作为实验数据。

int beginLineNum = 0;

int nReslution = 4000;

string beginlineNumStr = hdfDataset.GetMetadataItem("Begin_Line_Number", "");

if (string.IsNullOrEmpty(beginlineNumStr))

{

beginlineNumStr = hdfDataset.GetMetadataItem("geospatial_lat_lon_extent_begin_line_number", "");

if (string.IsNullOrEmpty(beginlineNumStr)) beginLineNum = 183;

}

if (!string.IsNullOrEmpty(beginlineNumStr))

{

StringBuilder sb = new StringBuilder();

foreach (char charStr in beginlineNumStr)

{

if ((charStr >= ‘0‘ && charStr <= ‘9‘) || charStr == ‘ ‘ || charStr == ‘-‘) sb.Append(charStr);

}

bool result = int.TryParse(sb.ToString(), out beginLineNum);

}

double[] geoTransform = new double[6];

geoTransform[0] = -5496000;

geoTransform[1] = nReslution;

geoTransform[2] = 0;

geoTransform[3] = 5496000 - beginLineNum * nReslution;

geoTransform[4] = 0;

geoTransform[5] = -nReslution;

tifRasterDataset.SetGeoTransform(geoTransform);

(tifRasterDataset as IDisposable).Dispose();

(hdfRasterDatasetBand as IDisposable).Dispose();

(pixBuffer as IDisposable).Dispose();

rasteLayer = PIE.Carto.LayerFactory.CreateDefaultLayer(tiffPath) as IRasterLayer;

break;

}

}

}

}

catch (Exception ex)

{

rasteLayer = null;

}

return rasteLayer;

}

mapControlMain.FocusMap.AddLayer(fLayer as ILayer);

mapControlMain.ActiveView.PartialRefresh(PIE.Carto.ViewDrawPhaseType.ViewAll);

2.5  示例截图

原文地址:https://www.cnblogs.com/PIESat/p/10143034.html

时间: 2024-10-29 03:48:34

PIE SDK打开静止卫星数据的相关文章

PIE-SDK For C++打开静止卫星数据

1.功能简介 静止卫星是位于地球赤道上空约3.58万km处,与地面始终保持相对静止的卫星,静止卫星的特点是覆盖区域广,具有很强的机动灵活性,能够对特定区域进行分钟级高重复观测,可快速监测灾害目标的动态变化.目前风云2系列.风云4系列.葵花(Himawari)系列.高分4卫星均为静止卫星. [静止卫星位置示意图] [卫星运行轨迹图] [FY2G数据成像图] [GF4数据成像图] PIE支持静止卫星数据的显示和浏览,同时提供了针对常用静止卫星数据显示的优化方案,下面以FY4A数据为例来进行介绍. 2

PIE SDK打开GDB、Dwg数据

1.      功能简介 目前不同的GIS软件平台具有自己独特支持的数据格式,如ESRI的File GeoDataBase和Personal GeoDataBase.MapInfo的mif数据.AutoCAD的DWG数据.Google的Kml和Kmz数据等,PIE对这些常用软件的数据格式都进行了支持,能够顺利的进行浏览查看. 2.      功能实现说明 2.1              数据格式介绍 File GeoDataBase和Personal GeoDataBase是ESRI的本地数据

PIE SDK打开HDF、NC数据

1.      功能简介 HDF 是美国国家高级计算应用中心(National Center for Supercomputing Application)为了满足各种领域研究需求而研制的一种能高效存储和分发科学数据的新型数据格式. NC是NetCDF的简称,其全称为Network Common Data Form(网络通用数据格式),其是针对科学数据的特点开发的,是一种面向数组型并适于网络共享的数据的描述和编码标准.利用NetCDF可以对网格数据进行高效地存储.管理.获取和分发等操作.目前,N

PIE SDK打开自定义矢量数据

1. 数据介绍 信息提取和解译的过程中,经常会生成一部分中间临时矢量数据,这些数据在执行完对应操作后就失去了存在的价值,针对这种情况,PIE增加了内存矢量数据集,来协助用户完成对自定义矢量数据的读取和显示. 下面以Micaps1类数据为例介绍自定义矢量数据的构建和显示. 2. 实现思路及原理说明 第一步 构建数据的字段.空间参考等信息: 第二步 根据字段和空间参考信息创建内存矢量数据集: 第三步 在内存矢量数据集中逐条添加数据记录(包括几何图形和属性): 第四步 通过内存数据集创建矢量图层: 第

PIE SDK专题制图打开模板说明文档

1.    功能简介 在PIE SDK中,所有的制图元素.视图范围以及排版等都可以保存成一个模板,以供多次重复使用.使用时只需要打开该模板,加载相应数据,就可以直接出图了,省去了重复制作图幅的麻烦,方便快捷. 每个地图模板都是一个地图文档(PmdContents),它被保存为*.pmd文件.         [模板文件]         [植被指数模板] 2. 功能实现说明 2.1打开模板 在PIE中,每个显示的地图都是一个地图文档(PmdContents),它可以保存为*.pmd文件.用IMa

PIE SDK专题制图保存模板说明文档

1.    功能简介 在PIE SDK中,所有的制图元素.视图范围以及排版等都可以保存成一个模板,以供多次重复使用.使用模板时只需要打开该模板,加载相应数据,就可以直接出图,省去了重复制作图幅的麻烦,方便快捷. 每个地图模板都是一个地图文档(PmdContents),它被保存为*.pmd文件.      [模板文件]        [植被指数模板] 2. 功能实现说明 2.1保存模板 使用IMapDocument接口的Save()方法保存地图文档. 2.2 实现思路及原理说明 第一步 获取当前地

PIE SDK专题制图另存模板

1.功能简介 在PIE SDK中,所有的制图元素.视图范围以及排版等都可以保存成一个模板,以供多次重复使用.使用模板时只需要打开该模板,加载相应数据,就可以直接出图,省去了重复制作图幅的麻烦,方便快捷. 每个地图模板都是一个地图文档(PmdContents),它被保存为*.pmd文件.                                                                             [模板文件]              [植被指数模板] 2

PIE SDK组件式开发综合运用示例

1. 功能概述 关于PIE SDK的功能开发,在我们的博客上已经分门别类的进行了展示,点击PIESat博客就可以访问,为了初学者入门,本章节将对从PIE SDK组件式二次开发如何搭建界面.如何综合开发进行详细的讲解. 2. 功能实现 2.1.界面搭建 最终的界面如下图所示: 图1最终结果图 2.1.1 新建项目 选择“Window窗体应用程序”,设置程序的名称和保存路径即可.(新建完成后可以将程序的窗体名称右键重命名为“FormMain”,,将窗体界面的属性的Text设置名称为“PIE应用程序”

PIE SDK Command&amp;&amp;Tool工具命令一览表

PIE SDK Command&&Tool工具命令一览表 编号 模板 名称(中文) Command&Tool 程序集 备注 1 数据管理 加载栅格数据 PIE.Controls.RasterCommand PIE.Controls.dll 2 加载矢量数据 PIE.Controls.VectorCommand 3 加载科学数据集数据 PIE.Controls.ScientificDatasetCommand 4 加载环境数据 PIE.Controls.LoadHJDataComma