337
340
/* Check for EMPTY ... but treat like a point at 0,0. */
338
341
/* -------------------------------------------------------------------- */
339
342
const char *pszPreScan;
343
int bHasZ = FALSE, bHasM = FALSE;
341
345
pszPreScan = OGRWktReadToken( pszInput, szToken );
342
346
if( EQUAL(szToken,"EMPTY") )
344
*ppszInput = (char *) pszInput;
348
*ppszInput = (char *) pszPreScan;
346
350
return OGRERR_NONE;
349
if( !EQUAL(szToken,"(") )
350
return OGRERR_CORRUPT_DATA;
353
/* -------------------------------------------------------------------- */
354
/* Check for Z, M or ZM. Will ignore the Measure */
355
/* -------------------------------------------------------------------- */
356
else if( EQUAL(szToken,"Z") )
360
else if( EQUAL(szToken,"M") )
364
else if( EQUAL(szToken,"ZM") )
352
pszPreScan = OGRWktReadToken( pszPreScan, szToken );
353
if( EQUAL(szToken,"EMPTY") )
355
pszInput = OGRWktReadToken( pszPreScan, szToken );
357
if( !EQUAL(szToken,")") )
358
return OGRERR_CORRUPT_DATA;
372
pszInput = pszPreScan;
373
pszPreScan = OGRWktReadToken( pszInput, szToken );
374
if( EQUAL(szToken,"EMPTY") )
361
*ppszInput = (char *) pszInput;
376
*ppszInput = (char *) pszPreScan;
378
/* FIXME?: In theory we should store the dimension and M presence */
379
/* if we want to allow round-trip with ExportToWKT v1.2 */
363
380
return OGRERR_NONE;
384
if( !EQUAL(szToken,"(") )
385
return OGRERR_CORRUPT_DATA;
387
if ( !bHasZ && !bHasM )
389
/* Test for old-style POINT(EMPTY) */
390
pszPreScan = OGRWktReadToken( pszPreScan, szToken );
391
if( EQUAL(szToken,"EMPTY") )
393
pszInput = OGRWktReadToken( pszPreScan, szToken );
395
if( !EQUAL(szToken,")") )
396
return OGRERR_CORRUPT_DATA;
399
*ppszInput = (char *) pszInput;
367
406
/* -------------------------------------------------------------------- */
368
407
/* Read the point list which should consist of exactly one point. */
369
408
/* -------------------------------------------------------------------- */
384
427
if( padfZ != NULL )
429
/* If there's a 3rd value, and it is not a POINT M, */
430
/* then assume it is the Z */
431
if ((!(bHasM && !bHasZ)))
442
/* In theory we should have a z coordinate for POINT Z */
443
/* oh well, let be tolerant */
387
444
nCoordDimension = 3;
391
447
nCoordDimension = 2;
431
487
psEnvelope->MinY = psEnvelope->MaxY = getY();
490
/************************************************************************/
492
/************************************************************************/
494
void OGRPoint::getEnvelope( OGREnvelope3D * psEnvelope ) const
497
psEnvelope->MinX = psEnvelope->MaxX = getX();
498
psEnvelope->MinY = psEnvelope->MaxY = getY();
499
psEnvelope->MinZ = psEnvelope->MaxZ = getZ();