IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

wxWidgets Discussion :

afficher une carte (.ecw)


Sujet :

wxWidgets

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 20
    Par défaut afficher une carte (.ecw)
    Bonjour,
    Je souhaite afficher une carte (composée de bloc de 1km² au format .ecw)
    J'aimerais savoir si quelqu'un avait deja fait la chose avec wxwidget. Apparement il n'y a pas de handler particulier.


    thx

  2. #2
    Membre averti
    Inscrit en
    Février 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 20
    Par défaut
    Alors j'ai trouvé une librairie (ER Mapper) qui décompresse les ecw.
    La fonction de décompression retourne un bitmap windows.

    Est ce que ca va passer un cast en wxBitmap pour l'afficher dans mon interface ?

  3. #3
    Membre averti
    Inscrit en
    Février 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 20
    Par défaut
    Bon j'ai réussi à afficher une carte

    Voila le code utilisé (utilisant le SDK ERMAPPER), pour si jamais quelqu'un venait à avoir besoin de le faire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    bool MapWindow::ReadEcw(wxString wxFilename)
    {
     
    const char* filename = (const char*)wxFilename.mb_str(wxConvUTF8);
     
    bool retVal = false;
    try
    {
     
    char * zFilename = const_cast<char*>(filename);
    NCSFileView *pNCSFileView;
    NCSFileViewFileInfo *pNCSFileInfo;
    NCSEcwReadStatus eReadStatus = NCSECW_READ_OK;
    NCSError eError = NCS_SUCCESS; 
     
    UINT32 nBytesPerLine;
    INT32 nWidth, nHeight;
    INT32 nBands=3;
    INT32 nViewX, nViewY;
    UINT32	*pBandList;
    nViewX=WindowSize.GetWidth();
    nViewY=WindowSize.GetHeight();
    pBandList = (UINT32 *) malloc(sizeof(UINT32) * 3);
     
    NCSecwInit();
     
    for( int j = 0; j < nBands; j ++ ){pBandList[j] = j;}
     
    // Open the input NCSFileView
    eError = NCScbmOpenFileView(zFilename, &pNCSFileView, NULL);
    if (eError != NCS_SUCCESS)
    {
    //Could not open view for file
    wxMessageBox(wxT("Error: Could not open view for ecw file"));
    return retVal;
    }
     
    eError = NCScbmGetViewFileInfo(pNCSFileView, &pNCSFileInfo);
    if (eError != NCS_SUCCESS)
    {
    //Could not open file infos
    wxMessageBox(wxT("Error: Could not get infos for ecw file"));
    return retVal;
    }
    //wxMessageBox(wxString::Format("[ECW INFO] %dx%d, %d bandes, Origine: (%f,%f), Unit:%d", pNCSFileInfo->nSizeX, pNCSFileInfo->nSizeY, pNCSFileInfo->nBands, pNCSFileInfo->fOriginX, pNCSFileInfo->fOriginY, pNCSFileInfo->eCellSizeUnits));
     
     
    eError = NCScbmSetFileView(pNCSFileView, 3, pBandList,
    700, 700, 1300, 1300, nViewX, nViewY);
     
    if (eError != NCS_SUCCESS)
    {
    //Could not open view for file
    wxMessageBox(wxT("Error: Could not set view for ecw file"));
    return retVal;
    }
     
    // Allocate scanline RGB triplet buffer
    nBytesPerLine=(nViewX*3); //pour chaque pixel, bytes B G et R
    pRGBTriplets = (UINT8 *) malloc(nViewY*nBytesPerLine); //BGR triplet buffer
    pRGBTriplets_wrk = pRGBTriplets;//pointeur de travail
    int k = nViewY-1;
    while(k--)
    {
     
    	eReadStatus = NCScbmReadViewLineRGB(pNCSFileView, pRGBTriplets_wrk);
    	if(eReadStatus==NCSECW_READ_CANCELLED)
    	{
    		wxMessageBox(wxT("Error: view line bgr"));
    		NCScbmCloseFileView(pNCSFileView);
    		delete(pBandList);
    		NCSecwShutdown();
    		return false;
    	}
    	pRGBTriplets_wrk+=nBytesPerLine;
    }
     
     
    image = wxImage(nViewX, nViewY, true);
    image.SetData(pRGBTriplets);
     
     
    // Close file view
    NCScbmCloseFileView(pNCSFileView);
    delete(pBandList);
    // Do an explicit Shutdown() to prevent multi-heap issues in DEBUG mode
    NCSecwShutdown();
    //FlipBuffer();
    retVal = true;
    }
    catch(std::exception e)
    {
    //Something went wrong
    retVal = false;
    }
     
    return retVal;
    }
    Maintenant se pose le problème de la mosaïque pour afficher toutes les dalles en fonction de leurs coordonnées et gérer les zoom/mouvements, plein de fun en perspective

Discussions similaires

  1. [Google Maps] Afficher une carte à partir d'un code postal
    Par gohanfaye dans le forum APIs Google
    Réponses: 5
    Dernier message: 21/06/2011, 20h13
  2. Réponses: 1
    Dernier message: 07/02/2011, 22h54
  3. afficher une carte
    Par ____22 dans le forum MFC
    Réponses: 4
    Dernier message: 17/07/2009, 16h06
  4. Afficher une carte
    Par gaby_1 dans le forum Débuter
    Réponses: 2
    Dernier message: 23/09/2007, 14h27
  5. [Lazarus] Afficher une carte 2D isométrique
    Par Neuromancien2 dans le forum Lazarus
    Réponses: 2
    Dernier message: 05/09/2007, 20h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo