本文整理汇总了C++中OGRFieldDefn::GetWidth方法的典型用法代码示例。如果您正苦于以下问题:C++ OGRFieldDefn::GetWidth方法的具体用法?C++ OGRFieldDefn::GetWidth怎么用?C++ OGRFieldDefn::GetWidth使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类OGRFieldDefn
的用法示例。
在下文中一共展示了OGRFieldDefn::GetWidth方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
OGRErr OGRLayerWithTransaction::AlterFieldDefn( int iField,
OGRFieldDefn* poNewFieldDefn,
int nFlags )
{
if( !m_poDecoratedLayer ) return OGRERR_FAILURE;
OGRErr eErr = m_poDecoratedLayer->AlterFieldDefn(iField, poNewFieldDefn, nFlags);
if( m_poFeatureDefn && eErr == OGRERR_NONE )
{
OGRFieldDefn* poSrcFieldDefn = m_poDecoratedLayer->GetLayerDefn()->GetFieldDefn(iField);
OGRFieldDefn* poDstFieldDefn = m_poFeatureDefn->GetFieldDefn(iField);
poDstFieldDefn->SetName(poSrcFieldDefn->GetNameRef());
poDstFieldDefn->SetType(poSrcFieldDefn->GetType());
poDstFieldDefn->SetSubType(poSrcFieldDefn->GetSubType());
poDstFieldDefn->SetWidth(poSrcFieldDefn->GetWidth());
poDstFieldDefn->SetPrecision(poSrcFieldDefn->GetPrecision());
poDstFieldDefn->SetDefault(poSrcFieldDefn->GetDefault());
poDstFieldDefn->SetNullable(poSrcFieldDefn->IsNullable());
}
return eErr;
}
示例2: main
//.........这里部分代码省略.........
poFeatureDefn = poLayer->GetLayerDefn()->Clone();
}
else if ( !accept_different_schemas )
{
OGRFeatureDefn* poFeatureDefnCur = poLayer->GetLayerDefn();
assert(NULL != poFeatureDefnCur);
int fieldCount = poFeatureDefnCur->GetFieldCount();
if( fieldCount != poFeatureDefn->GetFieldCount())
{
fprintf( stderr, "Number of attributes of layer %s of %s does not match ... skipping it.\n",
poLayer->GetLayerDefn()->GetName(), papszArgv[nFirstSourceDataset]);
if (bFirstWarningForNonMatchingAttributes)
{
fprintf( stderr, "Note : you can override this behaviour with -accept_different_schemas option\n"
"but this may result in a tileindex incompatible with MapServer\n");
bFirstWarningForNonMatchingAttributes = FALSE;
}
continue;
}
int bSkip = FALSE;
for( int fn = 0; fn < poFeatureDefnCur->GetFieldCount(); fn++ )
{
OGRFieldDefn* poField = poFeatureDefn->GetFieldDefn(fn);
OGRFieldDefn* poFieldCur = poFeatureDefnCur->GetFieldDefn(fn);
/* XXX - Should those pointers be checked against NULL? */
assert(NULL != poField);
assert(NULL != poFieldCur);
if( poField->GetType() != poFieldCur->GetType()
|| poField->GetWidth() != poFieldCur->GetWidth()
|| poField->GetPrecision() != poFieldCur->GetPrecision()
|| !EQUAL( poField->GetNameRef(), poFieldCur->GetNameRef() ) )
{
fprintf( stderr, "Schema of attributes of layer %s of %s does not match ... skipping it.\n",
poLayer->GetLayerDefn()->GetName(), papszArgv[nFirstSourceDataset]);
if (bFirstWarningForNonMatchingAttributes)
{
fprintf( stderr, "Note : you can override this behaviour with -accept_different_schemas option\n"
"but this may result in a tileindex incompatible with MapServer\n");
bFirstWarningForNonMatchingAttributes = FALSE;
}
bSkip = TRUE;
break;
}
}
if (bSkip)
continue;
}
/* -------------------------------------------------------------------- */
/* Get layer extents, and create a corresponding polygon */
/* geometry. */
/* -------------------------------------------------------------------- */
OGREnvelope sExtents;
OGRPolygon oRegion;
OGRLinearRing oRing;
if( poLayer->GetExtent( &sExtents, TRUE ) != OGRERR_NONE )
{
fprintf( stderr, "GetExtent() failed on layer %s of %s, skipping.\n",
示例3: MITABLoadCoordSysTable
//.........这里部分代码省略.........
}
if (bFoundUniqueField)
poDstFile = new TABView;
else
poDstFile = new TABFile;
}
/*---------------------------------------------------------------------
* Try to open destination file
*--------------------------------------------------------------------*/
if (poDstFile->Open(pszDstFname, "wb") != 0)
{
printf("Failed to open %s\n", pszDstFname);
poSrcFile->Close();
delete poSrcFile;
delete poDstFile;
return -1;
}
if ( (bQuickSpatialIndexMode &&
poDstFile->SetQuickSpatialIndexMode(TRUE) != 0) ||
(bOptSpatialIndexMode &&
poDstFile->SetQuickSpatialIndexMode(FALSE) != 0) )
{
printf("Failed setting Quick Spatial Index Mode (-q|-o) on %s\n", pszDstFname);
poSrcFile->Close();
delete poSrcFile;
poDstFile->Close();
delete poDstFile;
return -1;
}
// Pass Proj. info directly
// TABProjInfo sProjInfo;
// if (poSrcFile->GetProjInfo(&sProjInfo) == 0)
// poDstFile->SetProjInfo(&sProjInfo);
OGRSpatialReference *poSR;
poSR = poSrcFile->GetSpatialRef();
if( poSR != NULL )
{
poDstFile->SetSpatialRef( poSR );
}
// Set bounds (must be done after setting spatialref)
if (poSrcFile->GetBounds(dXMin, dYMin, dXMax, dYMax) == 0)
poDstFile->SetBounds(dXMin, dYMin, dXMax, dYMax);
/*---------------------------------------------------------------------
* Pass compplete fields information
*--------------------------------------------------------------------*/
for(iField=0; iField< poDefn->GetFieldCount(); iField++)
{
OGRFieldDefn *poFieldDefn = poDefn->GetFieldDefn(iField);
poDstFile->AddFieldNative(poFieldDefn->GetNameRef(),
poSrcFile->GetNativeFieldType(iField),
poFieldDefn->GetWidth(),
poFieldDefn->GetPrecision(),
poSrcFile->IsFieldIndexed(iField),
poSrcFile->IsFieldUnique(iField));
}
/*---------------------------------------------------------------------
* Copy objects until EOF is reached
*--------------------------------------------------------------------*/
nFeatureId = -1;
while ( (nFeatureId = poSrcFile->GetNextFeatureId(nFeatureId)) != -1 &&
(nMaxFeatures < 1 || numFeatures++ < nMaxFeatures ))
{
poFeature = poSrcFile->GetFeatureRef(nFeatureId);
if (poFeature)
{
// poFeature->DumpReadable(stdout);
// poFeature->DumpMIF();
poDstFile->CreateFeature(poFeature);
}
else
{
printf( "Failed to read feature %d.\n",
nFeatureId );
return -1; // GetFeatureRef() failed: Error
}
}
/*---------------------------------------------------------------------
* Cleanup and exit.
*--------------------------------------------------------------------*/
poDstFile->Close();
delete poDstFile;
poSrcFile->Close();
delete poSrcFile;
MITABFreeCoordSysTable();
return 0;
}
示例4: ReportOnLayer
static void ReportOnLayer( OGRLayer * poLayer, const char *pszWHERE,
OGRGeometry *poSpatialFilter )
{
OGRFeatureDefn *poDefn = poLayer->GetLayerDefn();
/* -------------------------------------------------------------------- */
/* Set filters if provided. */
/* -------------------------------------------------------------------- */
if( pszWHERE != NULL )
poLayer->SetAttributeFilter( pszWHERE );
if( poSpatialFilter != NULL )
poLayer->SetSpatialFilter( poSpatialFilter );
/* -------------------------------------------------------------------- */
/* Report various overall information. */
/* -------------------------------------------------------------------- */
printf( "\n" );
printf( "Layer name: %s\n", poDefn->GetName() );
if( bVerbose )
{
printf( "Geometry: %s\n",
OGRGeometryTypeToName( poDefn->GetGeomType() ) );
printf( "Feature Count: %d\n", poLayer->GetFeatureCount() );
OGREnvelope oExt;
if (poLayer->GetExtent(&oExt, TRUE) == OGRERR_NONE)
{
printf("Extent: (%f, %f) - (%f, %f)\n",
oExt.MinX, oExt.MinY, oExt.MaxX, oExt.MaxY);
}
char *pszWKT;
if( poLayer->GetSpatialRef() == NULL )
pszWKT = CPLStrdup( "(unknown)" );
else
{
poLayer->GetSpatialRef()->exportToPrettyWkt( &pszWKT );
}
printf( "Layer SRS WKT:\n%s\n", pszWKT );
CPLFree( pszWKT );
if( strlen(poLayer->GetFIDColumn()) > 0 )
printf( "FID Column = %s\n",
poLayer->GetFIDColumn() );
if( strlen(poLayer->GetGeometryColumn()) > 0 )
printf( "Geometry Column = %s\n",
poLayer->GetGeometryColumn() );
for( int iAttr = 0; iAttr < poDefn->GetFieldCount(); iAttr++ )
{
OGRFieldDefn *poField = poDefn->GetFieldDefn( iAttr );
printf( "%s: %s (%d.%d)\n",
poField->GetNameRef(),
poField->GetFieldTypeName( poField->GetType() ),
poField->GetWidth(),
poField->GetPrecision() );
}
}
/* -------------------------------------------------------------------- */
/* Read, and dump features. */
/* -------------------------------------------------------------------- */
OGRFeature *poFeature = NULL;
if( nFetchFID == OGRNullFID && !bSummaryOnly )
{
while( (poFeature = poLayer->GetNextFeature()) != NULL )
{
poFeature->DumpReadable( NULL, papszOptions );
OGRFeature::DestroyFeature( poFeature );
}
}
else if( nFetchFID != OGRNullFID )
{
poFeature = poLayer->GetFeature( nFetchFID );
if( poFeature == NULL )
{
printf( "Unable to locate feature id %d on this layer.\n",
nFetchFID );
}
else
{
poFeature->DumpReadable( NULL, papszOptions );
OGRFeature::DestroyFeature( poFeature );
}
}
}
示例5: ReportOnLayer
//.........这里部分代码省略.........
if (poLayer->GetExtent(iGeom, &oExt, TRUE) == OGRERR_NONE)
{
OGRGeomFieldDefn* poGFldDefn =
poLayer->GetLayerDefn()->GetGeomFieldDefn(iGeom);
CPLprintf("Extent (%s): (%f, %f) - (%f, %f)\n",
poGFldDefn->GetNameRef(),
oExt.MinX, oExt.MinY, oExt.MaxX, oExt.MaxY);
}
}
}
else if ( poLayer->GetExtent(&oExt, TRUE) == OGRERR_NONE)
{
CPLprintf("Extent: (%f, %f) - (%f, %f)\n",
oExt.MinX, oExt.MinY, oExt.MaxX, oExt.MaxY);
}
char *pszWKT;
if( nGeomFieldCount > 1 )
{
for(int iGeom = 0;iGeom < nGeomFieldCount; iGeom ++ )
{
OGRGeomFieldDefn* poGFldDefn =
poLayer->GetLayerDefn()->GetGeomFieldDefn(iGeom);
OGRSpatialReference* poSRS = poGFldDefn->GetSpatialRef();
if( poSRS == NULL )
pszWKT = CPLStrdup( "(unknown)" );
else
{
poSRS->exportToPrettyWkt( &pszWKT );
}
printf( "SRS WKT (%s):\n%s\n",
poGFldDefn->GetNameRef(), pszWKT );
CPLFree( pszWKT );
}
}
else
{
if( poLayer->GetSpatialRef() == NULL )
pszWKT = CPLStrdup( "(unknown)" );
else
{
poLayer->GetSpatialRef()->exportToPrettyWkt( &pszWKT );
}
printf( "Layer SRS WKT:\n%s\n", pszWKT );
CPLFree( pszWKT );
}
if( strlen(poLayer->GetFIDColumn()) > 0 )
printf( "FID Column = %s\n",
poLayer->GetFIDColumn() );
for(int iGeom = 0;iGeom < nGeomFieldCount; iGeom ++ )
{
OGRGeomFieldDefn* poGFldDefn =
poLayer->GetLayerDefn()->GetGeomFieldDefn(iGeom);
if( nGeomFieldCount == 1 &&
EQUAL(poGFldDefn->GetNameRef(), "") && poGFldDefn->IsNullable() )
break;
printf( "Geometry Column ");
if( nGeomFieldCount > 1 )
printf("%d ", iGeom + 1);
if( !poGFldDefn->IsNullable() )
printf("NOT NULL ");
printf("= %s\n", poGFldDefn->GetNameRef() );
}
for( int iAttr = 0; iAttr < poDefn->GetFieldCount(); iAttr++ )
{
OGRFieldDefn *poField = poDefn->GetFieldDefn( iAttr );
const char* pszType = (poField->GetSubType() != OFSTNone) ?
CPLSPrintf("%s(%s)",
poField->GetFieldTypeName( poField->GetType() ),
poField->GetFieldSubTypeName(poField->GetSubType())) :
poField->GetFieldTypeName( poField->GetType() );
printf( "%s: %s (%d.%d)",
poField->GetNameRef(),
pszType,
poField->GetWidth(),
poField->GetPrecision() );
if( !poField->IsNullable() )
printf(" NOT NULL");
if( poField->GetDefault() != NULL )
printf(" DEFAULT %s", poField->GetDefault() );
printf( "\n" );
}
}
/* -------------------------------------------------------------------- */
/* Read, and dump features. */
/* -------------------------------------------------------------------- */
OGRFeature *poFeature = NULL;
while( (poFeature = poLayer->GetNextFeature()) != NULL )
{
poFeature->DumpReadable( NULL );
OGRFeature::DestroyFeature( poFeature );
}
}
示例6: OGRPGTableLayerGetType
static CPLString OGRPGTableLayerGetType(OGRFieldDefn& oField,
int bPreservePrecision,
int bApproxOK)
{
char szFieldType[256];
/* -------------------------------------------------------------------- */
/* Work out the PostgreSQL type. */
/* -------------------------------------------------------------------- */
if( oField.GetType() == OFTInteger )
{
if( oField.GetWidth() > 0 && bPreservePrecision )
sprintf( szFieldType, "NUMERIC(%d,0)", oField.GetWidth() );
else
strcpy( szFieldType, "INTEGER" );
}
else if( oField.GetType() == OFTReal )
{
if( oField.GetWidth() > 0 && oField.GetPrecision() > 0
&& bPreservePrecision )
sprintf( szFieldType, "NUMERIC(%d,%d)",
oField.GetWidth(), oField.GetPrecision() );
else
strcpy( szFieldType, "FLOAT8" );
}
else if( oField.GetType() == OFTString )
{
if (oField.GetWidth() > 0 && bPreservePrecision )
sprintf( szFieldType, "VARCHAR(%d)", oField.GetWidth() );
else
strcpy( szFieldType, "VARCHAR");
}
else if( oField.GetType() == OFTIntegerList )
{
strcpy( szFieldType, "INTEGER[]" );
}
else if( oField.GetType() == OFTRealList )
{
strcpy( szFieldType, "FLOAT8[]" );
}
else if( oField.GetType() == OFTStringList )
{
strcpy( szFieldType, "varchar[]" );
}
else if( oField.GetType() == OFTDate )
{
strcpy( szFieldType, "date" );
}
else if( oField.GetType() == OFTTime )
{
strcpy( szFieldType, "time" );
}
else if( oField.GetType() == OFTDateTime )
{
strcpy( szFieldType, "timestamp with time zone" );
}
else if( oField.GetType() == OFTBinary )
{
strcpy( szFieldType, "bytea" );
}
else if( bApproxOK )
{
CPLError( CE_Warning, CPLE_NotSupported,
"Can't create field %s with type %s on PostgreSQL layers. Creating as VARCHAR.",
oField.GetNameRef(),
OGRFieldDefn::GetFieldTypeName(oField.GetType()) );
strcpy( szFieldType, "VARCHAR" );
}
else
{
CPLError( CE_Failure, CPLE_NotSupported,
"Can't create field %s with type %s on PostgreSQL layers.",
oField.GetNameRef(),
OGRFieldDefn::GetFieldTypeName(oField.GetType()) );
strcpy( szFieldType, "");
}
return szFieldType;
}
示例7: WriteFeatureVariableMode
OGRErr OGROCILoaderLayer::WriteFeatureVariableMode( OGRFeature *poFeature )
{
OGROCIStringBuf oLine;
if( fpData == NULL )
return OGRERR_FAILURE;
/* -------------------------------------------------------------------- */
/* Write the FID. */
/* -------------------------------------------------------------------- */
oLine.Append( "00000000" );
oLine.Appendf( 32, " %d|", poFeature->GetFID() );
/* -------------------------------------------------------------------- */
/* Set the geometry */
/* -------------------------------------------------------------------- */
if( poFeature->GetGeometryRef() != NULL)
{
char szSRID[128];
int nGType;
int i;
if( nSRID == -1 )
strcpy( szSRID, "NULL" );
else
sprintf( szSRID, "%d", nSRID );
if( TranslateToSDOGeometry( poFeature->GetGeometryRef(), &nGType )
== OGRERR_NONE )
{
oLine.Appendf( 32, "%d|", nGType );
for( i = 0; i < nElemInfoCount; i++ )
{
oLine.Appendf( 32, "%d|", panElemInfo[i] );
}
oLine.Append( "/" );
for( i = 0; i < nOrdinalCount; i++ )
{
oLine.Appendf( 32, "%.16g|", padfOrdinals[i] );
}
oLine.Append( "/" );
}
else
{
oLine.Append( "0|/|/" );
}
}
else
{
oLine.Append( "0|/|/" );
}
/* -------------------------------------------------------------------- */
/* Set the other fields. */
/* -------------------------------------------------------------------- */
int i;
for( i = 0; i < poFeatureDefn->GetFieldCount(); i++ )
{
OGRFieldDefn *poFldDefn = poFeatureDefn->GetFieldDefn(i);
if( !poFeature->IsFieldSet( i ) )
{
if( poFldDefn->GetType() != OFTInteger
&& poFldDefn->GetType() != OFTReal )
oLine.Append( "0000" );
else
oLine.Append( "|" );
continue;
}
const char *pszStrValue = poFeature->GetFieldAsString(i);
if( poFldDefn->GetType() == OFTInteger
|| poFldDefn->GetType() == OFTReal )
{
if( poFldDefn->GetWidth() > 0 && bPreservePrecision
&& (int) strlen(pszStrValue) > poFldDefn->GetWidth() )
{
ReportTruncation( poFldDefn );
oLine.Append( "|" );
}
else
{
oLine.Append( pszStrValue );
oLine.Append( "|" );
}
}
else
{
int nLength = strlen(pszStrValue);
if( poFldDefn->GetWidth() > 0 && nLength > poFldDefn->GetWidth() )
{
ReportTruncation( poFldDefn );
nLength = poFldDefn->GetWidth();
((char *) pszStrValue)[nLength] = '\0';
}
//.........这里部分代码省略.........
示例8: WriteFeatureStreamMode
OGRErr OGROCILoaderLayer::WriteFeatureStreamMode( OGRFeature *poFeature )
{
/* -------------------------------------------------------------------- */
/* Write the FID. */
/* -------------------------------------------------------------------- */
VSIFPrintf( fpLoader, " %ld|", poFeature->GetFID() );
/* -------------------------------------------------------------------- */
/* Set the geometry */
/* -------------------------------------------------------------------- */
int nLineLen = 0;
if( poFeature->GetGeometryRef() != NULL)
{
char szSRID[128];
int nGType;
int i;
if( nSRID == -1 )
strcpy( szSRID, "NULL" );
else
sprintf( szSRID, "%d", nSRID );
if( TranslateToSDOGeometry( poFeature->GetGeometryRef(), &nGType )
== OGRERR_NONE )
{
VSIFPrintf( fpLoader, "%d|", nGType );
for( i = 0; i < nElemInfoCount; i++ )
{
VSIFPrintf( fpLoader, "%d|", panElemInfo[i] );
if( ++nLineLen > 18 && i < nElemInfoCount-1 )
{
VSIFPrintf( fpLoader, "\n#" );
nLineLen = 0;
}
}
VSIFPrintf( fpLoader, "/" );
for( i = 0; i < nOrdinalCount; i++ )
{
VSIFPrintf( fpLoader, "%.16g|", padfOrdinals[i] );
if( ++nLineLen > 6 && i < nOrdinalCount-1 )
{
VSIFPrintf( fpLoader, "\n#" );
nLineLen = 0;
}
}
VSIFPrintf( fpLoader, "/" );
}
else
{
VSIFPrintf( fpLoader, "0|/|/" );
}
}
else
{
VSIFPrintf( fpLoader, "0|/|/" );
}
/* -------------------------------------------------------------------- */
/* Set the other fields. */
/* -------------------------------------------------------------------- */
int i;
nLineLen = 0;
VSIFPrintf( fpLoader, "\n#" );
for( i = 0; i < poFeatureDefn->GetFieldCount(); i++ )
{
OGRFieldDefn *poFldDefn = poFeatureDefn->GetFieldDefn(i);
if( !poFeature->IsFieldSet( i ) )
{
if( poFldDefn->GetType() != OFTInteger
&& poFldDefn->GetType() != OFTReal )
VSIFPrintf( fpLoader, "%04d", 0 );
continue;
}
const char *pszStrValue = poFeature->GetFieldAsString(i);
if( nLineLen > 70 )
{
VSIFPrintf( fpLoader, "\n#" );
nLineLen = 0;
}
nLineLen += strlen(pszStrValue);
if( poFldDefn->GetType() == OFTInteger
|| poFldDefn->GetType() == OFTReal )
{
if( poFldDefn->GetWidth() > 0 && bPreservePrecision
&& (int) strlen(pszStrValue) > poFldDefn->GetWidth() )
{
ReportTruncation( poFldDefn );
VSIFPrintf( fpLoader, "|" );
}
else
VSIFPrintf( fpLoader, "%s|", pszStrValue );
//.........这里部分代码省略.........
示例9: ReportOnLayer
static void ReportOnLayer( OGRLayer * poLayer, const char *pszWHERE,
OGRGeometry *poSpatialFilter )
{
OGRFeatureDefn *poDefn = poLayer->GetLayerDefn();
/* -------------------------------------------------------------------- */
/* Set filters if provided. */
/* -------------------------------------------------------------------- */
if( pszWHERE != NULL )
poLayer->SetAttributeFilter( pszWHERE );
if( poSpatialFilter != NULL )
poLayer->SetSpatialFilter( poSpatialFilter );
/* -------------------------------------------------------------------- */
/* Report various overall information. */
/* -------------------------------------------------------------------- */
printf( "\n" );
printf( "Layer name: %s\n", poDefn->GetName() );
printf( "Geometry: %s\n",
OGRGeometryTypeToName( poDefn->GetGeomType() ) );
printf( "Feature Count: %d\n", poLayer->GetFeatureCount() );
OGREnvelope oExt;
if (poLayer->GetExtent(&oExt, TRUE) == OGRERR_NONE)
{
printf("Extent: (%f, %f) - (%f, %f)\n",
oExt.MinX, oExt.MinY, oExt.MaxX, oExt.MaxY);
}
if( bVerbose )
{
char *pszWKT;
if( poLayer->GetSpatialRef() == NULL )
pszWKT = CPLStrdup( "(NULL)" );
else
poLayer->GetSpatialRef()->exportToWkt( &pszWKT );
printf( "Layer SRS WKT: %s\n", pszWKT );
CPLFree( pszWKT );
}
for( int iAttr = 0; iAttr < poDefn->GetFieldCount(); iAttr++ )
{
OGRFieldDefn *poField = poDefn->GetFieldDefn( iAttr );
printf( "%s: %s (%d.%d)\n",
poField->GetNameRef(),
poField->GetFieldTypeName( poField->GetType() ),
poField->GetWidth(),
poField->GetPrecision() );
}
/* -------------------------------------------------------------------- */
/* Read, and dump features. */
/* -------------------------------------------------------------------- */
OGRFeature *poFeature;
while( (poFeature = poLayer->GetNextFeature()) != NULL )
{
poFeature->DumpReadable( stdout );
delete poFeature;
}
/* -------------------------------------------------------------------- */
/* Read, and dump features. */
/* -------------------------------------------------------------------- */
#ifdef notdef
OGRFeature *poFeature;
int nId = -1;
while( (nId = poTF->GetNextFeatureId_Spatial(nId)) != -1 )
{
poFeature = poTF->GetFeatureRef( nId );
}
#endif
}
示例10: ReportOnLayer
//.........这里部分代码省略.........
CPLFree(pszWKT);
if( poSRS )
{
displayDataAxisMapping(poSRS);
}
}
}
else
{
char *pszWKT = nullptr;
auto poSRS = poLayer->GetSpatialRef();
if( poSRS == nullptr )
{
pszWKT = CPLStrdup("(unknown)");
}
else
{
poSRS->exportToPrettyWkt(&pszWKT);
}
printf("Layer SRS WKT:\n%s\n", pszWKT);
CPLFree(pszWKT);
if( poSRS )
{
displayDataAxisMapping(poSRS);
}
}
if( strlen(poLayer->GetFIDColumn()) > 0 )
printf("FID Column = %s\n",
poLayer->GetFIDColumn());
for(int iGeom = 0;iGeom < nGeomFieldCount; iGeom ++ )
{
OGRGeomFieldDefn* poGFldDefn =
poLayer->GetLayerDefn()->GetGeomFieldDefn(iGeom);
if( nGeomFieldCount == 1 &&
EQUAL(poGFldDefn->GetNameRef(), "") &&
poGFldDefn->IsNullable() )
break;
printf("Geometry Column ");
if( nGeomFieldCount > 1 )
printf("%d ", iGeom + 1);
if( !poGFldDefn->IsNullable() )
printf("NOT NULL ");
printf("= %s\n", poGFldDefn->GetNameRef());
}
for( int iAttr = 0; iAttr < poDefn->GetFieldCount(); iAttr++ )
{
OGRFieldDefn *poField = poDefn->GetFieldDefn(iAttr);
const char* pszType = (poField->GetSubType() != OFSTNone)
? CPLSPrintf(
"%s(%s)",
poField->GetFieldTypeName(poField->GetType()),
poField->GetFieldSubTypeName(poField->GetSubType()))
: poField->GetFieldTypeName(poField->GetType());
printf("%s: %s (%d.%d)",
poField->GetNameRef(),
pszType,
poField->GetWidth(),
poField->GetPrecision());
if( !poField->IsNullable() )
printf(" NOT NULL");
if( poField->GetDefault() != nullptr )
printf(" DEFAULT %s", poField->GetDefault());
printf("\n");
}
}
/* -------------------------------------------------------------------- */
/* Read, and dump features. */
/* -------------------------------------------------------------------- */
if( nFetchFID == OGRNullFID && !bSummaryOnly )
{
OGRFeature *poFeature = nullptr;
while( (poFeature = poLayer->GetNextFeature()) != nullptr )
{
if( !bSuperQuiet )
poFeature->DumpReadable(nullptr, papszOptions);
OGRFeature::DestroyFeature(poFeature);
}
}
else if( nFetchFID != OGRNullFID )
{
OGRFeature *poFeature = poLayer->GetFeature(nFetchFID);
if( poFeature == nullptr )
{
printf("Unable to locate feature id " CPL_FRMT_GIB
" on this layer.\n",
nFetchFID);
}
else
{
poFeature->DumpReadable(nullptr, papszOptions);
OGRFeature::DestroyFeature(poFeature);
}
}
}
示例11: ogrInfo
//.........这里部分代码省略.........
installErrorHandler();
OGREnvelope oExt;
if (poLayer->GetExtent(&oExt, TRUE) == OGRERR_NONE) {
PROTECT(dvec=allocVector(REALSXP,4));
pc++;
REAL(dvec)[0] = oExt.MinX;
REAL(dvec)[1] = oExt.MinY;
REAL(dvec)[2] = oExt.MaxX;
REAL(dvec)[3] = oExt.MaxY;
SET_VECTOR_ELT(ans,4,dvec);
}
uninstallErrorHandlerAndTriggerError();
PROTECT(itemnames=allocVector(STRSXP,nFields));
pc++;
PROTECT(itemtype=allocVector(INTSXP,nFields));
pc++;
PROTECT(itemwidth=allocVector(INTSXP,nFields));
pc++;
// try List types
PROTECT(itemlistmaxcount=allocVector(INTSXP,nFields));
pc++;
PROTECT(itemTypeNames=allocVector(STRSXP,nFields));
pc++;
int listFieldCount=0;
installErrorHandler();
for(iField=0; iField<nFields; iField++) {
OGRFieldDefn *poField = poDefn->GetFieldDefn(iField);
SET_STRING_ELT(itemnames,iField,mkChar(poField->GetNameRef()));
INTEGER(itemtype)[iField]=poField->GetType();
if (INTEGER(itemtype)[iField] == OFTIntegerList ||
INTEGER(itemtype)[iField] == OFTRealList ||
INTEGER(itemtype)[iField] == OFTStringList) listFieldCount++;
INTEGER(itemwidth)[iField]=poField->GetWidth();
SET_STRING_ELT(itemTypeNames,iField,mkChar(poField->GetFieldTypeName(
poField->GetType())));
INTEGER(itemlistmaxcount)[iField] = 0;
}
uninstallErrorHandlerAndTriggerError();
PROTECT(vec3=allocVector(INTSXP,1));
pc++;
INTEGER(vec3)[0]=listFieldCount;
SET_VECTOR_ELT(ans,5,vec3);
PROTECT(itemlist=allocVector(VECSXP,5));
pc++;
SET_VECTOR_ELT(itemlist,0,itemnames);
SET_VECTOR_ELT(itemlist,1,itemtype);
SET_VECTOR_ELT(itemlist,2,itemwidth);
SET_VECTOR_ELT(itemlist,3,itemTypeNames);
// try List types
if (listFieldCount > 0) {
poLayer->ResetReading();
OGRFeature* poFeature;
nCount = (int *) R_alloc((size_t) nFields, sizeof(int));
for (iField=0; iField<nFields; iField++) nCount[iField] = 0;
installErrorHandler();
OGRField* psField;
while( (poFeature = poLayer->GetNextFeature()) != NULL ) {
for(iField=0; iField<nFields; iField++) {
psField = poFeature->GetRawFieldRef(iField);
if (INTEGER(itemtype)[iField] == OFTIntegerList) {
nCount[iField] = psField->IntegerList.nCount;
if (nCount[iField] > INTEGER(itemlistmaxcount)[iField])
INTEGER(itemlistmaxcount)[iField] = nCount[iField];
} else if (INTEGER(itemtype)[iField] == OFTRealList) {
nCount[iField] = psField->RealList.nCount;
if (nCount[iField] > INTEGER(itemlistmaxcount)[iField])
INTEGER(itemlistmaxcount)[iField] = nCount[iField];
} else if (INTEGER(itemtype)[iField] == OFTStringList) {
nCount[iField] = psField->StringList.nCount;
if (nCount[iField] > INTEGER(itemlistmaxcount)[iField])
INTEGER(itemlistmaxcount)[iField] = nCount[iField];
}
}
OGRFeature::DestroyFeature( poFeature );
// delete poFeature;
}
uninstallErrorHandlerAndTriggerError();
}
SET_VECTOR_ELT(itemlist,4,itemlistmaxcount);
SET_VECTOR_ELT(ans,2,itemlist);
UNPROTECT(pc);
installErrorHandler();
#ifdef GDALV2
GDALClose( poDS );
#else
OGRDataSource::DestroyDataSource( poDS );
#endif
uninstallErrorHandlerAndTriggerError();
// delete poDS;
return(ans);
}
示例12: InsertHeader
//.........这里部分代码省略.........
VSIFPrintf(
fpSchema,
"<xs:element name=\"%s\" type=\"%s:%s_Type\" substitutionGroup=\"gml:_Feature\"/>\n",
poFDefn->GetName(), pszPrefix, poFDefn->GetName() );
VSIFPrintf(
fpSchema,
"<xs:complexType name=\"%s_Type\">\n"
" <xs:complexContent>\n"
" <xs:extension base=\"gml:AbstractFeatureType\">\n"
" <xs:sequence>\n",
poFDefn->GetName() );
/* -------------------------------------------------------------------- */
/* Define the geometry attribute. For now I always use the */
/* generic geometry type, but eventually we should express */
/* particulars if available. */
/* -------------------------------------------------------------------- */
VSIFPrintf(
fpSchema,
"<xs:element name=\"geometryProperty\" type=\"gml:GeometryPropertyType\" nillable=\"true\" minOccurs=\"1\" maxOccurs=\"1\"/>\n" );
/* -------------------------------------------------------------------- */
/* Emit each of the attributes. */
/* -------------------------------------------------------------------- */
for( int iField = 0; iField < poFDefn->GetFieldCount(); iField++ )
{
OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn(iField);
if( poFieldDefn->GetType() == OFTInteger )
{
int nWidth;
if( poFieldDefn->GetWidth() > 0 )
nWidth = poFieldDefn->GetWidth();
else
nWidth = 16;
VSIFPrintf( fpSchema,
" <xs:element name=\"%s\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\">\n"
" <xs:simpleType>\n"
" <xs:restriction base=\"xs:integer\">\n"
" <xs:totalDigits value=\"%d\"/>\n"
" </xs:restriction>\n"
" </xs:simpleType>\n"
" </xs:element>\n",
poFieldDefn->GetNameRef(), nWidth );
}
else if( poFieldDefn->GetType() == OFTReal )
{
int nWidth, nDecimals;
if( poFieldDefn->GetPrecision() == 0 )
nDecimals = 0;
else
nDecimals = poFieldDefn->GetPrecision();
if( poFieldDefn->GetWidth() > 0 )
nWidth = poFieldDefn->GetWidth();
else
nWidth = 33;
VSIFPrintf( fpSchema,
" <xs:element name=\"%s\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\">\n"
" <xs:simpleType>\n"
" <xs:restriction base=\"xs:decimal\">\n"
示例13: if
CPLXMLNode *OGRFMELayerCached::SerializeToXML()
{
CPLXMLNode *psLayer;
char szGeomType[64];
psLayer = CPLCreateXMLNode( NULL, CXT_Element, "OGRLayer" );
/* -------------------------------------------------------------------- */
/* Handle various layer values. */
/* -------------------------------------------------------------------- */
CPLCreateXMLElementAndValue( psLayer, "Name", poFeatureDefn->GetName());
sprintf( szGeomType, "%d", (int) poFeatureDefn->GetGeomType() );
CPLCreateXMLElementAndValue( psLayer, "GeomType", szGeomType );
CPLCreateXMLElementAndValue( psLayer, "SpatialCacheName",
pszIndexBase );
/* -------------------------------------------------------------------- */
/* Handle spatial reference if available. */
/* -------------------------------------------------------------------- */
if( GetSpatialRef() != NULL )
{
char *pszWKT = NULL;
OGRSpatialReference *poSRS = GetSpatialRef();
poSRS->exportToWkt( &pszWKT );
if( pszWKT != NULL )
{
CPLCreateXMLElementAndValue( psLayer, "SRS", pszWKT );
CPLFree( pszWKT );
}
}
/* -------------------------------------------------------------------- */
/* Handle extents if available. */
/* -------------------------------------------------------------------- */
OGREnvelope sEnvelope;
if( GetExtent( &sEnvelope, FALSE ) == OGRERR_NONE )
{
char szExtent[512];
sprintf( szExtent, "%24.15E,%24.15E,%24.15E,%24.15E",
sEnvelope.MinX, sEnvelope.MinY,
sEnvelope.MaxX, sEnvelope.MaxY );
CPLCreateXMLElementAndValue( psLayer, "Extent", szExtent );
}
/* -------------------------------------------------------------------- */
/* Emit the field schemas. */
/* -------------------------------------------------------------------- */
CPLXMLNode *psSchema = CPLCreateXMLNode( psLayer, CXT_Element, "Schema" );
for( int iField = 0; iField < poFeatureDefn->GetFieldCount(); iField++ )
{
OGRFieldDefn *poFieldDef = poFeatureDefn->GetFieldDefn( iField );
const char *pszType;
char szWidth[32], szPrecision[32];
CPLXMLNode *psXMLFD;
sprintf( szWidth, "%d", poFieldDef->GetWidth() );
sprintf( szPrecision, "%d", poFieldDef->GetPrecision() );
if( poFieldDef->GetType() == OFTInteger )
pszType = "Integer";
else if( poFieldDef->GetType() == OFTIntegerList )
pszType = "IntegerList";
else if( poFieldDef->GetType() == OFTReal )
pszType = "Real";
else if( poFieldDef->GetType() == OFTRealList )
pszType = "RealList";
else if( poFieldDef->GetType() == OFTString )
pszType = "String";
else if( poFieldDef->GetType() == OFTStringList )
pszType = "StringList";
else if( poFieldDef->GetType() == OFTBinary )
pszType = "Binary";
else
pszType = "Unsupported";
psXMLFD = CPLCreateXMLNode( psSchema, CXT_Element, "OGRFieldDefn" );
CPLCreateXMLElementAndValue( psXMLFD, "Name",poFieldDef->GetNameRef());
CPLCreateXMLElementAndValue( psXMLFD, "Type", pszType );
CPLCreateXMLElementAndValue( psXMLFD, "Width", szWidth );
CPLCreateXMLElementAndValue( psXMLFD, "Precision", szPrecision );
}
return psLayer;
}