GDAL讀取的座標起點在畫素左上角還是畫素中心?

2022-07-04 02:27:12 字數 1548 閱讀 1323

目錄筆者在處理地理柵格資料的時候,總是會發生偏差半個畫素的問題。

比如說通過arcmap開啟一張.tif,檢視其地理資訊;同時用記事本開啟.tfw,比較兩者得地理資訊:

同樣的起點位置(左上角座標),兩者卻相差半個畫素的距離。

而對於另一些資料,比較arcmap與tfw的資訊,兩者的地理資訊又可以是一樣的。那麼對於地理柵格資料,其起點位置(左上角座標)是以哪一種為準?為什麼兩者會相差半個畫素的距離?

而gdal可以也讀取地理柵格資料(dem、dom等)的座標資訊:

//

gdalallregister();

cplsetconfigoption("gdal_filename_is_utf8", "no");

//const char * pszfile = "d:\\data\\imgdemo\\k52e004015ad005m2010a.tif";

gdaldataset *podataset = (gdaldataset*)gdalopen(pszfile, ga_readonly);//使用唯讀方式開啟影象

if (!podataset)

//獲取地理座標資訊

double padftransform[6];

if (podataset->getgeotransform(padftransform) == ce_failure)

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])又應該是哪一種呢?

經過比較和論證,筆者發現gdal和arcmap在處理tif格式的地理柵格資料的時候,都遵循以下原則:

gdal/arcmap讀取的起點位置都是左上角畫素左上角的位置。

tfw裡面儲存的座標起點標識的是左上角畫素中心的位置。

而tif內部儲存的座標起點標識的是左上角畫素左上角的位置。所以兩者的地理座標的距離總是差半個畫素的距離。

tif內部可以不儲存地理資訊,此時gdal/arcmap會以tfw裡面儲存的起點位置為準,但因為tfw是畫素中心的位置,讀取的起點位置會偏移半個畫素的距離。

一旦tif內部可以儲存地理資訊,此時gdal/arcmap會以tif內部可以儲存地理為準。此時tfw檔案就不起作用了。

計算點在平面上的投影座標

已知乙個平面plane以及任一點 v i x i,y i,z i 計算點 v i 到平面plane的投影。給定的平面plane的方程為 ax by cz d 0 過點 v i 到平面plane的垂足記作 prime x,y,z 則直線 v i prime 與平面的法向量 overrightarrow...

opencv中的畫素座標系與操作畫素的方法

opencv中畫素座標系的座標原點在影象的左上角,這種座標繫在結構體mat,rect,point中都是適用的。在point x,y 和rect x,y 中,第乙個引數x代表的是元素所在影象的列數,第二個引數y代表的是元素所在影象的行數。座標體系的x軸為影象矩形的上面那條水平線,從左往右 y軸為影象矩...

畫素座標轉到世界座標時相機座標系中的Zc值求解

世界座標系 相機座標系 影象座標系 畫素座標系之間的轉換公式參考 世界座標系 相機座標系 影象座標系 畫素座標系之間的轉換 其中影象座標到世界座標的轉化公式作者講解的也比較清楚,但是對於zc的值,作者並沒有給出進一步講解 上述公式可以簡寫為 進一步 其中 r,k,t均為已知值。將上述等式中的變數做以...