21 #include "ImgRasterGdal.h"
23 ImgRasterGdal::ImgRasterGdal(
void)
24 : m_gds(NULL), m_ncol(0), m_nrow(0), m_nband(0)
28 void ImgRasterGdal::close(
void)
33 std::string ImgRasterGdal::getProjection(
void)
const
35 std::string theProjection=m_gds->GetProjectionRef();
44 std::string ImgRasterGdal::getProjectionRef(
void)
const
46 std::string theProjection;
47 if(m_gds->GetProjectionRef())
48 return(m_gds->GetProjectionRef());
53 GDALDataType ImgRasterGdal::getDataType(
int band)
const
55 assert(band<m_nband+1);
56 return (m_gds->GetRasterBand(band+1))->GetRasterDataType();
59 GDALRasterBand* ImgRasterGdal::getRasterBand(
int band)
61 assert(band<m_nband+1);
62 return (m_gds->GetRasterBand(band+1));
65 GDALColorTable* ImgRasterGdal::getColorTable(
int band)
const
67 assert(band<m_nband+1);
68 return (m_gds->GetRasterBand(band+1))->GetColorTable();
71 std::string ImgRasterGdal::getDriverDescription()
const
73 return m_gds->GetDriver()->GetDescription();
76 void ImgRasterGdal::getGeoTransform(
double* gt)
const{
77 m_gds->GetGeoTransform(gt);
92 std::string ImgRasterGdal::getGeoTransform()
const
95 m_gds->GetGeoTransform(gt);
97 s <<
"[" << gt[0] <<
"," << gt[1] <<
"," << gt[2] <<
"," << gt[3] <<
"," << gt[4] <<
"," << gt[5] <<
"]";
116 char** ImgRasterGdal::getMetadata()
118 if(m_gds->GetMetadata()!=NULL)
119 return(m_gds->GetMetadata());
124 char** ImgRasterGdal::getMetadata()
const
126 if(m_gds->GetMetadata()!=NULL)
127 return(m_gds->GetMetadata());
132 void ImgRasterGdal::getMetadata(std::list<std::string>& metadata)
const
134 char** cmetadata=m_gds->GetMetadata();
135 while(*cmetadata!=NULL){
136 metadata.push_back(*(cmetadata));
141 std::string ImgRasterGdal::getDescription()
const
143 if(m_gds->GetDriver()->GetDescription()!=NULL)
144 return m_gds->GetDriver()->GetDescription();
149 std::string ImgRasterGdal::getMetadataItem()
const
151 if(m_gds->GetDriver()->GetMetadataItem( GDAL_DMD_LONGNAME )!=NULL)
152 return m_gds->GetDriver()->GetMetadataItem( GDAL_DMD_LONGNAME );
156 std::string ImgRasterGdal::getImageDescription()
const
158 if(m_gds->GetDriver()->GetMetadataItem(
"TIFFTAG_IMAGEDESCRIPTION")!=NULL)
159 return m_gds->GetDriver()->GetMetadataItem(
"TIFFTAG_IMAGEDESCRIPTION");
164 std::string ImgRasterGdal::getInterleave()
const
166 if(m_gds->GetMetadataItem(
"INTERLEAVE",
"IMAGE_STRUCTURE"))
167 return m_gds->GetMetadataItem(
"INTERLEAVE",
"IMAGE_STRUCTURE");
172 std::string ImgRasterGdal::getCompression()
const
174 if(m_gds->GetMetadataItem(
"COMPRESSION",
"IMAGE_STRUCTURE"))
175 return m_gds->GetMetadataItem(
"COMPRESSION",
"IMAGE_STRUCTURE");
180 bool ImgRasterGdal::getBoundingBox(
double& ulx,
double& uly,
double& lrx,
double& lry)
const
183 m_gds->GetGeoTransform(gt);
194 lrx=gt[0]+nrOfCol()*gt[1]+nrOfRow()*gt[2];
195 lry=gt[3]+nrOfCol()*gt[4]+nrOfRow()*gt[5];
212 bool ImgRasterGdal::getCenterPos(
double& x,
double& y)
const
215 m_gds->GetGeoTransform(gt);
224 x=gt[0]+(nrOfCol()/2.0)*gt[1]+(nrOfRow()/2.0)*gt[2];
225 y=gt[3]+(nrOfCol()/2.0)*gt[4]+(nrOfRow()/2.0)*gt[5];
239 bool ImgRasterGdal::geo2image(
double x,
double y,
double& i,
double& j)
const
243 m_gds->GetGeoTransform(gt);
252 double denom=(gt[1]-gt[2]*gt[4]/gt[5]);
255 i=(x-gt[0]-gt[2]/gt[5]*(y-gt[3]))/denom;
256 j=(y-gt[3]-gt[4]*(x-gt[0]-gt[2]/gt[5]*(y-gt[3]))/denom)/gt[5];
273 bool ImgRasterGdal::image2geo(
double i,
double j,
double& x,
double& y)
const
276 m_gds->GetGeoTransform(gt);
286 x=gt[0]+(0.5+i)*gt[1]+(0.5+j)*gt[2];
287 y=gt[3]+(0.5+i)*gt[4]+(0.5+j)*gt[5];
300 bool ImgRasterGdal::covers(
double x,
double y)
const
302 double theULX, theULY, theLRX, theLRY;
303 getBoundingBox(theULX,theULY,theLRX,theLRY);
304 return((x > theULX)&&
310 bool ImgRasterGdal::covers(
double ulx,
double uly,
double lrx,
double lry)
const
312 double theULX, theULY, theLRX, theLRY;
313 getBoundingBox(theULX,theULY,theLRX,theLRY);
314 return((ulx < theLRX)&&(lrx > theULX)&&(lry < theULY)&&(uly > theLRY));
317 int ImgRasterGdal::getNoDataValues(std::vector<double>& noDataValues)
const
319 if(m_noDataValues.size()){
320 noDataValues=m_noDataValues;
321 return m_noDataValues.size();
327 int ImgRasterGdal::pushNoDataValue(
double noDataValue)
329 if(find(m_noDataValues.begin(),m_noDataValues.end(),noDataValue)==m_noDataValues.end())
330 m_noDataValues.push_back(noDataValue);
331 return(m_noDataValues.size());