疏影清浅
unread,Dec 4, 2008, 8:21:54 PM12/4/08Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to gdal+python+GIS+geosings论坛
说明:目的是想把内存中的一块数据以GTIFF的格式写出来。
*inp 为指向该块数据的指针;
*strOut 为输出的GTIFF文件名;
column 为内存中需要输出的数据块的列数;
line 为内存中需要输出的数据块的行数;
up 为内存中需要输出的数据左上角的x坐标(UTM投影);
left 为内存中需要输出的数据左上角的y坐标(UTM投影);
zonenumber 为内存中需要输出的数据的投影带号(UTM投影);
图像为单波段;
现在需要把数据写成GTIFF的格式输出,UTM投影,WGS_84;
这个是我从图像中读出来的,希望程序写成的GTIFF读出来的信息和下面的相似。
string pszWKT = "PROJCS["unnamed",
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",
6378137,
298.2572235630016,
AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0],
UNIT["degree",0.0174532925199433],
AUTHORITY["EPSG","4326"]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",117],
PARAMETER["scale_factor",0.9996],
PARAMETER["false_easting",500000],
PARAMETER["false_northing",0],
UNIT["metre",1,AUTHORITY["EPSG","9001"]],
AUTHORITY["EPSG","32650"]]";
我刚开始学,由于马上就要交东西了,图像写不出来很着急……
下面是我写的写GTIFF图像的代码,请各位帮我看看,看看问题是什么?能帮我改通最好了,最好能给我些说明,需要的头文件
非常感谢啊!
//写GEOTIFF文件
bool WriteGEOTIFF(unsigned char *inp, char *strOut, double column,
double line, double up, double left, int zonenumber)
{
// 先注册驱动
GDALAllRegister();
// 打开数据集
GDALDataset *poDataset = (GDALDataset*)GDALOpen((LPCTSTR)inp,
GA_ReadOnly);
if( poDataset == NULL ) return false;
int nBandCount = 1;
int nXSize = line;
int nYSize = column;
// 创建GTiff格式驱动
GDALDriver *poDriver;
poDriver = GetGDALDriverManager()->GetDriverByName("GTiff");
if( poDriver == NULL ) return false;
// 创建一个新数据集(这里为GTIFF影像)
char *papszParmList[] = { "INTERLEAVE = PIXEL", NULL };
GDALDataset *poDestDataset = poDriver->Create( (LPCTSTR)strOut,
nXSize, nYSize, nBandCount, GDT_Byte, papszParmList);
//设置仿射地理转换参数
double affine[6];
affine[0] = up;
affine[1] = 2.36;
affine[2] = 0;
affine[3] = left;
affine[4] = 0;
affine[5] = -2.36;
poDestDataset->SetGeoTransform(affine);
//定义一个地理坐标系
/*
OGRSpatialReference oSRS;
oSRS.SetGeogCS("My geographic coordinate system",
"WGS_1984",
"My WGS84 Spheroid",
SRS_WGS_SEMIMAJOR,
SRS_WGS_INVFLATTENING,
"Greenwich", 0.0,
"degree", SRS_UA_DEGREE_CONV);
oSRS.SetWellKnownGeogCS("WGS84");
*/
/*
string pszWKT = "PROJCS["unnamed",
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",
6378137,
298.2572235630016,
AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0],
UNIT["degree",0.0174532925199433],
AUTHORITY["EPSG","4326"]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",117],
PARAMETER["scale_factor",0.9996],
PARAMETER["false_easting",500000],
PARAMETER["false_northing",0],
UNIT["metre",1,AUTHORITY["EPSG","9001"]],
AUTHORITY["EPSG","32650"]]";
*/
//string pszWKT = "PROJCS["unnamed",GEOGCS["WGS 84",DATUM
["WGS_1984",SPHEROID["WGS 84",6378137,298.2572235630016,AUTHORITY
["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0],UNIT
["degree",0.0174532925199433],AUTHORITY["EPSG","4326"]],PROJECTION
["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER
["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER
["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,
AUTHORITY["EPSG","9001"]],AUTHORITY["EPSG","32650"]]";
OGRSpatialReference oSRS;
oSRS.SetProjCS("UTM (WGS84) in northern hemisphere.");
oSRS.SetWellKnownGeogCS("WGS84");
oSRS.SetUTM(zonenumber, 1);
//poDestDataset->SetProjection(oSRS.importFromWkt(pszWKT));
//OGRSpatialReference::importFromWkt(pszWKT);
// 分配缓冲
int *lpBuf = new int[nXSize*nYSize];
//unsigned *lpBuf = new int[nXSize*nYSize];
//lpBuf = np;
// 依次读/写每个波段
//for(int i = 0; i < nBandCount; ++i)
//{
GDALRasterBand *poBand;
// 获取读影像的第i个波段
//poBand = poDataset->GetRasterBand(i+1);
// 开始位置:0, 0
// 行列数目:nXSize, nYSize
poBand->RasterIO(GF_Read, 0, 0, nXSize, nYSize, lpBuf, nXSize,
nYSize, GDT_Int32, 0, 0 );
// 获取写影像的第i个波段(poDestDataset)
poBand = poDestDataset->GetRasterBand(1);
// 写第i波段的数据
// 开始位置:0, 0
// 行列数目:nXSize, nYSize
poBand->RasterIO(GF_Write, 0, 0, nXSize, nYSize, lpBuf, nXSize,
nYSize, GDT_Int32, 0, 0);
//}
// 释放缓冲
//delete[] lpBuf;
// 关闭读写文件
delete poDataset;
delete poDestDataset;
return true;
}