本文整理汇总了C++中CPLGetXMLValue函数的典型用法代码示例。如果您正苦于以下问题:C++ CPLGetXMLValue函数的具体用法?C++ CPLGetXMLValue怎么用?C++ CPLGetXMLValue使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了CPLGetXMLValue函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: LookForSimpleType
static
int LookForSimpleType(CPLXMLNode *psSchemaNode,
const char* pszStrippedNSType,
GMLPropertyType *pGMLType,
int *pnWidth,
int *pnPrecision)
{
CPLXMLNode *psThis;
for( psThis = psSchemaNode->psChild;
psThis != NULL; psThis = psThis->psNext )
{
if( psThis->eType == CXT_Element
&& EQUAL(psThis->pszValue,"simpleType")
&& EQUAL(CPLGetXMLValue(psThis,"name",""),pszStrippedNSType) )
{
break;
}
}
if (psThis == NULL)
return FALSE;
return GetSimpleTypeProperties(psThis, pGMLType, pnWidth, pnPrecision);
}
开发者ID:imincik,项目名称:pkg-gdal,代码行数:23,代码来源:parsexsd.cpp
示例2: CPLGetXMLValue
CPLXMLNode * SAFEDataset::GetDataObject(
CPLXMLNode *psMetaDataObjects, CPLXMLNode *psDataObjects,
const char *metadataObjectId)
{
/* -------------------------------------------------------------------- */
/* Look for MetadataObject Element by ID. */
/* -------------------------------------------------------------------- */
CPLXMLNode *psMDO = SAFEDataset::GetMetaDataObject(
psMetaDataObjects, metadataObjectId);
if (psMDO!=nullptr) {
const char *dataObjectId = CPLGetXMLValue(
psMDO, "dataObjectPointer.dataObjectID", "" );
if( *dataObjectId != '\0' ) {
return SAFEDataset::GetDataObject(psDataObjects, dataObjectId);
}
}
CPLError( CE_Warning, CPLE_AppDefined,
"DataObject not found with MetaID=%s",
metadataObjectId);
return nullptr;
}
开发者ID:tbonfort,项目名称:gdal,代码行数:24,代码来源:safedataset.cpp
示例3: time
int OGRFMECacheIndex::ExpireOldCaches( IFMESession *poSession )
{
CPLXMLNode *psDSNode, *psLastDSNode = NULL;
unsigned long nCurTime = time(NULL);
int bChangeMade = FALSE;
if( psTree == NULL )
return FALSE;
for( psLastDSNode = NULL; TRUE; psLastDSNode = psDSNode )
{
if( psLastDSNode != NULL )
psDSNode = psLastDSNode->psNext;
else
psDSNode = psTree->psChild;
if( psDSNode == NULL )
break;
if( !EQUAL(psDSNode->pszValue,"DataSource") )
continue;
/* -------------------------------------------------------------------- */
/* When was this datasource last accessed? */
/* -------------------------------------------------------------------- */
unsigned long nLastUseTime = 0;
sscanf( CPLGetXMLValue( psDSNode, "LastUseTime", "0" ),
"%lu", &nLastUseTime );
/* -------------------------------------------------------------------- */
/* When was this datasource created. */
/* -------------------------------------------------------------------- */
unsigned long nCreationTime = 0;
sscanf( CPLGetXMLValue( psDSNode, "CreationTime", "0" ),
"%lu", &nCreationTime );
/* -------------------------------------------------------------------- */
/* Do we want to delete this datasource according to our */
/* retention and ref timeout rules? */
/* -------------------------------------------------------------------- */
int bCleanup = FALSE;
// Do we want to cleanup this node?
if( atoi(CPLGetXMLValue( psDSNode, "RefCount", "0" )) > 0
&& nLastUseTime + FMECACHE_REF_TIMEOUT < nCurTime )
bCleanup = TRUE;
if( atoi(CPLGetXMLValue( psDSNode, "RefCount", "0" )) < 1
&& nLastUseTime + FMECACHE_RETENTION < nCurTime )
bCleanup = TRUE;
if( atoi(CPLGetXMLValue( psDSNode, "RefCount", "0" )) < 1
&& nCreationTime + FMECACHE_MAX_RETENTION < nCurTime )
bCleanup = TRUE;
if( !bCleanup )
continue;
bChangeMade = TRUE;
CPLDebug( "OGRFMECacheIndex",
"ExpireOldCaches() cleaning up data source %s - %ds since last use, %ds old.",
CPLGetXMLValue( psDSNode, "DSName", "<missing name>" ),
nCurTime - nLastUseTime,
nCurTime - nCreationTime );
/* -------------------------------------------------------------------- */
/* Loop over all the layers, to delete the spatial caches on */
/* disk. */
/* -------------------------------------------------------------------- */
CPLXMLNode *psLayerN;
for( psLayerN = psDSNode->psChild;
psLayerN != NULL;
psLayerN = psLayerN->psNext )
{
IFMESpatialIndex *poIndex;
if( !EQUAL(psLayerN->pszValue,"OGRLayer") )
continue;
const char *pszBase;
pszBase = CPLGetXMLValue( psLayerN, "SpatialCacheName", "" );
if( EQUAL(pszBase,"") )
continue;
// open, and then delete the index on close.
poIndex = poSession->createSpatialIndex( pszBase, "READ", NULL );
if( poIndex == NULL )
continue;
if( poIndex->open() != 0 )
{
CPLDebug( "OGRFMECacheIndex", "Failed to open FME index %s.",
pszBase );
//.........这里部分代码省略.........
开发者ID:0004c,项目名称:node-gdal,代码行数:101,代码来源:ogrfmecacheindex.cpp
示例4: CPLParseXMLString
OGRErr OGRMILayerAttrIndex::LoadConfigFromXML(const char* pszRawXML)
{
/* -------------------------------------------------------------------- */
/* Parse the XML. */
/* -------------------------------------------------------------------- */
CPLXMLNode *psRoot = CPLParseXMLString( pszRawXML );
if( psRoot == nullptr )
return OGRERR_FAILURE;
/* -------------------------------------------------------------------- */
/* Open the index file. */
/* -------------------------------------------------------------------- */
poINDFile = new TABINDFile();
if (pszMIINDFilename == nullptr)
pszMIINDFilename = CPLStrdup(CPLGetXMLValue(psRoot,"MIIDFilename",""));
if( pszMIINDFilename == nullptr )
return OGRERR_FAILURE;
/* NOTE: Replaced r+ with r according to explanation in Ticket #1620.
* This change has to be observed if it doesn't cause any
* problems in future. (mloskot)
*/
if( poINDFile->Open( pszMIINDFilename, "r" ) != 0 )
{
CPLDestroyXMLNode( psRoot );
CPLError( CE_Failure, CPLE_OpenFailed,
"Failed to open index file %s.",
pszMIINDFilename );
return OGRERR_FAILURE;
}
/* -------------------------------------------------------------------- */
/* Process each attrindex. */
/* -------------------------------------------------------------------- */
for( CPLXMLNode *psAttrIndex = psRoot->psChild;
psAttrIndex != nullptr;
psAttrIndex = psAttrIndex->psNext )
{
if( psAttrIndex->eType != CXT_Element
|| !EQUAL(psAttrIndex->pszValue,"OGRMIAttrIndex") )
continue;
int iField = atoi(CPLGetXMLValue(psAttrIndex,"FieldIndex","-1"));
int iIndexIndex = atoi(CPLGetXMLValue(psAttrIndex,"IndexIndex","-1"));
if( iField == -1 || iIndexIndex == -1 )
{
CPLError( CE_Warning, CPLE_AppDefined,
"Skipping corrupt OGRMIAttrIndex entry." );
continue;
}
AddAttrInd( iField, iIndexIndex );
}
CPLDestroyXMLNode( psRoot );
CPLDebug( "OGR", "Restored %d field indexes for layer %s from %s on %s.",
nIndexCount, poLayer->GetLayerDefn()->GetName(),
pszMetadataFilename ? pszMetadataFilename : "--unknown--",
pszMIINDFilename );
return OGRERR_NONE;
}
开发者ID:ksshannon,项目名称:gdal,代码行数:67,代码来源:ogr_miattrind.cpp
示例5: CPLGetXMLValue
OGRLayer* OGRVRTDataSource::InstanciateUnionLayer(
CPLXMLNode *psLTree,
const char *pszVRTDirectory,
int bUpdate,
int nRecLevel)
{
CPLXMLNode *psSubNode;
if( !EQUAL(psLTree->pszValue,"OGRVRTUnionLayer") )
return NULL;
/* -------------------------------------------------------------------- */
/* Get layer name. */
/* -------------------------------------------------------------------- */
const char *pszLayerName = CPLGetXMLValue( psLTree, "name", NULL );
if( pszLayerName == NULL )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Missing name attribute on OGRVRTUnionLayer" );
return FALSE;
}
/* -------------------------------------------------------------------- */
/* Do we have a fixed geometry type? If not derive from the */
/* source layer. */
/* -------------------------------------------------------------------- */
const char* pszGType = CPLGetXMLValue( psLTree, "GeometryType", NULL );
int bGlobalGeomTypeSet = FALSE;
OGRwkbGeometryType eGlobalGeomType = wkbUnknown;
if( pszGType != NULL )
{
int bError;
bGlobalGeomTypeSet = TRUE;
eGlobalGeomType = OGRVRTGetGeometryType(pszGType, &bError);
if( bError )
{
CPLError( CE_Failure, CPLE_AppDefined,
"GeometryType %s not recognised.",
pszGType );
return NULL;
}
}
/* -------------------------------------------------------------------- */
/* Apply a spatial reference system if provided */
/* -------------------------------------------------------------------- */
const char* pszLayerSRS = CPLGetXMLValue( psLTree, "LayerSRS", NULL );
OGRSpatialReference* poGlobalSRS = NULL;
int bGlobalSRSSet = FALSE;
if( pszLayerSRS != NULL )
{
bGlobalSRSSet = TRUE;
if( !EQUAL(pszLayerSRS,"NULL") )
{
OGRSpatialReference oSRS;
if( oSRS.SetFromUserInput( pszLayerSRS ) != OGRERR_NONE )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Failed to import LayerSRS `%s'.", pszLayerSRS );
return FALSE;
}
poGlobalSRS = oSRS.Clone();
}
}
/* -------------------------------------------------------------------- */
/* Find field declarations. */
/* -------------------------------------------------------------------- */
OGRFieldDefn** papoFields = NULL;
int nFields = 0;
OGRUnionLayerGeomFieldDefn** papoGeomFields = NULL;
int nGeomFields = 0;
for( psSubNode=psLTree->psChild;
psSubNode != NULL;
psSubNode=psSubNode->psNext )
{
if( psSubNode->eType != CXT_Element )
continue;
if( psSubNode->eType == CXT_Element && EQUAL(psSubNode->pszValue,"Field") )
{
/* -------------------------------------------------------------------- */
/* Field name. */
/* -------------------------------------------------------------------- */
const char *pszName = CPLGetXMLValue( psSubNode, "name", NULL );
if( pszName == NULL )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Unable to identify Field name." );
break;
}
OGRFieldDefn oFieldDefn( pszName, OFTString );
/* -------------------------------------------------------------------- */
/* Type */
/* -------------------------------------------------------------------- */
//.........这里部分代码省略.........
开发者ID:0004c,项目名称:node-gdal,代码行数:101,代码来源:ogrvrtdatasource.cpp
示例6: tr_strcpy
//.........这里部分代码省略.........
{
int nLNLen = tr_strlen( localname );
/* should save attributes too! */
if( m_nGeomLen + nLNLen + 4 > m_nGeomAlloc )
{
m_nGeomAlloc = (int) (m_nGeomAlloc * 1.3 + nLNLen + 1000);
m_pszGeometry = (char *)
CPLRealloc( m_pszGeometry, m_nGeomAlloc);
}
strcat( m_pszGeometry+m_nGeomLen, "</" );
tr_strcpy( m_pszGeometry+m_nGeomLen+2, localname );
strcat( m_pszGeometry+m_nGeomLen+nLNLen+2, ">" );
m_nGeomLen += static_cast<int>(strlen(m_pszGeometry+m_nGeomLen));
if( poState->m_nPathLength == m_nGeometryDepth+1 )
{
if( poState->m_poFeature != NULL )
{
CPLXMLNode* psNode = CPLParseXMLString(m_pszGeometry);
if (psNode)
{
/* workaround for common malformed gml:pos with just a
* elevation value instead of a full 3D coordinate:
*
* <gml:Point gml:id="BII2H">
* <gml:pos srsName="urn:adv:crs:ETRS89_h">41.394</gml:pos>
* </gml:Point>
*
*/
const char *pszPos;
if( (pszPos = CPLGetXMLValue( psNode, "=Point.pos", NULL ) ) != NULL
&& strstr(pszPos, " ") == NULL )
{
CPLSetXMLValue( psNode, "pos", CPLSPrintf("0 0 %s", pszPos) );
}
if ( poState->m_poFeature->GetGeometryList() &&
poState->m_poFeature->GetGeometryList()[0] )
{
int iId = poState->m_poFeature->GetClass()->GetPropertyIndex( "gml_id" );
const GMLProperty *poIdProp = poState->m_poFeature->GetProperty(iId);
#ifdef DEBUG_VERBOSE
char *pszOldGeom = CPLSerializeXMLTree( poState->m_poFeature->GetGeometryList()[0] );
CPLDebug("NAS", "Overwriting other geometry (%s; replace:%s; with:%s)",
poIdProp && poIdProp->nSubProperties>0 && poIdProp->papszSubProperties[0] ? poIdProp->papszSubProperties[0] : "(null)",
m_pszGeometry,
pszOldGeom
);
CPLFree( pszOldGeom );
#else
CPLError( CE_Warning, CPLE_AppDefined, "NAS: Overwriting other geometry (%s)",
poIdProp && poIdProp->nSubProperties>0 && poIdProp->papszSubProperties[0] ? poIdProp->papszSubProperties[0] : "(null)" );
#endif
}
poState->m_poFeature->SetGeometryDirectly( psNode );
}
else
CPLError( CE_Warning, CPLE_AppDefined, "NAS: Invalid geometry skipped" );
}
else
开发者ID:bbradbury,项目名称:lib_gdal,代码行数:67,代码来源:nashandler.cpp
示例7: CPLParseXMLString
GDALDataset *VRTDataset::OpenXML( const char *pszXML, const char *pszVRTPath,
GDALAccess eAccess)
{
/* -------------------------------------------------------------------- */
/* Parse the XML. */
/* -------------------------------------------------------------------- */
CPLXMLNode *psTree;
psTree = CPLParseXMLString( pszXML );
if( psTree == NULL )
return NULL;
CPLXMLNode *psRoot = CPLGetXMLNode( psTree, "=VRTDataset" );
if (psRoot == NULL)
{
CPLError( CE_Failure, CPLE_AppDefined,
"Missing VRTDataset element." );
CPLDestroyXMLNode( psTree );
return NULL;
}
if( CPLGetXMLNode( psRoot, "rasterXSize" ) == NULL
|| CPLGetXMLNode( psRoot, "rasterYSize" ) == NULL
|| CPLGetXMLNode( psRoot, "VRTRasterBand" ) == NULL )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Missing one of rasterXSize, rasterYSize or bands on"
" VRTDataset." );
CPLDestroyXMLNode( psTree );
return NULL;
}
/* -------------------------------------------------------------------- */
/* Create the new virtual dataset object. */
/* -------------------------------------------------------------------- */
VRTDataset *poDS;
int nXSize = atoi(CPLGetXMLValue(psRoot,"rasterXSize","0"));
int nYSize = atoi(CPLGetXMLValue(psRoot,"rasterYSize","0"));
if ( !GDALCheckDatasetDimensions(nXSize, nYSize) )
{
CPLDestroyXMLNode( psTree );
return NULL;
}
if( strstr(pszXML,"VRTWarpedDataset") != NULL )
poDS = new VRTWarpedDataset( nXSize, nYSize );
else
{
poDS = new VRTDataset( nXSize, nYSize );
poDS->eAccess = eAccess;
}
if( poDS->XMLInit( psRoot, pszVRTPath ) != CE_None )
{
delete poDS;
poDS = NULL;
}
/* -------------------------------------------------------------------- */
/* Try to return a regular handle on the file. */
/* -------------------------------------------------------------------- */
CPLDestroyXMLNode( psTree );
return poDS;
}
开发者ID:Joe-xXx,项目名称:gdal,代码行数:68,代码来源:vrtdataset.cpp
示例8: CPLError
GDALDataset *TSXDataset::Open( GDALOpenInfo *poOpenInfo ) {
/* -------------------------------------------------------------------- */
/* Is this a TerraSAR-X product file? */
/* -------------------------------------------------------------------- */
if (!TSXDataset::Identify( poOpenInfo ))
{
return NULL; /* nope */
}
/* -------------------------------------------------------------------- */
/* Confirm the requested access is supported. */
/* -------------------------------------------------------------------- */
if( poOpenInfo->eAccess == GA_Update )
{
CPLError( CE_Failure, CPLE_NotSupported,
"The TSX driver does not support update access to existing"
" datasets.\n" );
return NULL;
}
CPLString osFilename;
if( poOpenInfo->bIsDirectory )
{
osFilename =
CPLFormCIFilename( poOpenInfo->pszFilename,
CPLGetFilename( poOpenInfo->pszFilename ),
"xml" );
}
else
osFilename = poOpenInfo->pszFilename;
/* Ingest the XML */
CPLXMLNode *psData = CPLParseXMLFile( osFilename );
if (psData == NULL)
return NULL;
/* find the product components */
CPLXMLNode *psComponents
= CPLGetXMLNode( psData, "=level1Product.productComponents" );
if (psComponents == NULL) {
CPLError( CE_Failure, CPLE_OpenFailed,
"Unable to find <productComponents> tag in file.\n" );
CPLDestroyXMLNode(psData);
return NULL;
}
/* find the product info tag */
CPLXMLNode *psProductInfo
= CPLGetXMLNode( psData, "=level1Product.productInfo" );
if (psProductInfo == NULL) {
CPLError( CE_Failure, CPLE_OpenFailed,
"Unable to find <productInfo> tag in file.\n" );
CPLDestroyXMLNode(psData);
return NULL;
}
/* -------------------------------------------------------------------- */
/* Create the dataset. */
/* -------------------------------------------------------------------- */
TSXDataset *poDS = new TSXDataset();
/* -------------------------------------------------------------------- */
/* Read in product info. */
/* -------------------------------------------------------------------- */
poDS->SetMetadataItem( "SCENE_CENTRE_TIME", CPLGetXMLValue( psProductInfo,
"sceneInfo.sceneCenterCoord.azimuthTimeUTC", "unknown" ) );
poDS->SetMetadataItem( "OPERATIONAL_MODE", CPLGetXMLValue( psProductInfo,
"generationInfo.groundOperationsType", "unknown" ) );
poDS->SetMetadataItem( "ORBIT_CYCLE", CPLGetXMLValue( psProductInfo,
"missionInfo.orbitCycle", "unknown" ) );
poDS->SetMetadataItem( "ABSOLUTE_ORBIT", CPLGetXMLValue( psProductInfo,
"missionInfo.absOrbit", "unknown" ) );
poDS->SetMetadataItem( "ORBIT_DIRECTION", CPLGetXMLValue( psProductInfo,
"missionInfo.orbitDirection", "unknown" ) );
poDS->SetMetadataItem( "IMAGING_MODE", CPLGetXMLValue( psProductInfo,
"acquisitionInfo.imagingMode", "unknown" ) );
poDS->SetMetadataItem( "PRODUCT_VARIANT", CPLGetXMLValue( psProductInfo,
"productVariantInfo.productVariant", "unknown" ) );
char *pszDataType = CPLStrdup( CPLGetXMLValue( psProductInfo,
"imageDataInfo.imageDataType", "unknown" ) );
poDS->SetMetadataItem( "IMAGE_TYPE", pszDataType );
/* Get raster information */
int nRows = atoi( CPLGetXMLValue( psProductInfo,
"imageDataInfo.imageRaster.numberOfRows", "" ) );
int nCols = atoi( CPLGetXMLValue( psProductInfo,
"imageDataInfo.imageRaster.numberOfColumns", "" ) );
poDS->nRasterXSize = nCols;
poDS->nRasterYSize = nRows;
poDS->SetMetadataItem( "ROW_SPACING", CPLGetXMLValue( psProductInfo,
"imageDataInfo.imageRaster.rowSpacing", "unknown" ) );
poDS->SetMetadataItem( "COL_SPACING", CPLGetXMLValue( psProductInfo,
"imageDataInfo.imageRaster.columnSpacing", "unknown" ) );
poDS->SetMetadataItem( "COL_SPACING_UNITS", CPLGetXMLValue( psProductInfo,
"imageDataInfo.imageRaster.columnSpacing.units", "unknown" ) );
//.........这里部分代码省略.........
开发者ID:Wedjaa,项目名称:node-gdal,代码行数:101,代码来源:tsxdataset.cpp
示例9: CPLParseXMLString
OGRErr BAGDataset::ParseWKTFromXML( const char *pszISOXML )
{
OGRSpatialReference oSRS;
CPLXMLNode *psRoot = CPLParseXMLString( pszISOXML );
OGRErr eOGRErr = OGRERR_FAILURE;
if( psRoot == NULL )
return eOGRErr;
CPLStripXMLNamespace( psRoot, NULL, TRUE );
CPLXMLNode *psRSI = CPLSearchXMLNode( psRoot, "=referenceSystemInfo" );
if( psRSI == NULL )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Unable to find <referenceSystemInfo> in metadata." );
CPLDestroyXMLNode( psRoot );
return eOGRErr;
}
oSRS.Clear();
const char *pszSRCodeString =
CPLGetXMLValue( psRSI, "MD_ReferenceSystem.referenceSystemIdentifier.RS_Identifier.code.CharacterString", NULL );
if( pszSRCodeString == NULL )
{
CPLDebug("BAG",
"Unable to find /MI_Metadata/referenceSystemInfo[1]/MD_ReferenceSystem[1]/referenceSystemIdentifier[1]/RS_Identifier[1]/code[1]/CharacterString[1] in metadata." );
CPLDestroyXMLNode( psRoot );
return eOGRErr;
}
const char *pszSRCodeSpace =
CPLGetXMLValue( psRSI, "MD_ReferenceSystem.referenceSystemIdentifier.RS_Identifier.codeSpace.CharacterString", "" );
if( !EQUAL( pszSRCodeSpace, "WKT" ) )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Spatial reference string is not in WKT." );
CPLDestroyXMLNode( psRoot );
return eOGRErr;
}
char* pszWKT = const_cast< char* >( pszSRCodeString );
if( oSRS.importFromWkt( &pszWKT ) != OGRERR_NONE )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Failed parsing WKT string \"%s\".", pszSRCodeString );
CPLDestroyXMLNode( psRoot );
return eOGRErr;
}
oSRS.exportToWkt( &pszProjection );
eOGRErr = OGRERR_NONE;
psRSI = CPLSearchXMLNode( psRSI->psNext, "=referenceSystemInfo" );
if( psRSI == NULL )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Unable to find second instance of <referenceSystemInfo> in metadata." );
CPLDestroyXMLNode( psRoot );
return eOGRErr;
}
pszSRCodeString =
CPLGetXMLValue( psRSI, "MD_ReferenceSystem.referenceSystemIdentifier.RS_Identifier.code.CharacterString", NULL );
if( pszSRCodeString == NULL )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Unable to find /MI_Metadata/referenceSystemInfo[2]/MD_ReferenceSystem[1]/referenceSystemIdentifier[1]/RS_Identifier[1]/code[1]/CharacterString[1] in metadata." );
CPLDestroyXMLNode( psRoot );
return eOGRErr;
}
pszSRCodeSpace =
CPLGetXMLValue( psRSI, "MD_ReferenceSystem.referenceSystemIdentifier.RS_Identifier.codeSpace.CharacterString", "" );
if( !EQUAL( pszSRCodeSpace, "WKT" ) )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Spatial reference string is not in WKT." );
CPLDestroyXMLNode( psRoot );
return eOGRErr;
}
if( EQUALN(pszSRCodeString, "VERTCS", 6 ) )
{
CPLString oString( pszProjection );
oString += ",";
oString += pszSRCodeString;
if ( pszProjection )
CPLFree( pszProjection );
pszProjection = CPLStrdup( oString );
}
CPLDestroyXMLNode( psRoot );
return eOGRErr;
}
开发者ID:AbdelghaniDr,项目名称:mirror,代码行数:97,代码来源:bagdataset.cpp
示例10: GetMetadata
//.........这里部分代码省略.........
strcmp(psChild->pszValue, "xlink:href") == 0 &&
(strncmp(psChild->psChild->pszValue, "http://", strlen("http://")) == 0 ||
strncmp(psChild->psChild->pszValue, "https://", strlen("https://")) == 0) )
{
if( !bOpenRemoteResources )
CPLDebug("GMLJP2", "Remote feature collection %s mentionned in GMLJP2 box",
psChild->psChild->pszValue);
else
osGMLTmpFile = "/vsicurl/" + CPLString(psChild->psChild->pszValue);
}
else if( psChild->eType == CXT_Element &&
strstr(psChild->pszValue, "FeatureCollection") != NULL )
{
psFC = psChild;
}
if( psFC == NULL && osGMLTmpFile.size() == 0 )
continue;
if( psFC != NULL )
{
osGMLTmpFile = CPLSPrintf("/vsimem/gmljp2/%p/my.gml", this);
// Create temporary .gml file
CPLSerializeXMLTreeToFile(psFC, osGMLTmpFile);
}
CPLDebug("GMLJP2", "Found a FeatureCollection at %s level",
(bIsGC) ? "GridCoverage" : "CoverageCollection");
CPLString osXSDTmpFile;
if( psFC )
{
// Try to localize its .xsd schema in a GMLJP2 auxiliary box
const char* pszSchemaLocation = CPLGetXMLValue(psFC, "xsi:schemaLocation", NULL);
if( pszSchemaLocation )
{
char **papszTokens = CSLTokenizeString2(
pszSchemaLocation, " \t\n",
CSLT_HONOURSTRINGS | CSLT_STRIPLEADSPACES | CSLT_STRIPENDSPACES);
if( (CSLCount(papszTokens) % 2) == 0 )
{
for(char** papszIter = papszTokens; *papszIter; papszIter += 2 )
{
if( strncmp(papszIter[1], "gmljp2://xml/", strlen("gmljp2://xml/")) == 0 )
{
const char* pszBoxName = papszIter[1] + strlen("gmljp2://xml/");
char** papszBoxData = GetMetadata(CPLSPrintf("xml:%s", pszBoxName));
if( papszBoxData != NULL )
{
osXSDTmpFile = CPLSPrintf("/vsimem/gmljp2/%p/my.xsd", this);
VSIFCloseL(VSIFileFromMemBuffer(osXSDTmpFile,
(GByte*)papszBoxData[0],
strlen(papszBoxData[0]),
FALSE));
}
else
{
CPLDebug("GMLJP2",
"Feature collection references %s, but no corresponding box found",
papszIter[1]);
}
break;
}
}
}
开发者ID:AbdelghaniDr,项目名称:mirror,代码行数:67,代码来源:gdaljp2abstractdataset.cpp
示例11: ParseKMLGeometry
static OGRGeometry* ParseKMLGeometry(/* const */ CPLXMLNode* psXML)
{
OGRGeometry* poGeom = nullptr;
const char* pszGeomType = psXML->pszValue;
if (strcmp(pszGeomType, "Point") == 0)
{
const char* pszCoordinates = CPLGetXMLValue(psXML, "coordinates", nullptr);
if (pszCoordinates)
{
char** papszTokens = CSLTokenizeString2(pszCoordinates, ",", 0);
if (CSLCount(papszTokens) == 2)
poGeom = new OGRPoint(CPLAtof(papszTokens[0]), CPLAtof(papszTokens[1]));
else if (CSLCount(papszTokens) == 3)
poGeom = new OGRPoint(CPLAtof(papszTokens[0]), CPLAtof(papszTokens[1]),
CPLAtof(papszTokens[2]));
CSLDestroy(papszTokens);
}
}
else if (strcmp(pszGeomType, "LineString") == 0)
{
const char* pszCoordinates = CPLGetXMLValue(psXML, "coordinates", nullptr);
if (pszCoordinates)
{
OGRLineString* poLS = new OGRLineString();
ParseLineString(poLS, pszCoordinates);
poGeom = poLS;
}
}
else if (strcmp(pszGeomType, "Polygon") == 0)
{
OGRPolygon* poPoly = nullptr;
CPLXMLNode* psOuterBoundary = CPLGetXMLNode(psXML, "outerBoundaryIs");
if (psOuterBoundary)
{
CPLXMLNode* psLinearRing = CPLGetXMLNode(psOuterBoundary, "LinearRing");
const char* pszCoordinates = CPLGetXMLValue(
psLinearRing ? psLinearRing : psOuterBoundary, "coordinates", nullptr);
if (pszCoordinates)
{
OGRLinearRing* poLS = new OGRLinearRing();
ParseLineString(poLS, pszCoordinates);
poPoly = new OGRPolygon();
poPoly->addRingDirectly(poLS);
poGeom = poPoly;
}
if (poPoly)
{
CPLXMLNode* psIter = psXML->psChild;
while(psIter)
{
if (psIter->eType == CXT_Element &&
strcmp(psIter->pszValue, "innerBoundaryIs") == 0)
{
psLinearRing = CPLGetXMLNode(psIter, "LinearRing");
pszCoordinates = CPLGetXMLValue(
psLinearRing ? psLinearRing : psIter, "coordinates", nullptr);
if (pszCoordinates)
{
OGRLinearRing* poLS = new OGRLinearRing();
ParseLineString(poLS, pszCoordinates);
poPoly->addRingDirectly(poLS);
}
}
psIter = psIter->psNext;
}
}
}
}
else if (strcmp(pszGeomType, "MultiGeometry") == 0)
{
CPLXMLNode* psIter = nullptr;
OGRwkbGeometryType eType = wkbUnknown;
for(psIter = psXML->psChild; psIter; psIter = psIter->psNext)
{
if (psIter->eType == CXT_Element)
{
OGRwkbGeometryType eNewType = wkbUnknown;
if (strcmp(psIter->pszValue, "Point") == 0)
{
eNewType = wkbPoint;
}
else if (strcmp(psIter->pszValue, "LineString") == 0)
{
eNewType = wkbLineString;
}
else if (strcmp(psIter->pszValue, "Polygon") == 0)
{
eNewType = wkbPolygon;
}
else
break;
if (eType == wkbUnknown)
eType = eNewType;
else if (eType != eNewType)
break;
}
}
OGRGeometryCollection* poColl = nullptr;
if (psIter != nullptr)
//.........这里部分代码省略.........
开发者ID:koordinates,项目名称:gdal,代码行数:101,代码来源:ogrgftlayer.cpp
示例12: CPLGetXMLValue
CPLErr GDALWMSMiniDriver_AGS::Initialize(CPLXMLNode *config)
{
CPLErr ret = CE_None;
int i;
if (ret == CE_None)
{
const char *base_url = CPLGetXMLValue(config, "ServerURL", "");
if (base_url[0] != '\0')
{
/* Try the old name */
base_url = CPLGetXMLValue(config, "ServerUrl", "");
}
if (base_url[0] != '\0')
{
m_base_url = base_url;
}
else
{
CPLError(CE_Failure, CPLE_AppDefined, "GDALWMS, ArcGIS Server mini-driver: ServerURL missing.");
ret = CE_Failure;
}
}
if (ret == CE_None)
{
m_image_format = CPLGetXMLValue(config, "ImageFormat", "png");
m_transparent = CPLGetXMLValue(config, "Transparent","");
// the transparent flag needs to be "true" or "false"
// in lower case according to the ArcGIS Server REST API
for(i = 0; i < (int)m_transparent.size(); i++)
{
m_transparent[i] = (char) tolower(m_transparent[i]);
}
m_layers = CPLGetXMLValue(config, "Layers", "");
}
if (ret == CE_None)
{
const char* irs = CPLGetXMLValue(config, "SRS", "102100");
if (irs != NULL)
{
if(EQUALN(irs, "EPSG:", 5)) //if we have EPSG code just convert it to WKT
{
m_projection_wkt = ProjToWKT(irs);
m_irs = irs + 5;
}
else //if we have AGS code - try if it's EPSG
{
m_irs = irs;
m_projection_wkt = ProjToWKT("EPSG:" + m_irs);
}
// TODO: if we have AGS JSON
}
m_identification_tolerance = CPLGetXMLValue(config, "IdentificationTolerance", "2");
}
if (ret == CE_None)
{
const char *bbox_order = CPLGetXMLValue(config, "BBoxOrder", "xyXY");
if (bbox_order[0] != '\0')
{
for (i = 0; i < 4; ++i)
{
if ((bbox_order[i] != 'x') && (bbox_order[i] != 'y') &&
(bbox_order[i] != 'X') && (bbox_order[i] != 'Y'))
break;
}
if (i == 4)
{
m_bbox_order = bbox_order;
}
else
{
CPLError(CE_Failure, CPLE_AppDefined, "GDALWMS, ArcGIS Server mini-driver: Incorrect BBoxOrder.");
ret = CE_Failure;
}
}
else
{
CPLError(CE_Failure, CPLE_AppDefined, "GDALWMS, ArcGIS Server mini-driver: BBoxOrder missing.");
ret = CE_Failure;
}
}
return ret;
}
开发者ID:garnertb,项目名称:gdal,代码行数:91,代码来源:minidriver_arcgis_server.cpp
示例13: CPLAssert
VSIVirtualHandle *
VSISparseFileFilesystemHandler::Open( const char *pszFilename,
const char *pszAccess )
{
CPLAssert( EQUALN(pszFilename,"/vsisparse/", 11) );
if( !EQUAL(pszAccess,"r") && !EQUAL(pszAccess,"rb") )
{
errno = EACCES;
return NULL;
}
/* Arbitrary number */
if( GetRecCounter() == 32 )
return NULL;
CPLString osSparseFilePath = pszFilename + 11;
/* -------------------------------------------------------------------- */
/* Does this file even exist? */
/* -------------------------------------------------------------------- */
VSILFILE *fp = VSIFOpenL( osSparseFilePath, "r" );
if( fp == NULL )
return NULL;
VSIFCloseL( fp );
/* -------------------------------------------------------------------- */
/* Read the XML file. */
/* -------------------------------------------------------------------- */
CPLXMLNode *psXMLRoot = CPLParseXMLFile( osSparseFilePath );
if( psXMLRoot == NULL )
return NULL;
/* -------------------------------------------------------------------- */
/* Setup the file handle on this file. */
/* -------------------------------------------------------------------- */
VSISparseFileHandle *poHandle = new VSISparseFileHandle(this);
/* -------------------------------------------------------------------- */
/* Translate the desired fields out of the XML tree. */
/* -------------------------------------------------------------------- */
CPLXMLNode *psRegion;
for( psRegion = psXMLRoot->psChild;
psRegion != NULL;
psRegion = psRegion->psNext )
{
if( psRegion->eType != CXT_Element )
continue;
if( !EQUAL(psRegion->pszValue,"SubfileRegion")
&& !EQUAL(psRegion->pszValue,"ConstantRegion") )
continue;
SFRegion oRegion;
oRegion.osFilename = CPLGetXMLValue( psRegion, "Filename", "" );
if( atoi(CPLGetXMLValue( psRegion, "Filename.relative", "0" )) != 0 )
{
CPLString osSFPath = CPLGetPath(osSparseFilePath);
oRegion.osFilename = CPLFormFilename( osSFPath,
oRegion.osFilename, NULL );
}
oRegion.nDstOffset =
CPLScanUIntBig( CPLGetXMLValue(psRegion,"DestinationOffset","0" ),
32 );
oRegion.nSrcOffset =
CPLScanUIntBig( CPLGetXMLValue(psRegion,"SourceOffset","0" ), 32);
oRegion.nLength =
CPLScanUIntBig( CPLGetXMLValue(psRegion,"RegionLength","0" ), 32);
oRegion.byValue = (GByte) atoi(CPLGetXMLValue(psRegion,"Value","0" ));
poHandle->aoRegions.push_back( oRegion );
}
/* -------------------------------------------------------------------- */
/* Get sparse file length, use maximum bound of regions if not */
/* explicit in file. */
/* -------------------------------------------------------------------- */
poHandle->nOverallLength =
CPLScanUIntBig( CPLGetXMLValue(psXMLRoot,"Length","0" ), 32);
if( poHandle->nOverallLength == 0 )
{
for( unsigned int i = 0; i < poHandle->aoRegions.size(); i++ )
{
poHandle->nOverallLength = MAX(poHandle->nOverallLength,
poHandle->aoRegions[i].nDstOffset
+ poHandle->aoRegions[i].nLength);
}
}
CPLDestroyXMLNode( psXMLRoot );
return poHandle;
//.........这里部分代码省略.........
开发者ID:garnertb,项目名称:gdal,代码行数:101,代码来源:cpl_vsil_sparsefile.cpp
示例14: CPLGetXMLNode
GDALDataset* ECRGTOCDataset::Build(const char* pszTOCFilename,
CPLXMLNode* psXML,
CPLString osProduct,
CPLString osDiscId,
const char* pszOpenInfoFilename)
{
CPLXMLNode* psTOC = CPLGetXMLNode(psXML, "=Table_of_Contents");
if (psTOC == NULL)
{
CPLError(CE_Warning, CPLE_AppDefined,
"Cannot find Table_of_Contents element");
return NULL;
}
double dfGlobalMinX = 0, dfGlobalMinY = 0, dfGlobalMaxX = 0, dfGlobalMaxY= 0;
double dfGlobalPixelXSize = 0, dfGlobalPixelYSize = 0;
int bGlobalExtentValid = FALSE;
ECRGTOCDataset* poDS = new ECRGTOCDataset();
int nSubDatasets = 0;
int bLookForSubDataset = osProduct.size() != 0 && osDiscId.size() != 0;
int nCountSubDataset = 0;
poDS->SetDescription( pszOpenInfoFilename );
poDS->papszFileList = poDS->GDALDataset::GetFileList();
for(CPLXMLNode* psIter1 = psTOC->psChild;
psIter1 != NULL;
psIter1 = psIter1->psNext)
{
if (!(psIter1->eType == CXT_Element && psIter1->pszValue != NULL &&
strcmp(psIter1->pszValue, "product") == 0))
continue;
const char* pszProductTitle =
CPLGetXMLValue(psIter1, "product_title", NULL);
if (pszProductTitle == NULL)
{
CPLError(CE_Warning, CPLE_AppDefined,
"Cannot find product_title attribute");
continue;
}
if (bLookForSubDataset && strcmp(pszProductTitle, osProduct.c_str()) != 0)
continue;
for(CPLXMLNode* psIter2 = psIter1->psChild;
psIter2 != NULL;
psIter2 = psIter2->psNext)
{
if (!(psIter2->eType == CXT_Element && psIter2->pszValue != NULL &&
strcmp(psIter2->pszValue, "disc") == 0))
continue;
const char* pszDiscId = CPLGetXMLValue(psIter2, "id", NULL);
if (pszDiscId == NULL)
{
CPLError(CE_Warning, CPLE_AppDefined,
"Cannot find id attribute");
continue;
}
if (bLookForSubDataset && strcmp(pszDiscId, osDiscId.c_str()) != 0)
continue;
nCountSubDataset ++;
CPLXMLNode* psFrameList = CPLGetXMLNode(psIter2, "frame_list");
if (psFrameList == NULL)
{
CPLError(CE_Warning, CPLE_AppDefined,
"Cannot find frame_list element");
continue;
}
int nValidFrames = 0;
std::vector<FrameDesc> aosFrameDesc;
int nSubDatasetScale = -1;
for(CPLXMLNode* psIter3 = psFrameList->psChild;
psIter3 != NULL;
psIter3 = psIter3->psNext)
{
if (!(psIter3->eType == CXT_Element &&
psIter3->pszValue != NULL &&
strcmp(psIter3->pszValue, "scale&quo
|
请发表评论