2014-05-19 12 views
0

Je comprends pas très bien l'anglais et je ne suis pas le meilleur programmeur C++ donc j'ai décidé de poser une question ici pour compenser cela.GDAL GeoTiff obtenir l'altitude à un pixel spécifié help C++

Je suis en train d'obtenir l'élévation sur une image GeoTiff I téléchargé à partir de cette page: http://terracolor.net/sample_imagery.html

Je reçois des informations sur l'image via GDAL lib mais je ne suis pas sûr de ce que c'est exactement. Est-ce la couleur? Sont-ce des coordonnées? Quelle unité est-ce? Je suis également désorienté par les différents groupes que je peux lire. Peut-être que quelqu'un qui utilisait GDAL dans le passé peut m'expliquer de quoi il s'agit. Ce que j'aime à la fin, c'est l'altitude par exemple pour un Pixel donné.

Voici mon code:

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]; 
} 
} 

Répondre

0

Vous avez raison. Quelle erreur simple. Ces images que j'ai utilisées ne contenaient pas de telles données d'altitude. J'ai maintenant utilisé des images de http://srtm.csi.cgiar.org/SELECTION/inputCoord.asp qui servent les données nécessaires avec dans un groupe comment j'en avais besoin. Je peux alors utiliser ma fonction pour le lire.

0

Ces fichiers GeoTIFF fournis par Terracolor semblent contenir des informations de couleur, pas d'élévation. Les fichiers ont des couleurs de pixel dans l'espace RVB, il y a trois bandes (1: rouge, 2: vert, 3: bleu). Vous pouvez traiter les fichiers GeoTIFF avec un code similaire à votre exemple, mais vous devrez lire dans les trois bandes. Le type de données est Byte, pas GDT_Float32. Avant de les traiter avec GDAL, je suggère de vérifier avec le fournisseur de données ou d'ouvrir certaines de ces couches raster avec un logiciel SIG (comme QGIS). Les fichiers .tif semblent venir avec des métadonnées dans les fichiers .txt.

Questions connexes