📄 mitab_feature_mif.cpp
字号:
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 = NULL; // Read optional SYMBOL line... pszLine = fp->GetLastLine(); if( pszLine != NULL ) papszToken = CSLTokenizeStringComplex(pszLine," ,()\t", TRUE,FALSE); if (CSLCount(papszToken) == 4 && EQUAL(papszToken[0], "SYMBOL") ) { SetSymbolNo(atoi(papszToken[1])); SetSymbolColor(atoi(papszToken[2])); SetSymbolSize(atoi(papszToken[3])); } CSLDestroy(papszToken); papszToken = NULL; // scan until we reach 1st line of next feature // Since SYMBOL is optional, we have to test IsValidFeature() on that // line as well. while (pszLine && fp->IsValidFeature(pszLine) == FALSE) { pszLine = fp->GetLine(); } poGeometry = new OGRPoint(dfX, dfY); SetGeometryDirectly(poGeometry); SetMBR(dfX, dfY, dfX, dfY); return 0; }/********************************************************************** * **********************************************************************/int TABPoint::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, "TABPoint: Missing or Invalid Geometry!"); return -1; } fp->WriteLine("Point %.16g %.16g\n",poPoint->getX(),poPoint->getY()); fp->WriteLine(" Symbol (%d,%d,%d)\n",GetSymbolNo(),GetSymbolColor(), GetSymbolSize()); return 0; }/********************************************************************** * **********************************************************************/int TABFontPoint::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) !=7) { CSLDestroy(papszToken); return -1; } SetSymbolNo(atoi(papszToken[1])); SetSymbolColor(atoi(papszToken[2])); SetSymbolSize(atoi(papszToken[3])); SetFontName(papszToken[4]); SetFontStyleMIFValue(atoi(papszToken[5])); SetSymbolAngle(atof(papszToken[6])); 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 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,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -