NASReader::~NASReader() { ClearClasses(); CPLFree( m_pszFilename ); CleanupParser(); CPLFree( m_pszFilteredClassName ); }
NASReader::~NASReader() { ClearClasses(); CPLFree( m_pszFilename ); CleanupParser(); if (CSLTestBoolean(CPLGetConfigOption("NAS_XERCES_TERMINATE", "FALSE"))) XMLPlatformUtils::Terminate(); CPLFree( m_pszFilteredClassName ); }
int ParseOSCFile(int fd,NodesX *OSMNodes,WaysX *OSMWays,RelationsX *OSMRelations) { int retval; /* Initialise the parser */ InitialiseParser(OSMNodes,OSMWays,OSMRelations); /* Parse the file */ nnodes=0,nways=0,nrelations=0; current_tags=NULL; retval=ParseXML(fd,xml_osc_toplevel_tags,XMLPARSE_UNKNOWN_ATTR_IGNORE); /* Cleanup the parser */ CleanupParser(); return(retval); }
int GMLReader::PrescanForTemplate () { int iCount = 0; GMLFeature *poFeature; //int bSequentialLayers = TRUE; GFSTemplateList *pCC = new GFSTemplateList(); /* processing GML features */ while( (poFeature = NextFeature()) != NULL ) { GMLFeatureClass *poClass = poFeature->GetClass(); const CPLXMLNode* const * papsGeomList = poFeature->GetGeometryList(); int b_has_geom = FALSE; if( papsGeomList != NULL ) { int i = 0; const CPLXMLNode *psNode = papsGeomList[i]; while( psNode != NULL ) { b_has_geom = TRUE; i++; psNode = papsGeomList[i]; } } pCC->Update( poClass->GetElementName(), b_has_geom ); delete poFeature; } gmlUpdateFeatureClasses( pCC, this, &m_bSequentialLayers ); if ( m_bSequentialLayers == TRUE ) ReArrangeTemplateClasses( pCC ); iCount = pCC->GetClassCount(); delete pCC; CleanupParser(); return iCount > 0; }
GMLReader::~GMLReader() { ClearClasses(); CPLFree( m_pszFilename ); CleanupParser(); --m_nInstanceCount; #if HAVE_XERCES == 1 if( m_nInstanceCount == 0 && m_bXercesInitialized ) { XMLPlatformUtils::Terminate(); m_bXercesInitialized = FALSE; } #endif #ifdef HAVE_EXPAT if (fpGML) VSIFCloseL(fpGML); fpGML = NULL; #endif }
void GMLReader::ResetReading() { CleanupParser(); }
int GMLReader::PrescanForSchema( int bGetExtents ) { GMLFeature *poFeature; if( m_pszFilename == NULL ) return FALSE; SetClassListLocked( FALSE ); ClearClasses(); if( !SetupParser() ) return FALSE; while( (poFeature = NextFeature()) != NULL ) { GMLFeatureClass *poClass = poFeature->GetClass(); if( poClass->GetFeatureCount() == -1 ) poClass->SetFeatureCount( 1 ); else poClass->SetFeatureCount( poClass->GetFeatureCount() + 1 ); #ifdef SUPPORT_GEOMETRY if( bGetExtents ) { OGRGeometry *poGeometry = NULL; if( poFeature->GetGeometry() != NULL && strlen(poFeature->GetGeometry()) != 0 ) { poGeometry = OGRGeometryFactory::createFromGML( poFeature->GetGeometry() ); } if( poGeometry != NULL ) { double dfXMin, dfXMax, dfYMin, dfYMax; OGREnvelope sEnvelope; poGeometry->getEnvelope( &sEnvelope ); delete poGeometry; if( poClass->GetExtents(&dfXMin, &dfXMax, &dfYMin, &dfYMax) ) { dfXMin = MIN(dfXMin,sEnvelope.MinX); dfXMax = MAX(dfXMax,sEnvelope.MaxX); dfYMin = MIN(dfYMin,sEnvelope.MinY); dfYMax = MAX(dfYMax,sEnvelope.MaxY); } else { dfXMin = sEnvelope.MinX; dfXMax = sEnvelope.MaxX; dfYMin = sEnvelope.MinY; dfYMax = sEnvelope.MaxY; } poClass->SetExtents( dfXMin, dfXMax, dfYMin, dfYMax ); } #endif /* def SUPPORT_GEOMETRY */ } delete poFeature; } CleanupParser(); return GetClassCount() > 0; }
int GMLReader::SetupParser() { #if HAVE_XERCES == 1 if( !m_bXercesInitialized ) { try { XMLPlatformUtils::Initialize(); } catch (const XMLException& toCatch) { CPLError( CE_Warning, CPLE_AppDefined, "Exception initializing Xerces based GML reader.\n%s", tr_strdup(toCatch.getMessage()) ); return FALSE; } m_bXercesInitialized = TRUE; } // Cleanup any old parser. if( m_poSAXReader != NULL ) CleanupParser(); // Create and initialize parser. XMLCh* xmlUriValid = NULL; XMLCh* xmlUriNS = NULL; try{ m_poSAXReader = XMLReaderFactory::createXMLReader(); m_poGMLHandler = new GMLXercesHandler( this ); m_poSAXReader->setContentHandler( m_poGMLHandler ); m_poSAXReader->setErrorHandler( m_poGMLHandler ); m_poSAXReader->setLexicalHandler( m_poGMLHandler ); m_poSAXReader->setEntityResolver( m_poGMLHandler ); m_poSAXReader->setDTDHandler( m_poGMLHandler ); xmlUriValid = XMLString::transcode("http://xml.org/sax/features/validation"); xmlUriNS = XMLString::transcode("http://xml.org/sax/features/namespaces"); #if (OGR_GML_VALIDATION) m_poSAXReader->setFeature( xmlUriValid, true); m_poSAXReader->setFeature( xmlUriNS, true); m_poSAXReader->setFeature( XMLUni::fgSAX2CoreNameSpaces, true ); m_poSAXReader->setFeature( XMLUni::fgXercesSchema, true ); // m_poSAXReader->setDoSchema(true); // m_poSAXReader->setValidationSchemaFullChecking(true); #else m_poSAXReader->setFeature( XMLUni::fgSAX2CoreValidation, false); #if XERCES_VERSION_MAJOR >= 3 m_poSAXReader->setFeature( XMLUni::fgXercesSchema, false); #else m_poSAXReader->setFeature( XMLUni::fgSAX2CoreNameSpaces, false); #endif #endif XMLString::release( &xmlUriValid ); XMLString::release( &xmlUriNS ); } catch (...) { XMLString::release( &xmlUriValid ); XMLString::release( &xmlUriNS ); CPLError( CE_Warning, CPLE_AppDefined, "Exception initializing Xerces based GML reader.\n" ); return FALSE; } #else // Cleanup any old parser. if( oParser != NULL ) CleanupParser(); oParser = OGRCreateExpatXMLParser(); m_poGMLHandler = new GMLExpatHandler( this, oParser ); XML_SetElementHandler(oParser, ::startElementCbk, ::endElementCbk); XML_SetCharacterDataHandler(oParser, ::dataHandlerCbk); XML_SetUserData(oParser, m_poGMLHandler); if (fpGML != NULL) VSIFSeekL( fpGML, 0, SEEK_SET ); #endif m_bReadStarted = FALSE; // Push an empty state. PushState( new GMLReadState() ); return TRUE; }
void NASReader::ResetReading() { CleanupParser(); SetFilteredClassName(NULL); }
int NASReader::PrescanForSchema( int bGetExtents ) { GMLFeature *poFeature; if( m_pszFilename == NULL ) return FALSE; SetClassListLocked( FALSE ); ClearClasses(); if( !SetupParser() ) return FALSE; while( (poFeature = NextFeature()) != NULL ) { GMLFeatureClass *poClass = poFeature->GetClass(); if( poClass->GetFeatureCount() == -1 ) poClass->SetFeatureCount( 1 ); else poClass->SetFeatureCount( poClass->GetFeatureCount() + 1 ); #ifdef SUPPORT_GEOMETRY if( bGetExtents ) { OGRGeometry *poGeometry = NULL; if( poFeature->GetGeometry() != NULL && strlen(poFeature->GetGeometry()) != 0 ) { poGeometry = (OGRGeometry *) OGR_G_CreateFromGML( poFeature->GetGeometry() ); } if( poGeometry != NULL ) { double dfXMin, dfXMax, dfYMin, dfYMax; OGREnvelope sEnvelope; OGRwkbGeometryType eGType = (OGRwkbGeometryType) poClass->GetGeometryType(); // Merge geometry type into layer. if( poClass->GetFeatureCount() == 1 && eGType == wkbUnknown ) eGType = wkbNone; poClass->SetGeometryType( (int) OGRMergeGeometryTypes( eGType, poGeometry->getGeometryType() ) ); // merge extents. poGeometry->getEnvelope( &sEnvelope ); delete poGeometry; if( poClass->GetExtents(&dfXMin, &dfXMax, &dfYMin, &dfYMax) ) { dfXMin = MIN(dfXMin,sEnvelope.MinX); dfXMax = MAX(dfXMax,sEnvelope.MaxX); dfYMin = MIN(dfYMin,sEnvelope.MinY); dfYMax = MAX(dfYMax,sEnvelope.MaxY); } else { dfXMin = sEnvelope.MinX; dfXMax = sEnvelope.MaxX; dfYMin = sEnvelope.MinY; dfYMax = sEnvelope.MaxY; } poClass->SetExtents( dfXMin, dfXMax, dfYMin, dfYMax ); } else { if( poClass->GetGeometryType() == (int) wkbUnknown && poClass->GetFeatureCount() == 1 ) poClass->SetGeometryType( wkbNone ); } #endif /* def SUPPORT_GEOMETRY */ } delete poFeature; } CleanupParser(); return GetClassCount() > 0; }
int NASReader::PrescanForSchema( int bGetExtents ) { GMLFeature *poFeature; if( m_pszFilename == NULL ) return FALSE; SetClassListLocked( FALSE ); ClearClasses(); if( !SetupParser() ) return FALSE; std::string osWork; while( (poFeature = NextFeature()) != NULL ) { GMLFeatureClass *poClass = poFeature->GetClass(); if( poClass->GetFeatureCount() == -1 ) poClass->SetFeatureCount( 1 ); else poClass->SetFeatureCount( poClass->GetFeatureCount() + 1 ); #ifdef SUPPORT_GEOMETRY if( bGetExtents ) { OGRGeometry *poGeometry = NULL; const CPLXMLNode* const * papsGeometry = poFeature->GetGeometryList(); if( papsGeometry[0] != NULL ) { poGeometry = (OGRGeometry*) OGR_G_CreateFromGMLTree(papsGeometry[0]); } if( poGeometry != NULL ) { double dfXMin, dfXMax, dfYMin, dfYMax; OGREnvelope sEnvelope; OGRwkbGeometryType eGType = (OGRwkbGeometryType) poClass->GetGeometryType(); // Merge SRSName into layer. const char* pszSRSName = GML_ExtractSrsNameFromGeometry(papsGeometry, osWork, FALSE); // if (pszSRSName != NULL) // m_bCanUseGlobalSRSName = FALSE; poClass->MergeSRSName(pszSRSName); // Merge geometry type into layer. if( poClass->GetFeatureCount() == 1 && eGType == wkbUnknown ) eGType = wkbNone; poClass->SetGeometryType( (int) OGRMergeGeometryTypes( eGType, poGeometry->getGeometryType() ) ); // merge extents. poGeometry->getEnvelope( &sEnvelope ); delete poGeometry; if( poClass->GetExtents(&dfXMin, &dfXMax, &dfYMin, &dfYMax) ) { dfXMin = MIN(dfXMin,sEnvelope.MinX); dfXMax = MAX(dfXMax,sEnvelope.MaxX); dfYMin = MIN(dfYMin,sEnvelope.MinY); dfYMax = MAX(dfYMax,sEnvelope.MaxY); } else { dfXMin = sEnvelope.MinX; dfXMax = sEnvelope.MaxX; dfYMin = sEnvelope.MinY; dfYMax = sEnvelope.MaxY; } poClass->SetExtents( dfXMin, dfXMax, dfYMin, dfYMax ); } else { if( poClass->GetGeometryType() == (int) wkbUnknown && poClass->GetFeatureCount() == 1 ) poClass->SetGeometryType( wkbNone ); } #endif /* def SUPPORT_GEOMETRY */ } delete poFeature; } CleanupParser(); return GetClassCount() > 0; }
void CleanupCompiler() { CleanupParser(); CleanupDefines(); }
int NASReader::SetupParser() { { CPLMutexHolderD(&hMutex); static int bXercesInitialized = -1; if( bXercesInitialized < 0) { try { XMLPlatformUtils::Initialize(); } catch (const XMLException& toCatch) { CPLError( CE_Warning, CPLE_AppDefined, "Exception initializing Xerces based GML reader.\n%s", tr_strdup(toCatch.getMessage()) ); bXercesInitialized = FALSE; return FALSE; } bXercesInitialized = TRUE; } if( !bXercesInitialized ) return FALSE; } // Cleanup any old parser. if( m_poSAXReader != NULL ) CleanupParser(); // Create and initialize parser. XMLCh* xmlUriValid = NULL; XMLCh* xmlUriNS = NULL; try{ m_poSAXReader = XMLReaderFactory::createXMLReader(); m_poNASHandler = new NASHandler( this ); m_poSAXReader->setContentHandler( m_poNASHandler ); m_poSAXReader->setErrorHandler( m_poNASHandler ); m_poSAXReader->setLexicalHandler( m_poNASHandler ); m_poSAXReader->setEntityResolver( m_poNASHandler ); m_poSAXReader->setDTDHandler( m_poNASHandler ); xmlUriValid = XMLString::transcode("http://xml.org/sax/features/validation"); xmlUriNS = XMLString::transcode("http://xml.org/sax/features/namespaces"); #if (OGR_GML_VALIDATION) m_poSAXReader->setFeature( xmlUriValid, true); m_poSAXReader->setFeature( xmlUriNS, true); m_poSAXReader->setFeature( XMLUni::fgSAX2CoreNameSpaces, true ); m_poSAXReader->setFeature( XMLUni::fgXercesSchema, true ); // m_poSAXReader->setDoSchema(true); // m_poSAXReader->setValidationSchemaFullChecking(true); #else m_poSAXReader->setFeature( XMLUni::fgSAX2CoreValidation, false); #if XERCES_VERSION_MAJOR >= 3 m_poSAXReader->setFeature( XMLUni::fgXercesSchema, false); #else m_poSAXReader->setFeature( XMLUni::fgSAX2CoreNameSpaces, false); #endif #endif XMLString::release( &xmlUriValid ); XMLString::release( &xmlUriNS ); } catch (...) { XMLString::release( &xmlUriValid ); XMLString::release( &xmlUriNS ); CPLError( CE_Warning, CPLE_AppDefined, "Exception initializing Xerces based GML reader.\n" ); return FALSE; } m_bReadStarted = FALSE; // Push an empty state. PushState( new GMLReadState() ); return TRUE; }