本文整理汇总了C++中CSLFetchNameValue函数的典型用法代码示例。如果您正苦于以下问题:C++ CSLFetchNameValue函数的具体用法?C++ CSLFetchNameValue怎么用?C++ CSLFetchNameValue使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了CSLFetchNameValue函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: msContourLayerReadRaster
static int msContourLayerReadRaster(layerObj *layer, rectObj rect)
{
mapObj *map = layer->map;
char **bands;
char pointer[64], memDSPointer[128];
int band = 1;
double adfGeoTransform[6], adfInvGeoTransform[6];
double llx, lly, urx, ury;
rectObj copyRect, mapRect;
int dst_xsize, dst_ysize;
int virtual_grid_step_x, virtual_grid_step_y;
int src_xoff, src_yoff, src_xsize, src_ysize;
double map_cellsize_x, map_cellsize_y, dst_cellsize_x, dst_cellsize_y;
GDALRasterBandH hBand = NULL;
CPLErr eErr;
contourLayerInfo *clinfo = (contourLayerInfo *) layer->layerinfo;
if (layer->debug)
msDebug("Entering msContourLayerReadRaster().\n");
if (clinfo == NULL || clinfo->hOrigDS == NULL) {
msSetError(MS_MISCERR, "Assertion failed: Contour layer not opened!!!",
"msContourLayerReadRaster()");
return MS_FAILURE;
}
bands = CSLTokenizeStringComplex(
CSLFetchNameValue(layer->processing,"BANDS"), " ,", FALSE, FALSE );
if (CSLCount(bands) > 0) {
band = atoi(bands[0]);
if (band < 1 || band > GDALGetRasterCount(clinfo->hOrigDS)) {
msSetError( MS_IMGERR,
"BANDS PROCESSING directive includes illegal band '%d', should be from 1 to %d.",
"msContourLayerReadRaster()",
band, GDALGetRasterCount(clinfo->hOrigDS));
CSLDestroy(bands);
return MS_FAILURE;
}
}
CSLDestroy(bands);
hBand = GDALGetRasterBand(clinfo->hOrigDS, band);
if (hBand == NULL)
{
msSetError(MS_IMGERR,
"Band %d does not exist on dataset.",
"msContourLayerReadRaster()", band);
return MS_FAILURE;
}
if (layer->projection.numargs > 0 &&
EQUAL(layer->projection.args[0], "auto")) {
const char *wkt;
wkt = GDALGetProjectionRef(clinfo->hOrigDS);
if (wkt != NULL && strlen(wkt) > 0) {
if (msOGCWKT2ProjectionObj(wkt, &(layer->projection),
layer->debug) != MS_SUCCESS) {
char msg[MESSAGELENGTH*2];
errorObj *ms_error = msGetErrorObj();
snprintf( msg, sizeof(msg),
"%s\n"
"PROJECTION AUTO cannot be used for this "
"GDAL raster (`%s').",
ms_error->message, layer->data);
msg[MESSAGELENGTH-1] = '\0';
msSetError(MS_OGRERR, "%s","msDrawRasterLayer()",
msg);
return MS_FAILURE;
}
}
}
/*
* Compute the georeferenced window of overlap, and read the source data
* downsampled to match output resolution, or at full resolution if
* output resolution is lower than the source resolution.
*
* A large portion of this overlap calculation code was borrowed from
* msDrawRasterLayerGDAL().
* Would be possible to move some of this to a reusable function?
*
* Note: This code works only if no reprojection is involved. It would
* need rework to support cases where output projection differs from source
* data file projection.
*/
src_xsize = GDALGetRasterXSize(clinfo->hOrigDS);
src_ysize = GDALGetRasterYSize(clinfo->hOrigDS);
/* set the Dataset extent */
msGetGDALGeoTransform(clinfo->hOrigDS, map, layer, adfGeoTransform);
clinfo->extent.minx = adfGeoTransform[0];
clinfo->extent.maxy = adfGeoTransform[3];
clinfo->extent.maxx = adfGeoTransform[0] + src_xsize * adfGeoTransform[1];
clinfo->extent.miny = adfGeoTransform[3] + src_ysize * adfGeoTransform[5];
if (layer->transform) {
//.........这里部分代码省略.........
开发者ID:BentleySystems,项目名称:mapserver,代码行数:101,代码来源:mapcontour.c
示例2: GDALLoadRPCFile
char **CPL_STDCALL GDALLoadRPCFile( const char *pszFilename,
char **papszSiblingFiles )
{
/* -------------------------------------------------------------------- */
/* Try to identify the RPC file in upper or lower case. */
/* -------------------------------------------------------------------- */
CPLString osTarget;
/* Is this already a _RPC.TXT file ? */
if (strlen(pszFilename) > 8 && EQUAL(pszFilename + strlen(pszFilename) - 8, "_RPC.TXT"))
osTarget = pszFilename;
else
{
CPLString osSrcPath = pszFilename;
CPLString soPt(".");
size_t found = osSrcPath.rfind(soPt);
if (found == CPLString::npos)
return NULL;
osSrcPath.replace (found, osSrcPath.size() - found, "_rpc.txt");
CPLString osTarget = osSrcPath;
if( papszSiblingFiles == NULL )
{
VSIStatBufL sStatBuf;
if( VSIStatL( osTarget, &sStatBuf ) != 0 )
{
osSrcPath = pszFilename;
osSrcPath.replace (found, osSrcPath.size() - found, "_RPC.TXT");
osTarget = osSrcPath;
if( VSIStatL( osTarget, &sStatBuf ) != 0 )
{
osSrcPath = pszFilename;
osSrcPath.replace (found, osSrcPath.size() - found, "_rpc.TXT");
osTarget = osSrcPath;
if( VSIStatL( osTarget, &sStatBuf ) != 0 )
{
return NULL;
}
}
}
}
else
{
int iSibling = CSLFindString( papszSiblingFiles,
CPLGetFilename(osTarget) );
if( iSibling < 0 )
return NULL;
osTarget.resize(osTarget.size() - strlen(papszSiblingFiles[iSibling]));
osTarget += papszSiblingFiles[iSibling];
}
}
/* -------------------------------------------------------------------- */
/* Read file and parse. */
/* -------------------------------------------------------------------- */
char **papszLines = CSLLoad2( osTarget, 100, 100, NULL );
if(!papszLines)
return NULL;
char **papszMD = NULL;
/* From LINE_OFF to HEIGHT_SCALE */
for(size_t i = 0; i < 19; i += 2 )
{
const char *pszRPBVal = CSLFetchNameValue(papszLines, apszRPBMap[i] );
if( pszRPBVal == NULL )
{
CPLError( CE_Failure, CPLE_AppDefined,
"%s file found, but missing %s field (and possibly others).",
osTarget.c_str(), apszRPBMap[i]);
CSLDestroy( papszMD );
CSLDestroy( papszLines );
return NULL;
}
else
{
papszMD = CSLSetNameValue( papszMD, apszRPBMap[i], pszRPBVal );
}
}
/* For LINE_NUM_COEFF, LINE_DEN_COEFF, SAMP_NUM_COEFF, SAMP_DEN_COEFF */
/* parameters that have 20 values each */
for(size_t i = 20; apszRPBMap[i] != NULL; i += 2 )
{
CPLString soVal;
for(int j = 1; j <= 20; j++)
{
CPLString soRPBMapItem;
soRPBMapItem.Printf("%s_%d", apszRPBMap[i], j);
const char *pszRPBVal = CSLFetchNameValue(papszLines, soRPBMapItem.c_str() );
if( pszRPBVal == NULL )
{
CPLError( CE_Failure, CPLE_AppDefined,
"%s file found, but missing %s field (and possibly others).",
osTarget.c_str(), soRPBMapItem.c_str() );
//.........这里部分代码省略.........
开发者ID:actian-geospatial,项目名称:ogr-ingres,代码行数:101,代码来源:gdal_rpcimdio.cpp
示例3: GDAL_IMD_AA2R
static int GDAL_IMD_AA2R( char ***ppapszIMD )
{
char **papszIMD = *ppapszIMD;
/* -------------------------------------------------------------------- */
/* Verify that we have a new format file. */
/* -------------------------------------------------------------------- */
const char *pszValue = CSLFetchNameValue( papszIMD, "version" );
if( pszValue == NULL )
return FALSE;
if( EQUAL(pszValue,"\"R\"") )
return TRUE;
if( !EQUAL(pszValue,"\"AA\"") )
{
CPLDebug( "IMD", "The file is not the expected 'version = \"AA\"' format.\nProceeding, but file may be corrupted." );
}
/* -------------------------------------------------------------------- */
/* Fix the version line. */
/* -------------------------------------------------------------------- */
papszIMD = CSLSetNameValue( papszIMD, "version", "\"R\"" );
/* -------------------------------------------------------------------- */
/* remove a bunch of fields. */
/* -------------------------------------------------------------------- */
int iKey;
static const char *apszToRemove[] = {
"productCatalogId",
"childCatalogId",
"productType",
"numberOfLooks",
"effectiveBandwidth",
"mode",
"scanDirection",
"cloudCover",
"productGSD",
NULL };
for( iKey = 0; apszToRemove[iKey] != NULL; iKey++ )
{
int iTarget = CSLFindName( papszIMD, apszToRemove[iKey] );
if( iTarget != -1 )
papszIMD = CSLRemoveStrings( papszIMD, iTarget, 1, NULL );
}
/* -------------------------------------------------------------------- */
/* Replace various min/mean/max with just the mean. */
/* -------------------------------------------------------------------- */
static const char *keylist[] = {
"CollectedRowGSD",
"CollectedColGSD",
"SunAz",
"SunEl",
"SatAz",
"SatEl",
"InTrackViewAngle",
"CrossTrackViewAngle",
"OffNadirViewAngle",
NULL };
for( iKey = 0; keylist[iKey] != NULL; iKey++ )
{
CPLString osTarget;
int iTarget;
osTarget.Printf( "IMAGE_1.min%s", keylist[iKey] );
iTarget = CSLFindName( papszIMD, osTarget );
if( iTarget != -1 )
papszIMD = CSLRemoveStrings( papszIMD, iTarget, 1, NULL );
osTarget.Printf( "IMAGE_1.max%s", keylist[iKey] );
iTarget = CSLFindName( papszIMD, osTarget );
if( iTarget != -1 )
papszIMD = CSLRemoveStrings( papszIMD, iTarget, 1, NULL );
osTarget.Printf( "IMAGE_1.mean%s", keylist[iKey] );
iTarget = CSLFindName( papszIMD, osTarget );
if( iTarget != -1 )
{
CPLString osValue = CSLFetchNameValue( papszIMD, osTarget );
CPLString osLine;
osTarget.Printf( "IMAGE_1.%c%s",
tolower(keylist[iKey][0]),
keylist[iKey]+1 );
osLine = osTarget + "=" + osValue;
CPLFree( papszIMD[iTarget] );
papszIMD[iTarget] = CPLStrdup(osLine);
}
}
*ppapszIMD = papszIMD;
return TRUE;
//.........这里部分代码省略.........
开发者ID:actian-geospatial,项目名称:ogr-ingres,代码行数:101,代码来源:gdal_rpcimdio.cpp
示例4: CPLError
GDALDataset *
WEBPDataset::CreateCopy( const char * pszFilename, GDALDataset *poSrcDS,
int bStrict, char ** papszOptions,
GDALProgressFunc pfnProgress, void * pProgressData )
{
/* -------------------------------------------------------------------- */
/* WEBP library initialization */
/* -------------------------------------------------------------------- */
WebPPicture sPicture;
if (!WebPPictureInit(&sPicture))
{
CPLError(CE_Failure, CPLE_AppDefined, "WebPPictureInit() failed");
return nullptr;
}
/* -------------------------------------------------------------------- */
/* Some some rudimentary checks */
/* -------------------------------------------------------------------- */
const int nXSize = poSrcDS->GetRasterXSize();
const int nYSize = poSrcDS->GetRasterYSize();
if( nXSize > 16383 || nYSize > 16383 )
{
CPLError( CE_Failure, CPLE_NotSupported,
"WEBP maximum image dimensions are 16383 x 16383.");
return nullptr;
}
const int nBands = poSrcDS->GetRasterCount();
if( nBands != 3
#if WEBP_ENCODER_ABI_VERSION >= 0x0100
&& nBands != 4
#endif
)
{
CPLError( CE_Failure, CPLE_NotSupported,
"WEBP driver doesn't support %d bands. Must be 3 (RGB) "
#if WEBP_ENCODER_ABI_VERSION >= 0x0100
"or 4 (RGBA) "
#endif
"bands.",
nBands );
return nullptr;
}
const GDALDataType eDT = poSrcDS->GetRasterBand(1)->GetRasterDataType();
if( eDT != GDT_Byte )
{
CPLError( (bStrict) ? CE_Failure : CE_Warning, CPLE_NotSupported,
"WEBP driver doesn't support data type %s. "
"Only eight bit byte bands supported.",
GDALGetDataTypeName(
poSrcDS->GetRasterBand(1)->GetRasterDataType()) );
if (bStrict)
return nullptr;
}
/* -------------------------------------------------------------------- */
/* What options has the user selected? */
/* -------------------------------------------------------------------- */
float fQuality = 75.0f;
const char* pszQUALITY = CSLFetchNameValue(papszOptions, "QUALITY");
if( pszQUALITY != nullptr )
{
fQuality = static_cast<float>( CPLAtof(pszQUALITY) );
if( fQuality < 0.0f || fQuality > 100.0f )
{
CPLError( CE_Failure, CPLE_IllegalArg,
"%s=%s is not a legal value.", "QUALITY", pszQUALITY);
return nullptr;
}
}
WebPPreset nPreset = WEBP_PRESET_DEFAULT;
const char* pszPRESET = CSLFetchNameValueDef(
papszOptions, "PRESET", "DEFAULT" );
if (EQUAL(pszPRESET, "DEFAULT"))
nPreset = WEBP_PRESET_DEFAULT;
else if (EQUAL(pszPRESET, "PICTURE"))
nPreset = WEBP_PRESET_PICTURE;
else if (EQUAL(pszPRESET, "PHOTO"))
nPreset = WEBP_PRESET_PHOTO;
else if (EQUAL(pszPRESET, "PICTURE"))
nPreset = WEBP_PRESET_PICTURE;
else if (EQUAL(pszPRESET, "DRAWING"))
nPreset = WEBP_PRESET_DRAWING;
else if (EQUAL(pszPRESET, "ICON"))
nPreset = WEBP_PRESET_ICON;
else if (EQUAL(pszPRESET, "TEXT"))
nPreset = WEBP_PRESET_TEXT;
else
{
CPLError( CE_Failure, CPLE_IllegalArg,
//.........这里部分代码省略.........
开发者ID:OSGeo,项目名称:gdal,代码行数:101,代码来源:webpdataset.cpp
示例5: InterruptLongResult
OGRLayer *
OGRMySQLDataSource::ICreateLayer( const char * pszLayerNameIn,
OGRSpatialReference *poSRS,
OGRwkbGeometryType eType,
char ** papszOptions )
{
MYSQL_RES *hResult=NULL;
CPLString osCommand;
const char *pszGeometryType;
const char *pszGeomColumnName;
const char *pszExpectedFIDName;
char *pszLayerName;
// int nDimension = 3; // MySQL only supports 2d currently
/* -------------------------------------------------------------------- */
/* Make sure there isn't an active transaction already. */
/* -------------------------------------------------------------------- */
InterruptLongResult();
if( CSLFetchBoolean(papszOptions,"LAUNDER",TRUE) )
pszLayerName = LaunderName( pszLayerNameIn );
else
pszLayerName = CPLStrdup( pszLayerNameIn );
// if( wkbFlatten(eType) == eType )
// nDimension = 2;
CPLDebug("MYSQL","Creating layer %s.", pszLayerName);
/* -------------------------------------------------------------------- */
/* Do we already have this layer? If so, should we blow it */
/* away? */
/* -------------------------------------------------------------------- */
int iLayer;
for( iLayer = 0; iLayer < nLayers; iLayer++ )
{
if( EQUAL(pszLayerName,papoLayers[iLayer]->GetLayerDefn()->GetName()) )
{
if( CSLFetchNameValue( papszOptions, "OVERWRITE" ) != NULL
&& !EQUAL(CSLFetchNameValue(papszOptions,"OVERWRITE"),"NO") )
{
DeleteLayer( iLayer );
}
else
{
CPLError( CE_Failure, CPLE_AppDefined,
"Layer %s already exists, CreateLayer failed.\n"
"Use the layer creation option OVERWRITE=YES to "
"replace it.",
pszLayerName );
CPLFree( pszLayerName );
return NULL;
}
}
}
pszGeomColumnName = CSLFetchNameValue( papszOptions, "GEOMETRY_NAME" );
if (!pszGeomColumnName)
pszGeomColumnName="SHAPE";
pszExpectedFIDName = CSLFetchNameValue( papszOptions, "FID" );
if (!pszExpectedFIDName)
pszExpectedFIDName = CSLFetchNameValue( papszOptions, "MYSQL_FID" );
if (!pszExpectedFIDName)
pszExpectedFIDName="OGR_FID";
int bFID64 = CSLFetchBoolean(papszOptions, "FID64", FALSE);
const char* pszFIDType = bFID64 ? "BIGINT": "INT";
CPLDebug("MYSQL","Geometry Column Name %s.", pszGeomColumnName);
CPLDebug("MYSQL","FID Column Name %s.", pszExpectedFIDName);
if( wkbFlatten(eType) == wkbNone )
{
osCommand.Printf(
"CREATE TABLE `%s` ( "
" %s %s UNIQUE NOT NULL AUTO_INCREMENT )",
pszLayerName, pszExpectedFIDName, pszFIDType );
}
else
{
osCommand.Printf(
"CREATE TABLE `%s` ( "
" %s %s UNIQUE NOT NULL AUTO_INCREMENT, "
" %s GEOMETRY NOT NULL )",
pszLayerName, pszExpectedFIDName, pszFIDType, pszGeomColumnName );
}
if( CSLFetchNameValue( papszOptions, "ENGINE" ) != NULL )
{
osCommand += " ENGINE = ";
osCommand += CSLFetchNameValue( papszOptions, "ENGINE" );
}
//.........这里部分代码省略.........
开发者ID:nextgis-borsch,项目名称:lib_gdal,代码行数:101,代码来源:ogrmysqldatasource.cpp
示例6: CPLError
OGRLayer *
OGRShapeDataSource::CreateLayer( const char * pszLayerName,
OGRSpatialReference *poSRS,
OGRwkbGeometryType eType,
char ** papszOptions )
{
SHPHandle hSHP;
DBFHandle hDBF;
int nShapeType;
/* -------------------------------------------------------------------- */
/* Verify we are in update mode. */
/* -------------------------------------------------------------------- */
if( !bDSUpdate )
{
CPLError( CE_Failure, CPLE_NoWriteAccess,
"Data source %s opened read-only.\n"
"New layer %s cannot be created.\n",
pszName, pszLayerName );
return NULL;
}
/* -------------------------------------------------------------------- */
/* Figure out what type of layer we need. */
/* -------------------------------------------------------------------- */
if( eType == wkbUnknown || eType == wkbLineString )
nShapeType = SHPT_ARC;
else if( eType == wkbPoint )
nShapeType = SHPT_POINT;
else if( eType == wkbPolygon )
nShapeType = SHPT_POLYGON;
else if( eType == wkbMultiPoint )
nShapeType = SHPT_MULTIPOINT;
else if( eType == wkbPoint25D )
nShapeType = SHPT_POINTZ;
else if( eType == wkbLineString25D )
nShapeType = SHPT_ARCZ;
else if( eType == wkbMultiLineString )
nShapeType = SHPT_ARC;
else if( eType == wkbMultiLineString25D )
nShapeType = SHPT_ARCZ;
else if( eType == wkbPolygon25D )
nShapeType = SHPT_POLYGONZ;
else if( eType == wkbMultiPolygon )
nShapeType = SHPT_POLYGON;
else if( eType == wkbMultiPolygon25D )
nShapeType = SHPT_POLYGONZ;
else if( eType == wkbMultiPoint25D )
nShapeType = SHPT_MULTIPOINTZ;
else if( eType == wkbNone )
nShapeType = SHPT_NULL;
else
nShapeType = -1;
/* -------------------------------------------------------------------- */
/* Has the application overridden this with a special creation */
/* option? */
/* -------------------------------------------------------------------- */
const char *pszOverride = CSLFetchNameValue( papszOptions, "SHPT" );
if( pszOverride == NULL )
/* ignore */;
else if( EQUAL(pszOverride,"POINT") )
{
nShapeType = SHPT_POINT;
eType = wkbPoint;
}
else if( EQUAL(pszOverride,"ARC") )
{
nShapeType = SHPT_ARC;
eType = wkbLineString;
}
else if( EQUAL(pszOverride,"POLYGON") )
{
nShapeType = SHPT_POLYGON;
eType = wkbPolygon;
}
else if( EQUAL(pszOverride,"MULTIPOINT") )
{
nShapeType = SHPT_MULTIPOINT;
eType = wkbMultiPoint;
}
else if( EQUAL(pszOverride,"POINTZ") )
{
nShapeType = SHPT_POINTZ;
eType = wkbPoint25D;
}
else if( EQUAL(pszOverride,"ARCZ") )
{
nShapeType = SHPT_ARCZ;
eType = wkbLineString25D;
}
else if( EQUAL(pszOverride,"POLYGONZ") )
{
nShapeType = SHPT_POLYGONZ;
eType = wkbPolygon25D;
}
else if( EQUAL(pszOverride,"MULTIPOINTZ") )
//.........这里部分代码省略.........
开发者ID:Chaduke,项目名称:bah.mod,代码行数:101,代码来源:ogrshapedatasource.cpp
示例7: CPLAssert
int OGRGMLDataSource::Create( const char *pszFilename,
char **papszOptions )
{
if( fpOutput != NULL || poReader != NULL )
{
CPLAssert( FALSE );
return FALSE;
}
/* -------------------------------------------------------------------- */
/* Create the output file. */
/* -------------------------------------------------------------------- */
pszName = CPLStrdup( pszFilename );
if( EQUAL(pszFilename,"stdout") )
fpOutput = stdout;
else
fpOutput = VSIFOpen( pszFilename, "wt+" );
if( fpOutput == NULL )
{
CPLError( CE_Failure, CPLE_OpenFailed,
"Failed to create GML file %s.",
pszFilename );
return FALSE;
}
/* -------------------------------------------------------------------- */
/* Write out "standard" header. */
/* -------------------------------------------------------------------- */
VSIFPrintf( fpOutput, "%s",
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n" );
nSchemaInsertLocation = VSIFTell( fpOutput );
VSIFPrintf( fpOutput, "%s",
"<ogr:FeatureCollection\n" );
/* -------------------------------------------------------------------- */
/* Write out schema info if provided in creation options. */
/* -------------------------------------------------------------------- */
const char *pszSchemaURI = CSLFetchNameValue(papszOptions,"XSISCHEMAURI");
const char *pszSchemaOpt = CSLFetchNameValue( papszOptions, "XSISCHEMA" );
if( pszSchemaURI != NULL )
{
VSIFPrintf( fpOutput,
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
" xsi:schemaLocation=\"%s\"\n",
CSLFetchNameValue( papszOptions, "XSISCHEMAURI" ) );
}
else if( pszSchemaOpt == NULL || EQUAL(pszSchemaOpt,"EXTERNAL") )
{
char *pszBasename = CPLStrdup(CPLGetBasename( pszName ));
VSIFPrintf( fpOutput,
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
" xsi:schemaLocation=\"http://ogr.maptools.org/ %s\"\n",
CPLResetExtension( pszBasename, "xsd" ) );
CPLFree( pszBasename );
}
VSIFPrintf( fpOutput, "%s",
" xmlns:ogr=\"http://ogr.maptools.org/\"\n" );
VSIFPrintf( fpOutput, "%s",
" xmlns:gml=\"http://www.opengis.net/gml\">\n" );
/* -------------------------------------------------------------------- */
/* Should we initialize an area to place the boundedBy element? */
/* We will need to seek back to fill it in. */
/* -------------------------------------------------------------------- */
if( CSLFetchBoolean( papszOptions, "BOUNDEDBY", TRUE ) )
{
nBoundedByLocation = VSIFTell( fpOutput );
if( nBoundedByLocation != -1 )
VSIFPrintf( fpOutput, "%280s\n", "" );
}
else
nBoundedByLocation = -1;
return TRUE;
}
开发者ID:469447793,项目名称:World-Wind-Java,代码行数:83,代码来源:ogrgmldatasource.cpp
示例8: msUVRASTERLayerWhichShapes
int msUVRASTERLayerWhichShapes(layerObj *layer, rectObj rect, int isQuery)
{
uvRasterLayerInfo *uvlinfo = (uvRasterLayerInfo *) layer->layerinfo;
imageObj *image_tmp;
mapObj map_tmp;
unsigned int spacing;
int width, height, u_src_off, v_src_off, i, x, y;
char **alteredProcessing = NULL;
char **savedProcessing = NULL;
if (layer->debug)
msDebug("Entering msUVRASTERLayerWhichShapes().\n");
if( uvlinfo == NULL )
return MS_FAILURE;
/* QUERY NOT SUPPORTED YET */
if (isQuery == MS_TRUE) {
msSetError( MS_MISCERR, "Query is not supported for UV layer.", "msUVRASTERLayerWhichShapes()" );
return MS_FAILURE;
}
if( CSLFetchNameValue( layer->processing, "BANDS" ) == NULL ) {
msSetError( MS_MISCERR, "BANDS processing option is required for UV layer. You have to specified 2 bands.",
"msUVRASTERLayerWhichShapes()" );
return MS_FAILURE;
}
/* -------------------------------------------------------------------- */
/* Determine desired spacing. Default to 30 if not otherwise set */
/* -------------------------------------------------------------------- */
spacing = 30;
if( CSLFetchNameValue( layer->processing, "UV_SPACING" ) != NULL ) {
spacing =
atoi(CSLFetchNameValue( layer->processing, "UV_SPACING" ));
}
width = (int)ceil(layer->map->width/spacing);
height = (int)ceil(layer->map->height/spacing);
map_tmp.cellsize = layer->map->cellsize*spacing;
if (layer->debug)
msDebug("msUVRASTERLayerWhichShapes(): width: %d, height: %d, cellsize: %g\n",
width, height, map_tmp.cellsize);
/* Initialize our dummy map */
MS_INIT_COLOR(map_tmp.imagecolor, 255,255,255,255);
map_tmp.resolution = layer->map->resolution;
map_tmp.defresolution = layer->map->defresolution;
map_tmp.outputformat = (outputFormatObj *) msSmallCalloc(1,sizeof(outputFormatObj));
uvlinfo->band_count = map_tmp.outputformat->bands = 2;
map_tmp.outputformat->name = NULL;
map_tmp.outputformat->driver = NULL;
map_tmp.outputformat->refcount = 0;
map_tmp.outputformat->vtable = NULL;
map_tmp.outputformat->device = NULL;
map_tmp.outputformat->renderer = MS_RENDER_WITH_RAWDATA;
map_tmp.outputformat->imagemode = MS_IMAGEMODE_FLOAT32;
map_tmp.mappath = layer->map->mappath;
map_tmp.shapepath = layer->map->shapepath;
map_tmp.extent.minx = layer->map->extent.minx-(0.5*layer->map->cellsize)+(0.5*map_tmp.cellsize);
map_tmp.extent.miny = layer->map->extent.miny-(0.5*layer->map->cellsize)+(0.5*map_tmp.cellsize);
map_tmp.extent.maxx = map_tmp.extent.minx+((width-1)*map_tmp.cellsize);
map_tmp.extent.maxy = map_tmp.extent.miny+((height-1)*map_tmp.cellsize);
map_tmp.gt.rotation_angle = 0.0;
msInitProjection(&map_tmp.projection);
msCopyProjection(&map_tmp.projection, &layer->map->projection);
if (layer->debug == 5)
msDebug("msUVRASTERLayerWhichShapes(): extent: %g %d %g %g\n",
map_tmp.extent.minx, map_tmp.extent.miny,
map_tmp.extent.maxx, map_tmp.extent.maxy);
/* important to use that function, to compute map
geotransform, used by the resampling*/
msMapSetSize(&map_tmp, width, height);
if (layer->debug == 5)
msDebug("msUVRASTERLayerWhichShapes(): geotransform: %g %g %g %g %g %g\n",
map_tmp.gt.geotransform[0], map_tmp.gt.geotransform[1],
map_tmp.gt.geotransform[2], map_tmp.gt.geotransform[3],
map_tmp.gt.geotransform[4], map_tmp.gt.geotransform[5]);
uvlinfo->extent = map_tmp.extent;
image_tmp = msImageCreate(width, height, map_tmp.outputformat,
NULL, NULL, map_tmp.resolution, map_tmp.defresolution,
&(map_tmp.imagecolor));
/* Default set to AVERAGE resampling */
if( CSLFetchNameValue( layer->processing, "RESAMPLE" ) == NULL ) {
alteredProcessing = CSLDuplicate( layer->processing );
alteredProcessing =
CSLSetNameValue( alteredProcessing, "RESAMPLE",
"AVERAGE");
savedProcessing = layer->processing;
layer->processing = alteredProcessing;
//.........这里部分代码省略.........
开发者ID:shaohuifan,项目名称:mapserver,代码行数:101,代码来源:mapuvraster.c
示例9: VSIFOpenL
GDALDataset *NDFDataset::Open( GDALOpenInfo * poOpenInfo )
{
/* -------------------------------------------------------------------- */
/* The user must select the header file (ie. .H1). */
/* -------------------------------------------------------------------- */
if( poOpenInfo->nHeaderBytes < 50 )
return NULL;
if( !EQUALN((const char *)poOpenInfo->pabyHeader,"NDF_REVISION=2",14)
&& !EQUALN((const char *)poOpenInfo->pabyHeader,"NDF_REVISION=0",14) )
return NULL;
/* -------------------------------------------------------------------- */
/* Read and process the header into a local name/value */
/* stringlist. We just take off the trailing semicolon. The */
/* keyword is already seperated from the value by an equal */
/* sign. */
/* -------------------------------------------------------------------- */
VSILFILE* fp = VSIFOpenL(poOpenInfo->pszFilename, "rb");
if (fp == NULL)
return NULL;
const char *pszLine;
const int nHeaderMax = 1000;
int nHeaderLines = 0;
char **papszHeader = (char **) CPLMalloc(sizeof(char *) * (nHeaderMax+1));
while( nHeaderLines < nHeaderMax
&& (pszLine = CPLReadLineL( fp )) != NULL
&& !EQUAL(pszLine,"END_OF_HDR;") )
{
char *pszFixed;
if( strstr(pszLine,"=") == NULL )
break;
pszFixed = CPLStrdup( pszLine );
if( pszFixed[strlen(pszFixed)-1] == ';' )
pszFixed[strlen(pszFixed)-1] = '\0';
papszHeader[nHeaderLines++] = pszFixed;
papszHeader[nHeaderLines] = NULL;
}
VSIFCloseL(fp);
fp = NULL;
if( CSLFetchNameValue( papszHeader, "PIXELS_PER_LINE" ) == NULL
|| CSLFetchNameValue( papszHeader, "LINES_PER_DATA_FILE" ) == NULL
|| CSLFetchNameValue( papszHeader, "BITS_PER_PIXEL" ) == NULL
|| CSLFetchNameValue( papszHeader, "PIXEL_FORMAT" ) == NULL )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Dataset appears to be NDF but is missing a required field.");
CSLDestroy( papszHeader );
return NULL;
}
if( !EQUAL(CSLFetchNameValue( papszHeader, "PIXEL_FORMAT"),
"BYTE" )
|| !EQUAL(CSLFetchNameValue( papszHeader, "BITS_PER_PIXEL"),"8") )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Currently NDF driver supports only 8bit BYTE format." );
CSLDestroy( papszHeader );
return NULL;
}
/* -------------------------------------------------------------------- */
/* Confirm the requested access is supported. */
/* -------------------------------------------------------------------- */
if( poOpenInfo->eAccess == GA_Update )
{
CSLDestroy( papszHeader );
CPLError( CE_Failure, CPLE_NotSupported,
"The NDF driver does not support update access to existing"
" datasets.\n" );
return NULL;
}
/* -------------------------------------------------------------------- */
/* Create a corresponding GDALDataset. */
/* -------------------------------------------------------------------- */
NDFDataset *poDS;
poDS = new NDFDataset();
poDS->papszHeader = papszHeader;
poDS->nRasterXSize = atoi(poDS->Get("PIXELS_PER_LINE",""));
poDS->nRasterYSize = atoi(poDS->Get("LINES_PER_DATA_FILE",""));
/* -------------------------------------------------------------------- */
/* Create a raw raster band for each file. */
/* -------------------------------------------------------------------- */
int iBand;
const char* pszBand = CSLFetchNameValue(papszHeader,
"NUMBER_OF_BANDS_IN_VOLUME");
if (pszBand == NULL)
{
//.........这里部分代码省略.........
开发者ID:AsherBond,项目名称:MondocosmOS,代码行数:101,代码来源:ndfdataset.cpp
示例10: CPLCalloc
//.........这里部分代码省略.........
afPL[0] = pasGCPList[iGCP].dfGCPPixel;
afPL[1] = pasGCPList[iGCP].dfGCPLine;
afXY[0] = pasGCPList[iGCP].dfGCPX;
afXY[1] = pasGCPList[iGCP].dfGCPY;
std::map< std::pair<double, double>, int >::iterator oIter;
oIter = oMapPixelLineToIdx.find( std::pair<double,double>(afPL[0], afPL[1]) );
if( oIter != oMapPixelLineToIdx.end() )
{
if( afXY[0] == pasGCPList[oIter->second].dfGCPX &&
afXY[1] == pasGCPList[oIter->second].dfGCPY )
{
continue;
}
else
{
CPLError(CE_Warning, CPLE_AppDefined,
"GCP %d and %d have same (pixel,line)=(%f,%f) but different (X,Y): (%f,%f) vs (%f,%f)",
iGCP + 1, oIter->second,
afPL[0], afPL[1],
afXY[0], afXY[1],
pasGCPList[oIter->second].dfGCPX, pasGCPList[oIter->second].dfGCPY);
}
}
else
{
oMapPixelLineToIdx[ std::pair<double,double>(afPL[0], afPL[1]) ] = iGCP;
}
oIter = oMapXYToIdx.find( std::pair<double,double>(afXY[0], afXY[1]) );
if( oIter != oMapXYToIdx.end() )
{
CPLError(CE_Warning, CPLE_AppDefined,
"GCP %d and %d have same (x,y)=(%f,%f) but different (pixel,line): (%f,%f) vs (%f,%f)",
iGCP + 1, oIter->second,
afXY[0], afXY[1],
afPL[0], afPL[1],
pasGCPList[oIter->second].dfGCPPixel, pasGCPList[oIter->second].dfGCPLine);
}
else
{
oMapXYToIdx[ std::pair<double,double>(afXY[0], afXY[1]) ] = iGCP;
}
bool bOK = true;
if( bReversed )
{
bOK &= psInfo->poReverse->add_point( afPL[0], afPL[1], afXY );
bOK &= psInfo->poForward->add_point( afXY[0], afXY[1], afPL );
}
else
{
bOK &= psInfo->poForward->add_point( afPL[0], afPL[1], afXY );
bOK &= psInfo->poReverse->add_point( afXY[0], afXY[1], afPL );
}
if( !bOK )
{
GDALDestroyTPSTransformer(psInfo);
return NULL;
}
}
psInfo->nRefCount = 1;
int nThreads = 1;
if( nGCPCount > 100 )
{
const char* pszWarpThreads = CSLFetchNameValue(papszOptions, "NUM_THREADS");
if (pszWarpThreads == NULL)
pszWarpThreads = CPLGetConfigOption("GDAL_NUM_THREADS", "1");
if (EQUAL(pszWarpThreads, "ALL_CPUS"))
nThreads = CPLGetNumCPUs();
else
nThreads = atoi(pszWarpThreads);
}
if( nThreads > 1 )
{
/* Compute direct and reverse transforms in parallel */
CPLJoinableThread* hThread = CPLCreateJoinableThread(GDALTPSComputeForwardInThread, psInfo);
psInfo->bReverseSolved = psInfo->poReverse->solve() != 0;
if( hThread != NULL )
CPLJoinThread(hThread);
else
psInfo->bForwardSolved = psInfo->poForward->solve() != 0;
}
else
{
psInfo->bForwardSolved = psInfo->poForward->solve() != 0;
psInfo->bReverseSolved = psInfo->poReverse->solve() != 0;
}
if( !psInfo->bForwardSolved || !psInfo->bReverseSolved )
{
GDALDestroyTPSTransformer(psInfo);
return NULL;
}
return psInfo;
}
开发者ID:StephenHolzman,项目名称:UVAmisc,代码行数:101,代码来源:gdal_tps.cpp
示例11: CPLError
GDALDataset *ISIS2Dataset::Create(const char* pszFilename,
int nXSize, int nYSize, int nBands,
GDALDataType eType, char** papszParmList) {
/* Verify settings. In Isis 2 core pixel values can be represented in
* three different ways : 1, 2 4, or 8 Bytes */
if( eType != GDT_Byte && eType != GDT_Int16 && eType != GDT_Float32
&& eType != GDT_UInt16 && eType != GDT_Float64 ){
CPLError(CE_Failure, CPLE_AppDefined,
"The ISIS2 driver does not supporting creating files of type %s.",
GDALGetDataTypeName( eType ) );
return nullptr;
}
/* (SAMPLE, LINE, BAND) - Band Sequential (BSQ) - default choice
(SAMPLE, BAND, LINE) - Band Interleaved by Line (BIL)
(BAND, SAMPLE, LINE) - Band Interleaved by Pixel (BIP) */
const char *pszInterleaving = "(SAMPLE,LINE,BAND)";
const char *pszInterleavingParam = CSLFetchNameValue( papszParmList, "INTERLEAVE" );
if ( pszInterleavingParam ) {
if ( STARTS_WITH_CI(pszInterleavingParam, "bip") )
pszInterleaving = "(BAND,SAMPLE,LINE)";
else if ( STARTS_WITH_CI(pszInterleavingParam, "bil") )
pszInterleaving = "(SAMPLE,BAND,LINE)";
else
pszInterleaving = "(SAMPLE,LINE,BAND)";
}
/* default labeling method is attached */
bool bAttachedLabelingMethod = true;
/* check if labeling method is set : check the all three first chars */
const char *pszLabelingMethod = CSLFetchNameValue( papszParmList, "LABELING_METHOD" );
if ( pszLabelingMethod ){
if ( STARTS_WITH_CI( pszLabelingMethod, "det" /* "detached" */ ) ){
bAttachedLabelingMethod = false;
}
if ( STARTS_WITH_CI( pszLabelingMethod, "att" /* attached" */ ) ){
bAttachedLabelingMethod = true;
}
}
/* set the label and data files */
CPLString osLabelFile, osRasterFile, osOutFile;
if( bAttachedLabelingMethod ) {
osLabelFile = "";
osRasterFile = pszFilename;
osOutFile = osRasterFile;
}
else
{
CPLString sExtension = "cub";
const char* pszExtension = CSLFetchNameValue( papszParmList, "IMAGE_EXTENSION" );
if( pszExtension ){
sExtension = pszExtension;
}
if( EQUAL(CPLGetExtension( pszFilename ), sExtension) )
{
CPLError( CE_Failure, CPLE_AppDefined,
"IMAGE_EXTENSION (%s) cannot match LABEL file extension.",
sExtension.c_str() );
return nullptr;
}
osLabelFile = pszFilename;
osRasterFile = CPLResetExtension( osLabelFile, sExtension );
osOutFile = osLabelFile;
}
const char *pszObject = CSLFetchNameValue( papszParmList, "OBJECT" );
CPLString sObject = "QUBE"; // default choice
if (pszObject) {
if ( EQUAL( pszObject, "IMAGE") ){
sObject = "IMAGE";
}
if ( EQUAL( pszObject, "SPECTRAL_QUBE")){
sObject = "SPECTRAL_QUBE";
}
}
GUIntBig iRecords = ISIS2Dataset::RecordSizeCalculation(nXSize, nYSize, nBands, eType);
GUIntBig iLabelRecords(2);
CPLDebug("ISIS2","irecord = %i",static_cast<int>(iRecords));
if( bAttachedLabelingMethod )
{
ISIS2Dataset::WriteLabel(osRasterFile, "", sObject, nXSize, nYSize, nBands, eType, iRecords, pszInterleaving, iLabelRecords, true);
}
else
{
ISIS2Dataset::WriteLabel(osLabelFile, osRasterFile, sObject, nXSize, nYSize, nBands, eType, iRecords, pszInterleaving, iLabelRecords);
}
if( !ISIS2Dataset::WriteRaster(osRasterFile, bAttachedLabelingMethod,
iRecords, iLabelRecords, eType,
pszInterleaving) )
return nullptr;
return reinterpret_cast<GDALDataset *>( GDALOpen( osOutFile, GA_Update ) );
//.........这里部分代码省略.........
开发者ID:ksshannon,项目名称:gdal,代码行数:101,代码来源:isis2dataset.cpp
示例12: VSIMalloc
CPLErr VRTWarpedDataset::ProcessBlock( int iBlockX, int iBlockY )
{
if( poWarper == NULL )
return CE_Failure;
const GDALWarpOptions *psWO = poWarper->GetOptions();
/* -------------------------------------------------------------------- */
/* Allocate block of memory large enough to hold all the bands */
/* for this block. */
/* -------------------------------------------------------------------- */
int iBand;
GByte *pabyDstBuffer;
int nDstBufferSize;
int nWordSize = (GDALGetDataTypeSize(psWO->eWorkingDataType) / 8);
// FIXME? : risk of overflow in multiplication if nBlockXSize or nBlockYSize are very large
nDstBufferSize = nBlockXSize * nBlockYSize * psWO->nBandCount * nWordSize;
pabyDstBuffer = (GByte *) VSIMalloc(nDstBufferSize);
if( pabyDstBuffer == NULL )
{
CPLError( CE_Failure, CPLE_OutOfMemory,
"Out of memory allocating %d byte buffer in VRTWarpedDataset::ProcessBlock()",
nDstBufferSize );
return CE_Failure;
}
memset( pabyDstBuffer, 0, nDstBufferSize );
/* -------------------------------------------------------------------- */
/* Process INIT_DEST option to initialize the buffer prior to */
/* warping into it. */
/* NOTE:The following code is 99% similar in gdalwarpoperation.cpp and */
/* vrtwarped.cpp. Be careful to keep it in sync ! */
/* -------------------------------------------------------------------- */
const char *pszInitDest = CSLFetchNameValue( psWO->papszWarpOptions,
"INIT_DEST" );
if( pszInitDest != NULL && !EQUAL(pszInitDest, "") )
{
char **papszInitValues =
CSLTokenizeStringComplex( pszInitDest, ",", FALSE, FALSE );
int nInitCount = CSLCount(papszInitValues);
for( iBand = 0; iBand < psWO->nBandCount; iBand++ )
{
double adfInitRealImag[2];
GByte *pBandData;
int nBandSize = nBlockXSize * nBlockYSize * nWordSize;
const char *pszBandInit = papszInitValues[MIN(iBand,nInitCount-1)];
if( EQUAL(pszBandInit,"NO_DATA")
&& psWO->padfDstNoDataReal != NULL )
{
adfInitRealImag[0] = psWO->padfDstNoDataReal[iBand];
adfInitRealImag[1] = psWO->padfDstNoDataImag[iBand];
}
else
{
CPLStringToComplex( pszBandInit,
adfInitRealImag + 0, adfInitRealImag + 1);
}
pBandData = ((GByte *) pabyDstBuffer) + iBand * nBandSize;
if( psWO->eWorkingDataType == GDT_Byte )
memset( pBandData,
MAX(0,MIN(255,(int)adfInitRealImag[0])),
nBandSize);
else if( adfInitRealImag[0] == 0.0 && adfInitRealImag[1] == 0 )
{
memset( pBandData, 0, nBandSize );
}
else if( adfInitRealImag[1] == 0.0 )
{
GDALCopyWords( &adfInitRealImag, GDT_Float64, 0,
pBandData,psWO->eWorkingDataType,nWordSize,
nBlockXSize * nBlockYSize );
}
else
{
GDALCopyWords( &adfInitRealImag, GDT_CFloat64, 0,
pBandData,psWO->eWorkingDataType,nWordSize,
nBlockXSize * nBlockYSize );
}
}
CSLDestroy( papszInitValues );
}
/* -------------------------------------------------------------------- */
/* Warp into this buffer. */
/* -------------------------------------------------------------------- */
CPLErr eErr;
eErr =
poWarper->WarpRegionToBuffer(
//.........这里部分代码省略.........
开发者ID:469447793,项目名称:World-Wind-Java,代码行数:101,代码来源:vrtwarped.cpp
|
请发表评论