📄 mitab_miffile.cpp
字号:
// {
// dXMin = atof(papszFields[++iBounds]);
// dYMin = atof(papszFields[++iBounds]);
// dXMax = atof(papszFields[++iBounds]);
// dYMax = atof(papszFields[++iBounds]);
// bBoundsSet = TRUE;
// }
// CSLDestroy( papszFields );
}
else if (EQUALN(pszLine,"TRANSFORM",9))
{
// papszToken = CSLTokenizeStringComplex(pszLine," ,\t",TRUE,FALSE);
// bColumns = FALSE; bCoordSys = FALSE;
//
// if (CSLCount(papszToken) == 5)
// {
// dfXMultiplier = atof(papszToken[1]);
// dfYMultiplier = atof(papszToken[2]);
// dfXDisplacement = atof(papszToken[3]);
// dfYDisplacement = atof(papszToken[4]);
//
// if (dfXMultiplier == 0.0)
// dfXMultiplier = 1.0;
// if (dfYMultiplier == 0.0)
// dfYMultiplier = 1.0;
// }
// CSLDestroy(papszToken);
}
else if (EQUALN(pszLine,"COLUMNS",7))
{
papszToken = CSLTokenizeStringComplex(pszLine," ()\t",TRUE,FALSE);
bCoordSys = FALSE;
bColumns = TRUE;
if (CSLCount(papszToken) == 2)
{
nColumns = atoi(papszToken[1]);
nAttribut = nColumns;
if (m_paeFieldTypeMy == NULL){
m_paeFieldTypeMy = new TABFieldType[nAttribut];
}
}
else
{
bColumns = FALSE;
nAttribut = 0;
}
CSLDestroy(papszToken);
}
else if (bColumns == TRUE && nColumns >0)
{
if (nColumns == 0)
{
// Permit to 0 columns
bColumns = FALSE;
}
else if (AddFields(poFeaDfn, pszLine) == 0)
{
nColumns--;
if (nColumns == 0)
bColumns = FALSE;
}
else
{
bColumns = FALSE;
}
}
else if (bCoordSys == TRUE)
{
// pszTmp = pszCoordSys;
// pszCoordSys = CPLStrdup(CPLSPrintf("%s %s",pszCoordSys,
// pszLine));
// CPLFree(pszTmp);
//printf("Reading CoordSys\n");
// Reading CoordSys
}
}
//paeFieldType = paeFieldTypeTemp;
return 0;
}/************************************************************************//* AddFields() *//************************************************************************/int MIFFile::AddFields(const char *pszLine){ char **papszToken; int nStatus = 0,numTok; CPLAssert(m_bHeaderWrote == FALSE); papszToken = CSLTokenizeStringComplex(pszLine," (,)\t",TRUE,FALSE); numTok = CSLCount(papszToken); if (numTok >= 3 && EQUAL(papszToken[1], "char")) { /*------------------------------------------------- * CHAR type *------------------------------------------------*/ nStatus = AddFieldNative(papszToken[0], TABFChar, atoi(papszToken[2])); } else if (numTok >= 2 && EQUAL(papszToken[1], "integer")) { /*------------------------------------------------- * INTEGER type *------------------------------------------------*/ nStatus = AddFieldNative(papszToken[0], TABFInteger); } else if (numTok >= 2 && EQUAL(papszToken[1], "smallint")) { /*------------------------------------------------- * SMALLINT type *------------------------------------------------*/ nStatus = AddFieldNative(papszToken[0], TABFSmallInt); } else if (numTok >= 4 && EQUAL(papszToken[1], "decimal")) { /*------------------------------------------------- * DECIMAL type *------------------------------------------------*/ nStatus = AddFieldNative(papszToken[0], TABFDecimal, atoi(papszToken[2]), atoi(papszToken[3])); } else if (numTok >= 2 && EQUAL(papszToken[1], "float")) { /*------------------------------------------------- * FLOAT type *------------------------------------------------*/ nStatus = AddFieldNative(papszToken[0], TABFFloat); } else if (numTok >= 2 && EQUAL(papszToken[1], "date")) { /*------------------------------------------------- * DATE type (returned as a string: "DD/MM/YYYY") *------------------------------------------------*/ nStatus = AddFieldNative(papszToken[0], TABFDate); } else if (numTok >= 2 && EQUAL(papszToken[1], "logical")) { /*------------------------------------------------- * LOGICAL type (value "T" or "F") *------------------------------------------------*/ nStatus = AddFieldNative(papszToken[0], TABFLogical); } else nStatus = -1; // Unrecognized field type or line corrupt CSLDestroy(papszToken); papszToken = NULL; if (nStatus != 0) { CPLError(CE_Failure, CPLE_FileIO, "Failed to parse field definition in file %s", m_pszFname); return -1; } return 0;}
/************************************************************************/
/* 增加一个字段信息 */
/************************************************************************/
int MIFFile::AddFields(OGRFeatureDefn* poFeaDfn, const char *pszLine)
{
char **papszToken;
int nStatus = 0,numTok;
papszToken = CSLTokenizeStringComplex(pszLine," (,)\t",TRUE,FALSE);
numTok = CSLCount(papszToken);
if (numTok >= 3 && EQUAL(papszToken[1], "char"))
{
/*-------------------------------------------------
* CHAR type
*------------------------------------------------*/
nStatus = AddFieldNativeEx(poFeaDfn, papszToken[0], TABFChar,
atoi(papszToken[2]));
}
else if (numTok >= 2 && EQUAL(papszToken[1], "integer"))
{
/*-------------------------------------------------
* INTEGER type
*------------------------------------------------*/
nStatus = AddFieldNativeEx(poFeaDfn, papszToken[0], TABFInteger);
}
else if (numTok >= 2 && EQUAL(papszToken[1], "smallint"))
{
/*-------------------------------------------------
* SMALLINT type
*------------------------------------------------*/
nStatus = AddFieldNativeEx(poFeaDfn, papszToken[0], TABFSmallInt);
}
else if (numTok >= 4 && EQUAL(papszToken[1], "decimal"))
{
/*-------------------------------------------------
* DECIMAL type
*------------------------------------------------*/
nStatus = AddFieldNativeEx(poFeaDfn, papszToken[0], TABFDecimal,
atoi(papszToken[2]), atoi(papszToken[3]));
}
else if (numTok >= 2 && EQUAL(papszToken[1], "float"))
{
/*-------------------------------------------------
* FLOAT type
*------------------------------------------------*/
nStatus = AddFieldNativeEx(poFeaDfn, papszToken[0], TABFFloat);
}
else if (numTok >= 2 && EQUAL(papszToken[1], "date"))
{
/*-------------------------------------------------
* DATE type (returned as a string: "DD/MM/YYYY")
*------------------------------------------------*/
nStatus = AddFieldNativeEx(poFeaDfn, papszToken[0], TABFDate);
}
else if (numTok >= 2 && EQUAL(papszToken[1], "logical"))
{
/*-------------------------------------------------
* LOGICAL type (value "T" or "F")
*------------------------------------------------*/
nStatus = AddFieldNativeEx(poFeaDfn, papszToken[0], TABFLogical);
}
else
nStatus = -1; // Unrecognized field type or line corrupt
CSLDestroy(papszToken);
papszToken = NULL;
if (nStatus != 0)
{
return -1;
}
return 0;
}/************************************************************************//* GetFeatureCount() *//************************************************************************/int MIFFile::GetFeatureCount (int bForce){ if( m_poFilterGeom != NULL || m_poAttrQuery != NULL ) return OGRLayer::GetFeatureCount( bForce ); else { if (bForce == TRUE) PreParseFile(); if (m_bPreParsed) return m_nFeatureCount; else return -1; }}/************************************************************************//* ResetReading() *//************************************************************************/void MIFFile::ResetReading(){ const char *pszLine; m_poMIFFile->Rewind(); while ((pszLine = m_poMIFFile->GetLine()) != NULL) if (EQUALN(pszLine,"DATA",4)) break; while ((pszLine = m_poMIFFile->GetLine()) != NULL) { if (m_poMIFFile->IsValidFeature(pszLine)) break; } m_poMIDFile->Rewind(); m_poMIDFile->GetLine(); // We're positioned on first feature. Feature Ids start at 1. if (m_poCurFeature) { delete m_poCurFeature; m_poCurFeature = NULL; } m_nCurFeatureId = 0; m_nPreloadedId = 1;}/************************************************************************//* PreParseFile() *//************************************************************************/void MIFFile::PreParseFile(){ char **papszToken = NULL; const char *pszLine; GBool bPLine = FALSE; GBool bText = FALSE; if (m_bPreParsed == TRUE) return; m_poMIFFile->Rewind(); while ((pszLine = m_poMIFFile->GetLine()) != NULL) if (EQUALN(pszLine,"DATA",4)) break; m_nPoints = m_nLines = m_nRegions = m_nTexts = 0; while ((pszLine = m_poMIFFile->GetLine()) != NULL) { if (m_poMIFFile->IsValidFeature(pszLine)) { bPLine = FALSE; bText = FALSE; m_nFeatureCount++; } CSLDestroy(papszToken); papszToken = CSLTokenizeString(pszLine); if (EQUALN(pszLine,"POINT",5)) { m_nPoints++; if (CSLCount(papszToken) == 3) { UpdateExtents(m_poMIFFile->GetXTrans(atof(papszToken[1])), m_poMIFFile->GetYTrans(atof(papszToken[2]))); } } else if (EQUALN(pszLine,"LINE",4) || EQUALN(pszLine,"RECT",4) || EQUALN(pszLine,"ROUNDRECT",9) || EQUALN(pszLine,"ARC",3) || EQUALN(pszLine,"ELLIPSE",7)) { if (CSLCount(papszToken) == 5) { m_nLines++; UpdateExtents(m_poMIFFile->GetXTrans(atof(papszToken[1])), m_poMIFFile->GetYTrans(atof(papszToken[2]))); UpdateExtents(m_poMIFFile->GetXTrans(atof(papszToken[3])), m_poMIFFile->GetYTrans(atof(papszToken[4]))); } } else if (EQUALN(pszLine,"REGION",6) ) { m_nRegions++; bPLine = TRUE; } else if( EQUALN(pszLine,"PLINE",5)) { m_nLines++; bPLine = TRUE; } else if (EQUALN(pszLine,"TEXT",4)) { m_nTexts++; bText = TRUE; } else if (bPLine == TRUE) { if (CSLCount(papszToken) == 2 && strchr("-.0123456789", papszToken[0][0]) != NULL) { UpdateExtents( m_poMIFFile->GetXTrans(atof(papszToken[0])), m_poMIFFile->GetYTrans(atof(papszToken[1]))); } } else if (bText == TRUE) { if (CSLCount(papszToken) == 4 && strchr("-.0123456789", papszToken[0][0]) != NULL) { UpdateExtents(m_poMIFFile->GetXTrans(atof(papszToken[0])), m_poMIFFile->GetYTrans(atof(papszToken[1]))); UpdateExtents(m_poMIFFile->GetXTrans(atof(papszToken[2])), m_poMIFFile->GetYTrans(atof(papszToken[3]))); } } } CSLDestroy(papszToken); m_poMIFFile->Rewind(); while ((pszLine = m_poMIFFile->GetLine()) != NULL)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -