geotif格式的波段描述信息探究
作者:朱金灿
来源:http://blog.csdn.net/clever101
有时打开一些geotif文件,可以看到它的波段描述,但是它究竟存储在文件的什么位置呢?今天研究了一下,大致搞清了这个问题。
我首先搜索了一下geotif的格式说明,没有找到它的存储波段描述的tag,稍微和它接近的tag是TIFFTAG_IMAGEDESCRIPTION,但这个是存放整幅图像的描述信息的。
既然在它的格式说明中没有找到,我就研究下gdal是怎么解决这个问题的。找到相关的一段代码:
if( TIFFGetField( hTIFF, TIFFTAG_GDAL_METADATA, &pszText ) )
{
CPLXMLNode *psRoot = CPLParseXMLString( pszText );
CPLXMLNode *psItem = NULL; if( psRoot != NULL && psRoot->eType == CXT_Element
&& EQUAL(psRoot->pszValue,"GDALMetadata") )
psItem = psRoot->psChild; for( ; psItem != NULL; psItem = psItem->psNext )
{
const char *pszKey, *pszValue, *pszRole, *pszDomain;
char *pszUnescapedValue;
int nBand, bIsXML = FALSE; if( psItem->eType != CXT_Element
|| !EQUAL(psItem->pszValue,"Item") )
continue; pszKey = CPLGetXMLValue( psItem, "name", NULL );
pszValue = CPLGetXMLValue( psItem, NULL, NULL );
nBand = atoi(CPLGetXMLValue( psItem, "sample", "-1" )) + 1;
pszRole = CPLGetXMLValue( psItem, "role", "" );
pszDomain = CPLGetXMLValue( psItem, "domain", "" ); if( pszKey == NULL || pszValue == NULL )
continue; if( EQUALN(pszDomain,"xml:",4) )
bIsXML = TRUE; pszUnescapedValue = CPLUnescapeString( pszValue, NULL,
CPLES_XML );
if( nBand == 0 )
{
if( bIsXML )
{
char *apszMD[2] = { pszUnescapedValue, NULL };
SetMetadata( apszMD, pszDomain );
}
else
SetMetadataItem( pszKey, pszUnescapedValue, pszDomain );
}
else
{
GDALRasterBand *poBand = GetRasterBand(nBand);
if( poBand != NULL )
{
if( EQUAL(pszRole,"scale") )
poBand->SetScale( CPLAtofM(pszUnescapedValue) );
else if( EQUAL(pszRole,"offset") )
poBand->SetOffset( CPLAtofM(pszUnescapedValue) );
else if( EQUAL(pszRole,"unittype") )
poBand->SetUnitType( pszUnescapedValue );
else if( EQUAL(pszRole,"description") )
poBand->SetDescription( pszUnescapedValue );
从上面一段代码可以看出,gdal库读取geotif文件的波段描述是从它的元数据文件中读取的,也就是说geotif文件本身没有保存波段描述信息的位置。
geotif格式的波段描述信息探究的更多相关文章
- 文件系统的描述信息-/etc/fstab
/etc/fstab文件包含众多文件系统的描述信息.文件中每一行为一个文件系统的描述,每行的选项之间通过tab分隔,#开头的行会被转换为注释,空白行会被忽略./etc/fstab文件中的设备顺序很重要 ...
- MVC中得到成员元数据的Description特性描述信息公用方法
#region 从类型成员获取指定的Attribute T特性集合 /// <summary> /// 从类型成员获取指定的Attribute T特性集合 /// </summary ...
- 简析Geoserver中获取图层列表以及各图层描述信息的三种方法
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 实际项目中需要获取到Geoserver中的图层组织以及各图层 ...
- .NET获取枚举DescriptionAttribute描述信息性能改进的多种方法
一. DescriptionAttribute的普通使用方式 1.1 使用示例 DescriptionAttribute特性可以用到很多地方,比较常见的就是枚举,通过获取枚举上定义的描述信息在UI上显 ...
- 利用DescriptionAttribute定义枚举值的描述信息 z
System.ComponentModel命名空间下有个名为DescriptionAttribute的类用于指定属性或事件的说明,我所调用的枚举值描述信息就是DescriptionAttribute类 ...
- C# 读取枚举描述信息实例
using System;using System.Collections;using System.Collections.Generic;using System.Linq;using Syste ...
- dedecms 获取描述信息限制字数
对于我刚刚刚开始对于获取到了描述的信息,但是有些字数简直是太多了,显示的样式不好看,所以我就希望限制字数,所以我来告诉你们获取描述信息限制字数的语法吧[field:description functi ...
- SqlServer创建数据表描述及列描述信息
SqlServer创建数据表描述及列描述信息 Intro Q: 为什么要创建描述信息? A: 鼠标悬停在对应表和列上时,会出现描述信息,可以提高工作的效率,借助工具我们根据数据表可以生成Model,可 ...
- delphi XE Datasnap SERVER 在windows 7 下为服务添加描述信息
网上对服务添加描述信息的,多数是用注册表的方式,而注册表的方式,我在win7 下测试,不知为什么,总是不行,把执行的CMD以管理员模式开启,还是没加进去. 于是在网上查到下面的代码,保存供叁考,原文博 ...
随机推荐
- JSONObject与JSONArray的使用区别
1.JSON 1. 创建一个JSONObject对象: package com.yunos.tv.video.resource.controller.web; import java.util.Arr ...
- CheckException和RuntimeException
java文档中对RuntimeException的定义是: RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类. 可能在执行方法期间抛出但未被捕获的 Runt ...
- pandas学习系列(一):时间序列
最近参加了天池的一个机场航空人流量预测大赛,需要用时间序列来预测,因此开始使用python的pandas库 发现pandas库功能的确很强大,因此在这记录我的pandas学习之路. # -*- cod ...
- Linux 运维笔试题(一)答案
答案: 1. ftp:21 远程连接telnet端口:23 smtp:25 rsync:873 SNMP:161 RPC(Remote Procedure Call,远程过程调用) ...
- vue动态绑定img标签的src地址
问题代码: <li v-for="(item,index) in images" :key="index"> <img :src=" ...
- 昼猫笔记 JavaScript -- 异步执行 | 定时器真的定时执行?
本篇主要内容:异步.定时器引发的思考 预计阅读时间:8分钟 了解 我们都知道在js中定时器有两种 setInterval() . setTimeout() setInterval() :按 ...
- linux Cenos-7.0下安装jdk搭建环境变量
搭建linux系统的java环境本人目前所知有两种方式: 第一种是从oracle官网下载linux系统的jdk版本: 第二种是使用yum命令的方式下载安装,咱们今天讲的是第一种方式. 一.工具准备: ...
- java开发微信公众号支付(JSAPI)
https://www.cnblogs.com/gopark/p/9394951.html,这篇文章写的已经很详细了. 下面写一下自己的思路: 1.首先下载demo,地址:https://pay.we ...
- tt
Oracle报错处理 1.oem启动报错 解决方案:
- 三星N900(note3)刷机包 颓废N0.8.1 修复已知BUG 集成谷歌服务
ROM介绍 8.1更新信息:攻克了来电后点击HOME出现SECPHONE已经停止的问题 去掉了桌面隐藏信息的选项,官方最新底包暂不支持这功能 增加了网友们须要验证的谷歌服务(不须要的同学同步什么的都关 ...