1278
1293
return CE_None;
1296
/************************************************************************/
1297
/* ParseAlgorithmAndOptions() */
1299
/* Translates mnemonic gridding algorithm names into */
1300
/* GDALGridAlgorithm code, parse control parameters and assign */
1302
/************************************************************************/
1304
CPLErr ParseAlgorithmAndOptions( const char *pszAlgoritm,
1305
GDALGridAlgorithm *peAlgorithm,
1308
CPLAssert( pszAlgoritm );
1309
CPLAssert( peAlgorithm );
1310
CPLAssert( ppOptions );
1314
char **papszParms = CSLTokenizeString2( pszAlgoritm, ":", FALSE );
1316
if ( CSLCount(papszParms) < 1 )
1319
if ( EQUAL(papszParms[0], szAlgNameInvDist) )
1320
*peAlgorithm = GGA_InverseDistanceToAPower;
1321
else if ( EQUAL(papszParms[0], szAlgNameAverage) )
1322
*peAlgorithm = GGA_MovingAverage;
1323
else if ( EQUAL(papszParms[0], szAlgNameNearest) )
1324
*peAlgorithm = GGA_NearestNeighbor;
1325
else if ( EQUAL(papszParms[0], szAlgNameMinimum) )
1326
*peAlgorithm = GGA_MetricMinimum;
1327
else if ( EQUAL(papszParms[0], szAlgNameMaximum) )
1328
*peAlgorithm = GGA_MetricMaximum;
1329
else if ( EQUAL(papszParms[0], szAlgNameRange) )
1330
*peAlgorithm = GGA_MetricRange;
1331
else if ( EQUAL(papszParms[0], szAlgNameCount) )
1332
*peAlgorithm = GGA_MetricCount;
1333
else if ( EQUAL(papszParms[0], szAlgNameAverageDistance) )
1334
*peAlgorithm = GGA_MetricAverageDistance;
1335
else if ( EQUAL(papszParms[0], szAlgNameAverageDistancePts) )
1336
*peAlgorithm = GGA_MetricAverageDistancePts;
1339
fprintf( stderr, "Unsupported gridding method \"%s\".\n",
1341
CSLDestroy( papszParms );
1345
/* -------------------------------------------------------------------- */
1346
/* Parse algorithm parameters and assign defaults. */
1347
/* -------------------------------------------------------------------- */
1348
const char *pszValue;
1350
switch ( *peAlgorithm )
1352
case GGA_InverseDistanceToAPower:
1355
CPLMalloc( sizeof(GDALGridInverseDistanceToAPowerOptions) );
1357
pszValue = CSLFetchNameValue( papszParms, "power" );
1358
((GDALGridInverseDistanceToAPowerOptions *)*ppOptions)->
1359
dfPower = (pszValue) ? CPLAtofM(pszValue) : 2.0;
1361
pszValue = CSLFetchNameValue( papszParms, "smoothing" );
1362
((GDALGridInverseDistanceToAPowerOptions *)*ppOptions)->
1363
dfSmoothing = (pszValue) ? CPLAtofM(pszValue) : 0.0;
1365
pszValue = CSLFetchNameValue( papszParms, "radius1" );
1366
((GDALGridInverseDistanceToAPowerOptions *)*ppOptions)->
1367
dfRadius1 = (pszValue) ? CPLAtofM(pszValue) : 0.0;
1369
pszValue = CSLFetchNameValue( papszParms, "radius2" );
1370
((GDALGridInverseDistanceToAPowerOptions *)*ppOptions)->
1371
dfRadius2 = (pszValue) ? CPLAtofM(pszValue) : 0.0;
1373
pszValue = CSLFetchNameValue( papszParms, "angle" );
1374
((GDALGridInverseDistanceToAPowerOptions *)*ppOptions)->
1375
dfAngle = (pszValue) ? CPLAtofM(pszValue) : 0.0;
1377
pszValue = CSLFetchNameValue( papszParms, "max_points" );
1378
((GDALGridInverseDistanceToAPowerOptions *)*ppOptions)->
1379
nMaxPoints = (GUInt32) ((pszValue) ? CPLAtofM(pszValue) : 0);
1381
pszValue = CSLFetchNameValue( papszParms, "min_points" );
1382
((GDALGridInverseDistanceToAPowerOptions *)*ppOptions)->
1383
nMinPoints = (GUInt32) ((pszValue) ? CPLAtofM(pszValue) : 0);
1385
pszValue = CSLFetchNameValue( papszParms, "nodata" );
1386
((GDALGridInverseDistanceToAPowerOptions *)*ppOptions)->
1387
dfNoDataValue = (pszValue) ? CPLAtofM(pszValue) : 0.0;
1390
case GGA_MovingAverage:
1392
CPLMalloc( sizeof(GDALGridMovingAverageOptions) );
1394
pszValue = CSLFetchNameValue( papszParms, "radius1" );
1395
((GDALGridMovingAverageOptions *)*ppOptions)->
1396
dfRadius1 = (pszValue) ? CPLAtofM(pszValue) : 0.0;
1398
pszValue = CSLFetchNameValue( papszParms, "radius2" );
1399
((GDALGridMovingAverageOptions *)*ppOptions)->
1400
dfRadius2 = (pszValue) ? CPLAtofM(pszValue) : 0.0;
1402
pszValue = CSLFetchNameValue( papszParms, "angle" );
1403
((GDALGridMovingAverageOptions *)*ppOptions)->
1404
dfAngle = (pszValue) ? CPLAtofM(pszValue) : 0.0;
1406
pszValue = CSLFetchNameValue( papszParms, "min_points" );
1407
((GDALGridMovingAverageOptions *)*ppOptions)->
1408
nMinPoints = (GUInt32) ((pszValue) ? CPLAtofM(pszValue) : 0);
1410
pszValue = CSLFetchNameValue( papszParms, "nodata" );
1411
((GDALGridMovingAverageOptions *)*ppOptions)->
1412
dfNoDataValue = (pszValue) ? CPLAtofM(pszValue) : 0.0;
1415
case GGA_NearestNeighbor:
1417
CPLMalloc( sizeof(GDALGridNearestNeighborOptions) );
1419
pszValue = CSLFetchNameValue( papszParms, "radius1" );
1420
((GDALGridNearestNeighborOptions *)*ppOptions)->
1421
dfRadius1 = (pszValue) ? CPLAtofM(pszValue) : 0.0;
1423
pszValue = CSLFetchNameValue( papszParms, "radius2" );
1424
((GDALGridNearestNeighborOptions *)*ppOptions)->
1425
dfRadius2 = (pszValue) ? CPLAtofM(pszValue) : 0.0;
1427
pszValue = CSLFetchNameValue( papszParms, "angle" );
1428
((GDALGridNearestNeighborOptions *)*ppOptions)->
1429
dfAngle = (pszValue) ? CPLAtofM(pszValue) : 0.0;
1431
pszValue = CSLFetchNameValue( papszParms, "nodata" );
1432
((GDALGridNearestNeighborOptions *)*ppOptions)->
1433
dfNoDataValue = (pszValue) ? CPLAtofM(pszValue) : 0.0;
1436
case GGA_MetricMinimum:
1437
case GGA_MetricMaximum:
1438
case GGA_MetricRange:
1439
case GGA_MetricCount:
1440
case GGA_MetricAverageDistance:
1441
case GGA_MetricAverageDistancePts:
1443
CPLMalloc( sizeof(GDALGridDataMetricsOptions) );
1445
pszValue = CSLFetchNameValue( papszParms, "radius1" );
1446
((GDALGridDataMetricsOptions *)*ppOptions)->
1447
dfRadius1 = (pszValue) ? CPLAtofM(pszValue) : 0.0;
1449
pszValue = CSLFetchNameValue( papszParms, "radius2" );
1450
((GDALGridDataMetricsOptions *)*ppOptions)->
1451
dfRadius2 = (pszValue) ? CPLAtofM(pszValue) : 0.0;
1453
pszValue = CSLFetchNameValue( papszParms, "angle" );
1454
((GDALGridDataMetricsOptions *)*ppOptions)->
1455
dfAngle = (pszValue) ? CPLAtofM(pszValue) : 0.0;
1457
pszValue = CSLFetchNameValue( papszParms, "min_points" );
1458
((GDALGridDataMetricsOptions *)*ppOptions)->
1459
nMinPoints = (pszValue) ? atol(pszValue) : 0;
1461
pszValue = CSLFetchNameValue( papszParms, "nodata" );
1462
((GDALGridDataMetricsOptions *)*ppOptions)->
1463
dfNoDataValue = (pszValue) ? CPLAtofM(pszValue) : 0.0;
1468
CSLDestroy( papszParms );