void GIFAbstractDataset::DetectGeoreferencing( GDALOpenInfo * poOpenInfo ) { char* pszWldFilename = nullptr; bGeoTransformValid = GDALReadWorldFile2( poOpenInfo->pszFilename, nullptr, adfGeoTransform, poOpenInfo->GetSiblingFiles(), &pszWldFilename ); if ( !bGeoTransformValid ) { bGeoTransformValid = GDALReadWorldFile2( poOpenInfo->pszFilename, ".wld", adfGeoTransform, poOpenInfo->GetSiblingFiles(), &pszWldFilename ); } if (pszWldFilename) { osWldFilename = pszWldFilename; CPLFree(pszWldFilename); } }
void GDALJP2AbstractDataset::LoadJP2Metadata(GDALOpenInfo* poOpenInfo, const char* pszOverideFilenameIn) { const char* pszOverideFilename = pszOverideFilenameIn; if( pszOverideFilename == NULL ) pszOverideFilename = poOpenInfo->pszFilename; /* -------------------------------------------------------------------- */ /* Check for georeferencing information. */ /* -------------------------------------------------------------------- */ GDALJP2Metadata oJP2Geo; if( (poOpenInfo->fpL != NULL && pszOverideFilenameIn == NULL && oJP2Geo.ReadAndParse(poOpenInfo->fpL) ) || (!(poOpenInfo->fpL != NULL && pszOverideFilenameIn == NULL) && oJP2Geo.ReadAndParse( pszOverideFilename )) ) { CPLFree(pszProjection); pszProjection = CPLStrdup(oJP2Geo.pszProjection); bGeoTransformValid = oJP2Geo.bHaveGeoTransform; memcpy( adfGeoTransform, oJP2Geo.adfGeoTransform, sizeof(double) * 6 ); nGCPCount = oJP2Geo.nGCPCount; pasGCPList = GDALDuplicateGCPs( oJP2Geo.nGCPCount, oJP2Geo.pasGCPList ); if( oJP2Geo.bPixelIsPoint ) GDALDataset::SetMetadataItem(GDALMD_AREA_OR_POINT, GDALMD_AOP_POINT); if( oJP2Geo.papszRPCMD ) GDALDataset::SetMetadata( oJP2Geo.papszRPCMD, "RPC" ); } /* -------------------------------------------------------------------- */ /* Report XML UUID box in a dedicated metadata domain */ /* -------------------------------------------------------------------- */ if (oJP2Geo.pszXMPMetadata) { char *apszMDList[2]; apszMDList[0] = (char *) oJP2Geo.pszXMPMetadata; apszMDList[1] = NULL; GDALDataset::SetMetadata(apszMDList, "xml:XMP"); } /* -------------------------------------------------------------------- */ /* Do we have any XML boxes we would like to treat as special */ /* domain metadata? (Note: the GDAL multidomain metadata XML box */ /* has been excluded and is dealt a few lines below. */ /* -------------------------------------------------------------------- */ int iBox; for( iBox = 0; oJP2Geo.papszGMLMetadata && oJP2Geo.papszGMLMetadata[iBox] != NULL; iBox++ ) { char *pszName = NULL; const char *pszXML = CPLParseNameValue( oJP2Geo.papszGMLMetadata[iBox], &pszName ); CPLString osDomain; char *apszMDList[2]; osDomain.Printf( "xml:%s", pszName ); apszMDList[0] = (char *) pszXML; apszMDList[1] = NULL; GDALDataset::SetMetadata( apszMDList, osDomain ); CPLFree( pszName ); } /* -------------------------------------------------------------------- */ /* Do we have GDAL metadata? */ /* -------------------------------------------------------------------- */ if( oJP2Geo.pszGDALMultiDomainMetadata != NULL ) { CPLXMLNode* psXMLNode = CPLParseXMLString(oJP2Geo.pszGDALMultiDomainMetadata); if( psXMLNode ) { GDALMultiDomainMetadata oLocalMDMD; oLocalMDMD.XMLInit(psXMLNode, FALSE); char** papszDomainList = oLocalMDMD.GetDomainList(); char** papszIter = papszDomainList; GDALDataset::SetMetadata(oLocalMDMD.GetMetadata()); while( papszIter && *papszIter ) { if( !EQUAL(*papszIter, "") && !EQUAL(*papszIter, "IMAGE_STRUCTURE") ) { if( GDALDataset::GetMetadata(*papszIter) != NULL ) { CPLDebug("GDALJP2", "GDAL metadata overrides metadata in %s domain over metadata read from other boxes", *papszIter); } GDALDataset::SetMetadata(oLocalMDMD.GetMetadata(*papszIter), *papszIter); } papszIter ++; } CPLDestroyXMLNode(psXMLNode); } else CPLErrorReset(); } /* -------------------------------------------------------------------- */ /* Do we have other misc metadata (from resd box for now) ? */ /* -------------------------------------------------------------------- */ if( oJP2Geo.papszMetadata != NULL ) { char **papszMD = CSLDuplicate(GDALDataset::GetMetadata()); papszMD = CSLMerge( papszMD, oJP2Geo.papszMetadata ); GDALDataset::SetMetadata( papszMD ); CSLDestroy( papszMD ); } /* -------------------------------------------------------------------- */ /* Do we have XML IPR ? */ /* -------------------------------------------------------------------- */ if( oJP2Geo.pszXMLIPR != NULL ) { char* apszMD[2] = { NULL, NULL }; apszMD[0] = oJP2Geo.pszXMLIPR; GDALDataset::SetMetadata( apszMD, "xml:IPR" ); } /* -------------------------------------------------------------------- */ /* Check for world file. */ /* -------------------------------------------------------------------- */ if( !bGeoTransformValid ) { bGeoTransformValid |= GDALReadWorldFile2( pszOverideFilename, NULL, adfGeoTransform, poOpenInfo->GetSiblingFiles(), &pszWldFilename ) || GDALReadWorldFile2( pszOverideFilename, ".wld", adfGeoTransform, poOpenInfo->GetSiblingFiles(), &pszWldFilename ); } GDALMDReaderManager mdreadermanager; GDALMDReaderBase* mdreader = mdreadermanager.GetReader(poOpenInfo->pszFilename, poOpenInfo->GetSiblingFiles(), MDR_ANY); if(NULL != mdreader) { mdreader->FillMetadata(&(oMDMD)); papszMetadataFiles = mdreader->GetMetadataFiles(); } }