예제 #1
0
static GDALDataset *OGRGTMDriverOpen( GDALOpenInfo* poOpenInfo )
{
    if( poOpenInfo->eAccess == GA_Update ||
        poOpenInfo->fpL == NULL ||
        poOpenInfo->nHeaderBytes < 13)
        return NULL;

/* -------------------------------------------------------------------- */
/*      If it looks like a GZip header, this may be a .gtz file, so     */
/*      try opening with the /vsigzip/ prefix                           */
/* -------------------------------------------------------------------- */
    if (poOpenInfo->pabyHeader[0] == 0x1f && ((unsigned char*)poOpenInfo->pabyHeader)[1] == 0x8b &&
        strncmp(poOpenInfo->pszFilename, "/vsigzip/", strlen("/vsigzip/")) != 0)
    {
        /* ok */
    }
    else
    {
        short version = CPL_LSBINT16PTR(poOpenInfo->pabyHeader);
        if (version != 211 ||
            strncmp((const char*)poOpenInfo->pabyHeader + 2, "TrackMaker", strlen("TrackMaker")) != 0 )
        {
            return NULL;
        }
    }

    OGRGTMDataSource *poDS = new OGRGTMDataSource();

    if( !poDS->Open( poOpenInfo->pszFilename, FALSE ) )
    {
        delete poDS;
        poDS = NULL;
    }
    return poDS;
}
예제 #2
0
OGRDataSource *OGRGTMDriver::Open( const char * pszName, int bUpdate )
{
    if (bUpdate)
    {
        return NULL;
    }
    
    OGRGTMDataSource *poDS = new OGRGTMDataSource();

    if( !poDS->Open( pszName, bUpdate ) )
    {
        delete poDS;
        poDS = NULL;
    }
    return poDS;
}