筆者在處理地理柵格數據的時候,老是會發生誤差半個像素的問題。
好比說經過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