📄 mitab_feature_mif.cpp
字号:
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 %.15g %.15g\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 %.15g %.15g\n",poPoint->getX(),poPoint->getY());
fp->WriteLine(" Symbol (%d,%d,%d,\"%s\",%d,%.15g)\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 %.15g %.15g\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);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -