本文整理汇总了C++中OGRGeometry::toSurface方法的典型用法代码示例。如果您正苦于以下问题:C++ OGRGeometry::toSurface方法的具体用法?C++ OGRGeometry::toSurface怎么用?C++ OGRGeometry::toSurface使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类OGRGeometry
的用法示例。
在下文中一共展示了OGRGeometry::toSurface方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: importFromWkt
OGRErr OGRMultiSurface::importFromWkt( const char ** ppszInput )
{
int bHasZ = FALSE;
int bHasM = FALSE;
bool bIsEmpty = false;
OGRErr eErr = importPreambleFromWkt(ppszInput, &bHasZ, &bHasM, &bIsEmpty);
flags = 0;
if( eErr != OGRERR_NONE )
return eErr;
if( bHasZ ) flags |= OGR_G_3D;
if( bHasM ) flags |= OGR_G_MEASURED;
if( bIsEmpty )
return OGRERR_NONE;
char szToken[OGR_WKT_TOKEN_MAX] = {};
const char *pszInput = *ppszInput;
eErr = OGRERR_NONE;
// Skip first '('.
pszInput = OGRWktReadToken( pszInput, szToken );
/* ==================================================================== */
/* Read each surface in turn. Note that we try to reuse the same */
/* point list buffer from ring to ring to cut down on */
/* allocate/deallocate overhead. */
/* ==================================================================== */
OGRRawPoint *paoPoints = nullptr;
int nMaxPoints = 0;
double *padfZ = nullptr;
do
{
/* -------------------------------------------------------------------- */
/* Get the first token, which should be the geometry type. */
/* -------------------------------------------------------------------- */
const char* pszInputBefore = pszInput;
pszInput = OGRWktReadToken( pszInput, szToken );
OGRSurface* poSurface = nullptr;
/* -------------------------------------------------------------------- */
/* Do the import. */
/* -------------------------------------------------------------------- */
if( EQUAL(szToken, "(") )
{
OGRPolygon *poPolygon = new OGRPolygon();
poSurface = poPolygon;
pszInput = pszInputBefore;
eErr = poPolygon->importFromWKTListOnly(
&pszInput, bHasZ, bHasM,
paoPoints, nMaxPoints, padfZ );
}
else if( EQUAL(szToken, "EMPTY") )
{
poSurface = new OGRPolygon();
}
// We accept POLYGON() but this is an extension to the BNF, also
// accepted by PostGIS.
else if( STARTS_WITH_CI(szToken, "POLYGON") ||
STARTS_WITH_CI(szToken, "CURVEPOLYGON") )
{
OGRGeometry* poGeom = nullptr;
pszInput = pszInputBefore;
eErr = OGRGeometryFactory::createFromWkt(
&pszInput, nullptr, &poGeom );
if( poGeom == nullptr )
{
eErr = OGRERR_CORRUPT_DATA;
break;
}
poSurface = poGeom->toSurface();
}
else
{
CPLError(CE_Failure, CPLE_AppDefined,
"Unexpected token : %s", szToken);
eErr = OGRERR_CORRUPT_DATA;
break;
}
if( eErr == OGRERR_NONE )
eErr = addGeometryDirectly( poSurface );
if( eErr != OGRERR_NONE )
{
delete poSurface;
break;
}
/* -------------------------------------------------------------------- */
/* Read the delimiter following the surface. */
/* -------------------------------------------------------------------- */
pszInput = OGRWktReadToken( pszInput, szToken );
} while( szToken[0] == ',' && eErr == OGRERR_NONE );
CPLFree( paoPoints );
CPLFree( padfZ );
/* -------------------------------------------------------------------- */
/* freak if we don't get a closing bracket. */
//.........这里部分代码省略.........