作者:朱金灿

来源:http://blog.csdn.net/clever101

使用gdal创建一个100*100的红色的geotiff图像,代码如下:

#include <assert.h>
#include <string>
#include <gdal.h>
#include <gdal_priv.h>
#include <gdalwarper.h> int _tmain(int argc, _TCHAR* argv[])
{
// 用于支持中文路径
CPLSetConfigOption(_T("GDAL_FILENAME_IS_UTF8"),_T("NO"));
GDALAllRegister(); GDALDriver* pDriver = GetGDALDriverManager()->GetDriverByName(_T("GTiff"));
if(NULL!=pDriver)
{
// 创建的geotif文件路径
std::string strFileFullPath = "D:\\1.tif";
// 下面是默认选项
char** papszOptions = NULL;
papszOptions = CSLSetNameValue( papszOptions, "INTERLEAVE", "BAND" ); //bsq int nImgWidth = 100; // 图像宽度
int nImgHeight = 100; // 图像高度
//创建位浮点数的geotif图像
GDALDataset* pCreateDataset = pDriver->Create(strFileFullPath.c_str(),nImgWidth,nImgHeight,3,GDT_Byte,papszOptions); if(pCreateDataset != NULL)
{
// 定义仿射变换参数
double dblGeoTransform[6] = {0};
/*
dblGeoTransform[0] --- 图像左上角的横坐标
dblGeoTransform[1] --- 单个像元宽度,使用图像x轴范围/图像宽度得到
dblGeoTransform[2] --- 0.0
dblGeoTransform[3] --- 图像左上角的纵坐标
dblGeoTransform[4] --- 0.0
dblGeoTransform[5] --- 单个像元高度,使用图像y轴范围/图像高度得到
*/ dblGeoTransform[0] = 116.0; // 东经度
dblGeoTransform[1] = (120.0-116.0)/static_cast<double>(nImgWidth); // 图像的地理范围为东经度到东经度
dblGeoTransform[3] = 39.0; // 北纬度
dblGeoTransform[5] = (37.0-39.0)/static_cast<double>(nImgHeight);// 图像的地理范围为北纬度到北纬度 CPLErr err = CE_None;
if(CE_None == pCreateDataset->SetGeoTransform(dblGeoTransform))
{
// 设置经纬度坐标
std::string strWkt = "GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433],AUTHORITY[\"EPSG\",\"4326\"]]";
if(CE_None == pCreateDataset->SetProjection(strWkt.c_str()))
{
GDALRasterBand* poBand = NULL;
poBand = pCreateDataset->GetRasterBand(1);
unsigned char* pcBuffer = new unsigned char[nImgWidth*nImgHeight];
memset(pcBuffer,255,nImgWidth*nImgHeight*sizeof(unsigned char)); assert(NULL!=poBand);
// 将第一波段的值全部设为.0
err = poBand->RasterIO(GF_Write,0,0,nImgWidth,nImgHeight,pcBuffer,nImgWidth,nImgHeight,GDT_Byte,0,0); // GF_Read
}
}
GDALClose(pCreateDataset);
}
} GDALDestroyDriverManager();
getchar();
return 0;
}

用ENVI ZOOM打开时居然是全黑,如下图:

开始百思不得其解,后来大致明白了,ENVI初始显示是作了2%线性拉伸的,就是对图像DN值分布在2%和98%之间的做线性拉伸,由于所有波段的最大值和最小值都一样,没有拉伸空间,那么就是保留初始化值0,所以就显示为0。

就是如果不进行拉伸的话,是可以正确显示的,如下图:

参考:

1. envi中2%线形灰度拉伸是什么含义

ENVI显示GDAL创建GeoTiff文件的一个问题及其思考的更多相关文章

  1. python gdal 写GeoTiff文件

    1.gdal数据类型 (1)GDT_Byte(int8)  (2)GDT_UInt16 (3)GDT_Int16  (4)GDT_UInt32  (5)GDT_Int32  (6)GDT_Float3 ...

  2. 在C#中使用GDAL创建Shape文件

    这几天在项目中考虑使用GDAL,由于10年没有用过VC了,就在网上搜了下怎么样在C# 中使用GDAL,看到了http://blog.csdn.net/liminlu0314/article/detai ...

  3. C++、GDAL创建shapefile文件

    源代码网址:http://download.csdn.net/detail/ivanljf/5834823 一.先贴出第一段代码: #include "ogrsf_frmts.h" ...

  4. C++、GDAL创建shapefile,并向矢量文件中添加网格

    //总体来说这个过程就是构建数据源->构建层->构建要素->构建形状->关闭数据源. //要包含的GDAL头文件 #include <gdal_priv.h> #i ...

  5. 【Python脚本】Python创建删除文件-----------我的第一个Python脚本

    Python相对C++和Java来说,是解释性语言,非常适合来编写脚本. 很久之前就开始学习Python的语法了,今天写了第一个Python的脚本,来简化我的一些日常工作. 我平时学习的时候喜欢新建一 ...

  6. 使用SQL语句创建数据库1——创建一个数据库文件和一个日志文件的数据库

    目的:创建一个数据库文件和一个日志文件的数据库 在matser数据库下新建查询,输入的命令如下: USE master——指向当前使用的数据库.创建数据库实际上是向master数据库中增加一条数据库信 ...

  7. C#操作XML学习之创建XML文件的同时新建根节点和子节点(多级子节点)

    最近工作中遇到一个问题,要求创建一个XML文件,在创建的时候要初始化该XML文档,同时该文档打开后是XML形式,但是后缀名不是.在网上找了好些资料没找到,只能自己试着弄了一下,没想到成功了,把它记下来 ...

  8. WPF入门教程系列(一) 创建你的第一个WPF项目

    WPF入门教程系列(一) 创建你的第一个WPF项目 WPF基础知识 快速学习绝不是从零学起的,良好的基础是快速入手的关键,下面先为大家摞列以下自己总结的学习WPF的几点基础知识: 1) C#基础语法知 ...

  9. mac下为Apache 创建 .htaccess文件

    标签:mac   .htaccess 在设置固定链接时会提示如下的问题:   若您的 .htaccess 文件可写,我们可以自动修改它.但似乎它不可写,因此我们在下方列出了您 .htaccess 文件 ...

随机推荐

  1. Windows Embedded POSready2009

    Windows Embedded POSready2009 ,这个看上去和 XP 差不多,可能是别人说的 XPE 系统 下载 POSready2009_CD.iso, 安装 KEY :         ...

  2. eclipse个人插件

    1.SVN eclipse markets 安装m2e-subversion.svnkit 2.maven 本地装好mvn prefences导入maven安装目录和配置 3.单元测试覆盖率 EclE ...

  3. 在Qt Creator的项目中添加头文件和库

    在Qt Creator中的工程中,工程通过.pro文件管理. 额外需要连接的连接库unix:LIBS += -L your_lib_path -lyour_libwin32:LIBS += your_ ...

  4. angular 子组件与父组件通讯

    1. 子组件app-sidebar.compnent.html (click)="goProject()"设置点击事件 <mat-list-item [routerLink] ...

  5. 【2017"百度之星"程序设计大赛 - 初赛(B)】度度熊的交易计划

    [链接]点击打开链接 [题意] 在这里写题意 [题解] 先设一个超级源点,向每个片区都建一条边,容量为b,费用为-a; 然后从每个片区再连一条边,指向一个超级汇点. 容量为d,费用为c; 然后从起点到 ...

  6. STM32W108无线射频模块串行通信接口编程实例

    STM32W108无线射频模块UART通信应用实例 基于STM32W108芯片,编写串口測试程序,測试串口通信.完毕PC通过串口与STM32W108进行通信. 开发环境与硬件平台 硬件:STM32W1 ...

  7. Caused by: java.lang.NoSuchMethodError:javax.servlet.http.HttpServletRequest.getServletContext()L

    在做项目的时候,出现Caused by: java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getServletCo ...

  8. Spring3拦截引发的问题——WEB开发中的client路径

    什么是client路径? 第一类.也就是html或js文件等client訪问的文件里的路径,这里包含一些资源文件的引入(js.css还有各种图片等),或是跳转到静态html页面,总之获取的都是静态资源 ...

  9. localStorage存储数据位置

    chrome浏览器:C:\Users\Username\AppData\Local\Google\Chrome\User Data\Default\Local Storage 中,虽然后缀名是.loc ...

  10. django 简单会议室预约(2)

    --我们先打开settings.py 配置文件: import os #指明django APP目录路径 BASE_DIR = os.path.dirname(os.path.dirname(os.p ...