⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tabdump.cpp

📁 在linux环境下
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        printf("\n");        delete poBlock;    }    /*---------------------------------------------------------------------     * Cleanup and exit.     *--------------------------------------------------------------------*/    fclose(fp);    return 0;}/********************************************************************** *                          DumpTabFile() * * Open a .TAB file and print all the geogr. objects found. **********************************************************************/static int DumpTabFile(const char *pszFname){    IMapInfoFile  *poFile;    int      nFeatureId;    TABFeature *poFeature;    /*---------------------------------------------------------------------     * Try to open source file     *--------------------------------------------------------------------*/    if ((poFile = IMapInfoFile::SmartOpen(pszFname)) == NULL)    {        printf("Failed to open %s\n", pszFname);        return -1;    }    poFile->Dump();    /*---------------------------------------------------------------------     * Check for indexed fields     *--------------------------------------------------------------------*/    for(int iField=0; iField<poFile->GetLayerDefn()->GetFieldCount(); iField++)    {        if (poFile->IsFieldIndexed(iField))            printf("  Field %d is indexed\n", iField);    }    /*---------------------------------------------------------------------     * Read/Dump objects until EOF is reached     *--------------------------------------------------------------------*/    nFeatureId = -1;    while ( (nFeatureId = poFile->GetNextFeatureId(nFeatureId)) != -1 )    {        poFeature = poFile->GetFeatureRef(nFeatureId);        if (poFeature)        {//            poFeature->DumpReadable(stdout);            printf("\nFeature %d:\n", nFeatureId);            poFeature->DumpMID();            poFeature->DumpMIF();        }        else            break;      // GetFeatureRef() failed: Abort the loop    }    /*---------------------------------------------------------------------     * Cleanup and exit.     *--------------------------------------------------------------------*/    poFile->Close();    delete poFile;    return 0;}/********************************************************************** *                          DumpIndFileObjects() * * Read and dump a .IND file **********************************************************************/static int DumpIndFileObjects(const char *pszFname){    TABINDFile  oINDFile;    /*---------------------------------------------------------------------     * Try to open source file     *--------------------------------------------------------------------*/    if (oINDFile.Open(pszFname, "rb") != 0)    {        printf("Failed to open %s\n", pszFname);        return -1;    }    // oINDFile.SetIndexFieldType(1,TABFChar);    oINDFile.Dump();    /*---------------------------------------------------------------------     * Read/Dump objects until EOF is reached     *--------------------------------------------------------------------*/    while ( 0 )    {    }    /*---------------------------------------------------------------------     * Cleanup and exit.     *--------------------------------------------------------------------*/    oINDFile.Close();    return 0;}/********************************************************************** *                          DumpCoordsys() * * Open a .TAB file and dump coordsys info **********************************************************************/static int DumpCoordsys(const char *pszFname){    IMapInfoFile  *poFile;    double dXMin, dYMin, dXMax, dYMax;    /*---------------------------------------------------------------------     * Try to open source file     *--------------------------------------------------------------------*/    if ((poFile = IMapInfoFile::SmartOpen(pszFname)) == NULL)    {        printf("Failed to open %s\n", pszFname);        return -1;    }    OGRSpatialReference *poSRS = poFile->GetSpatialRef();    char *pszCoordSys = MITABSpatialRef2CoordSys(poSRS);    char *pszProjString=NULL;    printf("CoordSys %s\n", pszCoordSys?pszCoordSys:"(null)");    if (poFile->GetBounds(dXMin, dYMin, dXMax, dYMax) == 0)    {        printf("  Proj. Bounds (%.15g %.15g) (%.15g %.15g)\n", dXMin, dYMin, dXMax, dYMax);        printf("    dX dY = %.15g %.15g\n", dXMax - dXMin, dYMax - dYMin);    }    else    {        printf("  Projection Bounds not available!\n");    }    OGREnvelope oEnv;    if (poFile->GetExtent(&oEnv, TRUE) == 0)    {        printf("  Data Extents (%.15g %.15g) (%.15g %.15g)\n", oEnv.MinX, oEnv.MinY, oEnv.MaxX, oEnv.MaxY);    }    else    {        printf("  Data Extents not available!\n");    }    if (poSRS)    {//        poSRS->exportToWkt(&pszProjString);//        printf("  WKT SRS = %s\n", pszProjString);//        CPLFree(pszProjString);        poSRS->exportToProj4(&pszProjString);        printf("  PROJ4 SRS = %s\n", pszProjString);        // Write bounds to a file and launch 'proj' to convert them to LAT/LON        FILE *fpOut;        if (pszProjString &&            (fpOut = fopen("/tmp/tttbounds.txt", "w")))        {            fprintf(fpOut, "%.15g %.15g\n", dXMin, dYMin);            fprintf(fpOut, "%.15g %.15g\n", dXMax, dYMax);            fclose(fpOut);            fflush(stdout);            system(CPLSPrintf("proj -I %s /tmp/tttbounds.txt", pszProjString));        }    }    /*---------------------------------------------------------------------     * Cleanup and exit.     *--------------------------------------------------------------------*/    CPLFree(pszProjString);    poFile->Close();    delete poFile;    return 0;}/********************************************************************** *                          DumpCoordsysStruct() * * Open a .TAB file and dump coordsys info in a format usable to build * C array of MapInfoBoundsInfo[] **********************************************************************/static int DumpCoordsysStruct(const char *pszFname){    IMapInfoFile  *poFile;    double dXMin, dYMin, dXMax, dYMax;    /*---------------------------------------------------------------------     * Try to open source file     *--------------------------------------------------------------------*/    if ((poFile = IMapInfoFile::SmartOpen(pszFname)) == NULL)    {        printf("Failed to open %s\n", pszFname);        return -1;    }    TABProjInfo sProjInfo;    if (poFile->GetProjInfo(&sProjInfo) != 0)    {        printf("Cannot fetch TABProjInfo from %s\n", pszFname);        return -1;    }    if (sProjInfo.nProjId == 0)    {        printf("Nonearth coordsys in %s\n", pszFname);        return 0;    }    if (poFile->GetBounds(dXMin, dYMin, dXMax, dYMax) == 0)    {        printf("{{%d, %d, %d, "               "{%.15g,%.15g,%.15g,%.15g,%.15g,%.15g}, "               "%d,%.15g,%.15g,%.15g, "               "{%.15g,%.15g,%.15g,%.15g,%.15g}}, ",                sProjInfo.nProjId,               sProjInfo.nEllipsoidId,               sProjInfo.nUnitsId,               sProjInfo.adProjParams[0],               sProjInfo.adProjParams[1],               sProjInfo.adProjParams[2],               sProjInfo.adProjParams[3],               sProjInfo.adProjParams[4],               sProjInfo.adProjParams[5],               sProjInfo.nDatumId,               sProjInfo.dDatumShiftX,               sProjInfo.dDatumShiftY,               sProjInfo.dDatumShiftZ,               sProjInfo.adDatumParams[0],               sProjInfo.adDatumParams[1],               sProjInfo.adDatumParams[2],               sProjInfo.adDatumParams[3],               sProjInfo.adDatumParams[4] );                printf(" %.15g, %.15g, %.15g, %.15g},\n", dXMin, dYMin, dXMax, dYMax);    }    else    {        printf("  Bounds struct cannot be generated!\n");    }    /*---------------------------------------------------------------------     * Cleanup and exit.     *--------------------------------------------------------------------*/    poFile->Close();    delete poFile;    return 0;}/********************************************************************** *                          SearchIndex() * * Search a TAB dataset's .IND file for pszVal in index nIndexNo **********************************************************************/static int SearchIndex(const char *pszFname, int nIndexNo, const char *pszVal){    TABFile     oTABFile;    TABINDFile  *poINDFile;    /*---------------------------------------------------------------------     * Try to open source file     *--------------------------------------------------------------------*/    if (oTABFile.Open(pszFname, "rb") != 0)    {        printf("Failed to open %s as a TABFile.\n", pszFname);        return -1;    }    /*---------------------------------------------------------------------     * Fetch IND file handle     *--------------------------------------------------------------------*/    if ((poINDFile = oTABFile.GetINDFileRef()) == NULL)    {        printf("Dataset %s has no .IND file\n", pszFname);        return -1;    }    /*---------------------------------------------------------------------     * Search the index.     * For now we search only 'char' index types!!!     *--------------------------------------------------------------------*/    GByte *pKey;    int nRecordNo;    pKey = poINDFile->BuildKey(nIndexNo, pszVal);    nRecordNo = poINDFile->FindFirst(nIndexNo, pKey);    if (nRecordNo < 1)    {        printf("Value '%s' not found in index #%d\n", pszVal, nIndexNo);    }    else    {        while(nRecordNo > 0)        {            printf("Record %d...\n", nRecordNo);            nRecordNo = poINDFile->FindNext(nIndexNo, pKey);        }    }    /*---------------------------------------------------------------------     * Cleanup and exit.     *--------------------------------------------------------------------*/    oTABFile.Close();    return 0;}/********************************************************************** *                          DumpViaSpatialIndex() * * Open a .TAB file and print all the geogr. objects that match the  * specified filter.  Scanes the file via the spatial index. **********************************************************************/static int DumpViaSpatialIndex(const char *pszFname,                                double dXMin, double dYMin,                                double dXMax, double dYMax){    IMapInfoFile  *poFile;    TABFeature *poFeature;    /*---------------------------------------------------------------------     * Try to open source file     *--------------------------------------------------------------------*/    if ((poFile = IMapInfoFile::SmartOpen(pszFname)) == NULL)    {        printf("Failed to open %s\n", pszFname);        return -1;    }    poFile->Dump();    /*---------------------------------------------------------------------     * Check for indexed fields     *--------------------------------------------------------------------*/    for(int iField=0; iField<poFile->GetLayerDefn()->GetFieldCount(); iField++)    {        if (poFile->IsFieldIndexed(iField))            printf("  Field %d is indexed\n", iField);    }    /*---------------------------------------------------------------------     * Set spatial filter     *--------------------------------------------------------------------*/    OGRLinearRing oSpatialFilter;    oSpatialFilter.setNumPoints(5);    oSpatialFilter.setPoint(0, dXMin, dYMin);    oSpatialFilter.setPoint(1, dXMax, dYMin);    oSpatialFilter.setPoint(2, dXMax, dYMax);    oSpatialFilter.setPoint(3, dXMin, dYMax);    oSpatialFilter.setPoint(4, dXMin, dYMin);    poFile->SetSpatialFilter( &oSpatialFilter );    /*---------------------------------------------------------------------     * Read/Dump objects until EOF is reached     *--------------------------------------------------------------------*/    while ( (poFeature = (TABFeature*)poFile->GetNextFeature()) != NULL )    {//        poFeature->DumpReadable(stdout);        printf("\nFeature %ld:\n", poFeature->GetFID());        poFeature->DumpMID();        poFeature->DumpMIF();    }    /*---------------------------------------------------------------------     * Cleanup and exit.     *--------------------------------------------------------------------*/    poFile->Close();    delete poFile;    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -