0

私は英語をあまりよく理解していませんし、最高の C++ プログラマーでもないので、これを補うためにここで質問することにしました。

このページからダウンロードした GeoTiff 画像から標高を取得しようとしています: http://terracolor.net/sample_imagery.html

GDAL lib を介してイメージから情報を取得しますが、これが正確に何であるかはわかりません。色ですか?これがコーディネート?それは何の団結ですか?また、読み取ることができるさまざまなバンドにも混乱しています。過去にGDALを使用したことがある人は、これが何であるかを説明してくれるかもしれません。最後に私が知りたいのは、特定のピクセルでのメートルなどの高度です。

ここに私のコードがあります:

int ofApp::getAlt(int x,int y){ 
GDALDataset  *poDataset;

GDALAllRegister();

poDataset = (GDALDataset *) GDALOpen( "data/test.tif", GA_ReadOnly );
if( poDataset == NULL )
{
    cout << "no" << endl;
}else{
    GDALRasterBand  *poBand;
    int             nBlockXSize, nBlockYSize;
    int             bGotMin, bGotMax;
    double          adfMinMax[2];

    //printf( "Size is %dx%dx%d\n", poDataset->GetRasterXSize(), poDataset->GetRasterYSize(), poDataset->GetRasterCount() );

    poBand = poDataset->GetRasterBand( 3 );
    poBand->GetBlockSize( &nBlockXSize, &nBlockYSize );

    adfMinMax[0] = poBand->GetMinimum( &bGotMin );
    adfMinMax[1] = poBand->GetMaximum( &bGotMax );
    if( ! (bGotMin && bGotMax) )
        GDALComputeRasterMinMax((GDALRasterBandH)poBand, TRUE, adfMinMax);

    float *pafScanline;
    int   nXSize = poBand->GetXSize();

    pafScanline = (float *) CPLMalloc(sizeof(float)*nXSize);
    poBand->RasterIO( GF_Read, x, y, 1, 1, 
                      pafScanline, nXSize, 1, GDT_Float32, 
                      0, 0 );

    //cout << "vvv" << pafScanline[0] << endl;
    //printf( "value %f \n", pafScanline[0]);
    return pafScanline[0];
 }
 }
4

2 に答える 2

0

You are right. What simple mistake. These imagery i used had no such elevation data as a band in in it. I now used images from http://srtm.csi.cgiar.org/SELECTION/inputCoord.asp which serve the needed data with in a band how I needed it. I can then use my function to read it out.

于 2014-05-28T09:14:14.733 に答える