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

📄 allproj.cpp

📁 mitab,读取MapInfo的地图文件
💻 CPP
字号:
/* allproj.cpp
 *
 * Create one MIF file for each projection definition in mapinfow.prj
 *
 *
 * Reads mapinfow.prj in current directory and writes all mif files to 
 * same dir.
 *
 * $Id: allproj.cpp,v 1.1 2001/01/23 21:23:41 daniel Exp $
 *
 * $Log: allproj.cpp,v $
 * Revision 1.1  2001/01/23 21:23:41  daniel
 * Added projection bounds lookup table, called from TABFile::SetProjInfo()
 *
 */

#include "cpl_string.h"

int main()
{
    FILE *fpIn, *fpOut;
    const char *pszLine = NULL;
    int iFile = 0;

    if ((fpIn = fopen("mapinfow.prj", "r")) == NULL)
    {
        printf("mapinfow.prj not found.\n");
        exit(1);
    }

    while((pszLine = CPLReadLine(fpIn)) != NULL)
    {
        char **papszParams = CSLTokenizeStringComplex(pszLine, " ,", TRUE,FALSE);
        if (CSLCount(papszParams) >= 3 && 
            !EQUALN(papszParams[0], "---", 3))
        {
            int nProj = 0;
            int nDatum= 0;
            int nUnitsParamIndex = 0;

            if ((fpOut = fopen(CPLSPrintf("tttproj%04.4d.mif", iFile), "w")) == NULL)
            {
                printf("Failed creating MIF output file!\n");
                exit(2);
            }

            nProj = atoi(papszParams[1]);
            nDatum = atoi(papszParams[2]);
            if (nProj >= 1000)
            {
                printf("File tttproj%04.4d.mif uses projection %d ... \n"
                       "this case is not handled properly by this version\n",
                       iFile, nProj);
            }

            if (nProj == 1)
                nUnitsParamIndex = -1;  // No units for geographic proj.
            else if (nProj == 0)
            {
                nUnitsParamIndex = 2;   // NonEarth... units only.
                printf("File tttproj%04.4d.mif is NonEarth\n", iFile); 
            }
            else if (nDatum == 999 || nDatum == 9999)
            {
                nUnitsParamIndex = -1;  // Custom datum defn= 9999,x,x,x,x,...
                                        // Units are in numeric fmt
                                        // No conversion required.
                printf("File tttproj%04.4d.mif has custom datum\n", iFile); 
            }
            else
                nUnitsParamIndex = 3;

            fprintf(fpOut, "Version 300\n");
            fprintf(fpOut, "Charset \"WindowsLatin1\"\n");
            fprintf(fpOut, "Delimiter \",\"\n");
            if (nProj == 0)
                fprintf(fpOut, "CoordSys Nonearth ");
            else
                fprintf(fpOut, "CoordSys Earth Projection %d", nProj);

            for(int i=2; papszParams[i]!=NULL; i++)
            {
                if (i == nUnitsParamIndex)
                {
                    // Units string (except for proj=1: geographic)
                    const char *pszUnits = "???";
                    switch(atoi(papszParams[i]))
                    {
                      case 6:
                        pszUnits = "cm";
                        break;
                      case 31:
                        pszUnits = "ch";
                        break;
                      case 3:
                        pszUnits = "ft";
                        break;
                      case 2:
                        pszUnits = "in";
                        break;
                      case 1:
                        pszUnits = "km";
                        break;
                      case 30:
                        pszUnits = "li";
                        break;
                      case 7:
                        pszUnits = "m";
                        break;
                      case 0:
                        pszUnits = "mi";
                        break;
                      case 5:
                        pszUnits = "mm";
                        break;
                      case 9:
                        pszUnits = "nmi";
                        break;
                      case 32:
                        pszUnits = "rd";
                        break;
                      case 8:
                        pszUnits = "survey ft";
                        break;
                      case 4:
                        pszUnits = "yd";
                        break;
                      default:
                        printf("WARNING: Unsupported units type: %s in\n%s\n", papszParams[i], pszLine);
                        pszUnits = "m";
                        break;
                    }
                    if (nProj == 0)
                        fprintf(fpOut, "Units \"%s\" Bounds (-1,-1)(1,1)", pszUnits);
                    else
                        fprintf(fpOut, ", \"%s\"", pszUnits);
                }
                else
                    fprintf(fpOut, ", %s", papszParams[i]);
            }
            fprintf(fpOut, "\n");

            fprintf(fpOut, "Columns 1\n");
            fprintf(fpOut, "  ttt Char(10)\n");
            fprintf(fpOut, "Data\n");
            fprintf(fpOut, "POINT 0 0\n");

            fclose(fpOut);

            if ((fpOut = fopen(CPLSPrintf("tttproj%04.4d.mid", iFile++), "w")))
            {
                fprintf(fpOut, "ttt\n");
                fclose(fpOut);
            }

        }
        CSLDestroy(papszParams);
    }

}

⌨️ 快捷键说明

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