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

📄 mitab_feature_mif.cpp

📁 GIS系统支持库Geospatial Data Abstraction Library代码.GDAL is a translator library for raster geospatial dat
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    poGeometry = new OGRPoint(dfX, dfY);        SetGeometryDirectly(poGeometry);    SetMBR(dfX, dfY, dfX, dfY);    /* Go to the first line of the next feature */    while (((pszLine = fp->GetLine()) != NULL) &&            fp->IsValidFeature(pszLine) == FALSE)      ;    return 0; }/********************************************************************** * **********************************************************************/int TABFontPoint::WriteGeometryToMIFFile(MIDDATAFile *fp){     OGRGeometry         *poGeom;    OGRPoint            *poPoint;     /*-----------------------------------------------------------------     * Fetch and validate geometry     *----------------------------------------------------------------*/    poGeom = GetGeometryRef();    if (poGeom && wkbFlatten(poGeom->getGeometryType()) == wkbPoint)        poPoint = (OGRPoint*)poGeom;    else    {        CPLError(CE_Failure, CPLE_AssertionFailed,                 "TABFontPoint: Missing or Invalid Geometry!");        return -1;    }    fp->WriteLine("Point %.16g %.16g\n",poPoint->getX(),poPoint->getY());    fp->WriteLine("    Symbol (%d,%d,%d,\"%s\",%d,%.16g)\n",                  GetSymbolNo(),GetSymbolColor(),                  GetSymbolSize(),GetFontNameRef(),GetFontStyleMIFValue(),                  GetSymbolAngle());    return 0; }/********************************************************************** * **********************************************************************/int TABCustomPoint::ReadGeometryFromMIFFile(MIDDATAFile *fp){       OGRGeometry         *poGeometry;        char               **papszToken;    const char          *pszLine;    double               dfX,dfY;    papszToken = CSLTokenizeString2(fp->GetSavedLine(),                                     " \t", CSLT_HONOURSTRINGS);        if (CSLCount(papszToken) !=3)    {        CSLDestroy(papszToken);        return -1;    }    dfX = fp->GetXTrans(atof(papszToken[1]));    dfY = fp->GetYTrans(atof(papszToken[2]));    CSLDestroy(papszToken);        papszToken = CSLTokenizeStringComplex(fp->GetLastLine()," ,()\t",                                          TRUE,FALSE);    if (CSLCount(papszToken) !=5)    {                CSLDestroy(papszToken);        return -1;    }        SetFontName(papszToken[1]);    SetSymbolColor(atoi(papszToken[2]));    SetSymbolSize(atoi(papszToken[3]));    m_nCustomStyle = atoi(papszToken[4]);        CSLDestroy(papszToken);        poGeometry = new OGRPoint(dfX, dfY);        SetGeometryDirectly(poGeometry);    SetMBR(dfX, dfY, dfX, dfY);    /* Go to the first line of the next feature */    while (((pszLine = fp->GetLine()) != NULL) &&            fp->IsValidFeature(pszLine) == FALSE)      ;     return 0; }/********************************************************************** * **********************************************************************/int TABCustomPoint::WriteGeometryToMIFFile(MIDDATAFile *fp){     OGRGeometry         *poGeom;    OGRPoint            *poPoint;     /*-----------------------------------------------------------------     * Fetch and validate geometry     *----------------------------------------------------------------*/    poGeom = GetGeometryRef();    if (poGeom && wkbFlatten(poGeom->getGeometryType()) == wkbPoint)        poPoint = (OGRPoint*)poGeom;    else    {        CPLError(CE_Failure, CPLE_AssertionFailed,                 "TABCustomPoint: Missing or Invalid Geometry!");        return -1;    }     fp->WriteLine("Point %.16g %.16g\n",poPoint->getX(),poPoint->getY());    fp->WriteLine("    Symbol (\"%s\",%d,%d,%d)\n",GetFontNameRef(),                  GetSymbolColor(), GetSymbolSize(),m_nCustomStyle);    return 0; }/********************************************************************** * **********************************************************************/int TABPolyline::ReadGeometryFromMIFFile(MIDDATAFile *fp){    const char          *pszLine;    char               **papszToken;    OGRLineString       *poLine;    OGRMultiLineString  *poMultiLine;    GBool                bMultiple = FALSE;    int                  nNumPoints,nNumSec=0,i,j;    OGREnvelope          sEnvelope;        papszToken = CSLTokenizeString2(fp->GetLastLine(),                                     " \t", CSLT_HONOURSTRINGS);        if (CSLCount(papszToken) < 1)    {        CSLDestroy(papszToken);        return -1;    }    if (EQUALN(papszToken[0],"LINE",4))    {        if (CSLCount(papszToken) != 5)          return -1;        poLine = new OGRLineString();        poLine->setNumPoints(2);        poLine->setPoint(0, fp->GetXTrans(atof(papszToken[1])),                         fp->GetYTrans(atof(papszToken[2])));        poLine->setPoint(1, fp->GetXTrans(atof(papszToken[3])),                         fp->GetYTrans(atof(papszToken[4])));        SetGeometryDirectly(poLine);        poLine->getEnvelope(&sEnvelope);        SetMBR(sEnvelope.MinX, sEnvelope.MinY,sEnvelope.MaxX,sEnvelope.MaxY);    }    else if (EQUALN(papszToken[0],"PLINE",5))    {        switch (CSLCount(papszToken))        {          case 1:            bMultiple = FALSE;            pszLine = fp->GetLine();            nNumPoints = atoi(pszLine);            break;          case 2:            bMultiple = FALSE;            nNumPoints = atoi(papszToken[1]);            break;          case 3:            if (EQUALN(papszToken[1],"MULTIPLE",8))            {                bMultiple = TRUE;                nNumSec = atoi(papszToken[2]);                pszLine = fp->GetLine();                nNumPoints = atoi(pszLine);                break;            }            else            {              CSLDestroy(papszToken);              return -1;            }            break;          case 4:            if (EQUALN(papszToken[1],"MULTIPLE",8))            {                bMultiple = TRUE;                nNumSec = atoi(papszToken[2]);                nNumPoints = atoi(papszToken[3]);                break;            }            else            {                CSLDestroy(papszToken);                return -1;            }            break;          default:            CSLDestroy(papszToken);            return -1;            break;        }        if (bMultiple)        {            poMultiLine = new OGRMultiLineString();            for (j=0;j<nNumSec;j++)            {                poLine = new OGRLineString();                if (j != 0)                    nNumPoints = atoi(fp->GetLine());                if (nNumPoints < 2)                {                    CPLError(CE_Failure, CPLE_FileIO,                             "Invalid number of vertices (%d) in PLINE "                             "MULTIPLE segment.", nNumPoints);                    return -1;                }                poLine->setNumPoints(nNumPoints);                for (i=0;i<nNumPoints;i++)                {                    CSLDestroy(papszToken);                    papszToken = CSLTokenizeString2(fp->GetLine(),                                                     " \t", CSLT_HONOURSTRINGS);                    poLine->setPoint(i,fp->GetXTrans(atof(papszToken[0])),                                     fp->GetYTrans(atof(papszToken[1])));                }                if (poMultiLine->addGeometryDirectly(poLine) != OGRERR_NONE)                {                    CPLAssert(FALSE); // Just in case OGR is modified                }            }            if (SetGeometryDirectly(poMultiLine) != OGRERR_NONE)            {                CPLAssert(FALSE); // Just in case OGR is modified            }            poMultiLine->getEnvelope(&sEnvelope);            SetMBR(sEnvelope.MinX, sEnvelope.MinY,                   sEnvelope.MaxX,sEnvelope.MaxY);        }        else        {            poLine = new OGRLineString();            poLine->setNumPoints(nNumPoints);            for (i=0;i<nNumPoints;i++)            {                CSLDestroy(papszToken);                papszToken = CSLTokenizeString2(fp->GetLine(),                                                 " \t", CSLT_HONOURSTRINGS);                    if (CSLCount(papszToken) != 2)                  return -1;                poLine->setPoint(i,fp->GetXTrans(atof(papszToken[0])),                                 fp->GetYTrans(atof(papszToken[1])));            }            SetGeometryDirectly(poLine);            poLine->getEnvelope(&sEnvelope);            SetMBR(sEnvelope.MinX, sEnvelope.MinY,                   sEnvelope.MaxX,sEnvelope.MaxY);        }    }            CSLDestroy(papszToken);    papszToken = NULL;        while (((pszLine = fp->GetLine()) != NULL) &&            fp->IsValidFeature(pszLine) == FALSE)    {        papszToken = CSLTokenizeStringComplex(pszLine,"() ,",                                              TRUE,FALSE);                if (CSLCount(papszToken) >= 1)        {            if (EQUALN(papszToken[0],"PEN",3))            {                                if (CSLCount(papszToken) == 4)                {                                       SetPenWidthMIF(atoi(papszToken[1]));                    SetPenPattern(atoi(papszToken[2]));                    SetPenColor(atoi(papszToken[3]));                }                            }            else if (EQUALN(papszToken[0],"SMOOTH",6))            {                m_bSmooth = TRUE;            }                     }        CSLDestroy(papszToken);    }    return 0; }/********************************************************************** * **********************************************************************/int TABPolyline::WriteGeometryToMIFFile(MIDDATAFile *fp){     OGRGeometry   *poGeom;    OGRMultiLineString *poMultiLine = NULL;    OGRLineString *poLine = NULL;    int nNumPoints,i;      /*-----------------------------------------------------------------     * Fetch and validate geometry     *----------------------------------------------------------------*/    poGeom = GetGeometryRef();    if (poGeom && wkbFlatten(poGeom->getGeometryType()) == wkbLineString)    {        /*-------------------------------------------------------------         * Simple polyline         *------------------------------------------------------------*/        poLine = (OGRLineString*)poGeom;        nNumPoints = poLine->getNumPoints();        if (nNumPoints == 2)        {            fp->WriteLine("Line %.16g %.16g %.16g %.16g\n",poLine->getX(0),poLine->getY(0),                          poLine->getX(1),poLine->getY(1));        }        else        {                        fp->WriteLine("Pline %d\n",nNumPoints);            for (i=0;i<nNumPoints;i++)            {                fp->WriteLine("%.16g %.16g\n",poLine->getX(i),poLine->getY(i));            }        }    }    else if (poGeom && wkbFlatten(poGeom->getGeometryType()) == wkbMultiLineString)    {        /*-------------------------------------------------------------         * Multiple polyline... validate all components         *------------------------------------------------------------*/        int iLine, numLines;        poMultiLine = (OGRMultiLineString*)poGeom;        numLines = poMultiLine->getNumGeometries();        fp->WriteLine("PLINE MULTIPLE %d\n", numLines);        for(iLine=0; iLine < numLines; iLine++)        {            poGeom = poMultiLine->getGeometryRef(iLine);            if (poGeom && wkbFlatten(poGeom->getGeometryType()) == wkbLineString)            {                 poLine = (OGRLineString*)poGeom;                nNumPoints = poLine->getNumPoints();                        fp->WriteLine("  %d\n",nNumPoints);                for (i=0;i<nNumPoints;i++)                {                    fp->WriteLine("%.16g %.16g\n",poLine->getX(i),poLine->getY(i));                }            }            else            {                CPLError(CE_Failure, CPLE_AssertionFailed,                         "TABPolyline: Object contains an invalid Geometry!");            }        }    }    else    {        CPLError(CE_Failure, CPLE_AssertionFailed,                 "TABPolyline: Missing or Invalid Geometry!");    }        if (GetPenPattern())      fp->WriteLine("    Pen (%d,%d,%d)\n",GetPenWidthMIF(),GetPenPattern(),                    GetPenColor());    if (m_bSmooth)      fp->WriteLine("    Smooth\n");    return 0; }/********************************************************************** *                   TABRegion::ReadGeometryFromMIFFile()

⌨️ 快捷键说明

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