笔者在处理地理栅格数据的时候,老是会发生误差半个像素的问题。
好比说经过ArcMap打开一张.tif,查看其地理信息;同时用记事本打开.tfw,比较二者得地理信息:
一样的起点位置(左上角坐标),二者却相差半个像素的距离。
而对于另外一些数据,比较ArcMap与tfw的信息,二者的地理信息又能够是同样的。那么对于地理栅格数据,其起点位置(左上角坐标)是以哪种为准?为何二者会相差半个像素的距离?code
而GDAL能够也读取地理栅格数据(DEM、DOM等)的坐标信息:orm
// GDALAllRegister(); CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "NO"); // const char * pszFile = "D:\\Data\\imgDemo\\K52E004015AD005M2010A.TIF"; GDALDataset *poDataset = (GDALDataset*)GDALOpen(pszFile, GA_ReadOnly);//使用只读方式打开图像 if (!poDataset) { printf("File: %s不能打开!\n", pszFile); } //获取地理坐标信息 double padfTransform[6]; if (poDataset->GetGeoTransform(padfTransform) == CE_Failure) { printf("获取仿射变换参数失败"); } cout << fixed << "仿射变换参数:" << endl << padfTransform[0] << endl //左上角点坐标X << padfTransform[1] << endl //X方向的分辨率 << padfTransform[2] << endl //旋转系数,若是为0,就是标准的正北向图像 << padfTransform[3] << endl //左上角点坐标Y << padfTransform[4] << endl //旋转系数,若是为0,就是标准的正北向图像 << padfTransform[5] << endl; //Y方向的分辨率
那么GDAL读取坐标起点也就是左上角点坐标(padfGeoTransform[0],padfGeoTransform[3])又应该是哪种呢?blog
通过比较和论证,笔者发现GDAL和ArcMap在处理TIF格式的地理栅格数据的时候,都遵循如下原则:it
GDAL和ArcMap都没有区分处理的地理栅格数据是DEM(地形)仍是DOM(影像),其实对于地形栅格数据,不少时候会把起点位置处理成左上角像素中心的位置。好比说软件GlobalMapper中,打开TIF的时候会询问是将其做为DEM处理仍是DOM处理。看成为DEM处理的时候,其他的原则同样,可是读取的起点就是左上角像素中心的位置了。io