Changeset 13571

Show
Ignore:
Timestamp:
01/22/08 15:23:56 (5 months ago)
Author:
warmerdam
Message:

preliminary gmljp2 specific changes to address axis orientation (#2131)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/1.5/gdal/gcore/gdaljp2metadata.cpp

    r12388 r13571  
    607607        adfGeoTransform[0] = poOriginGeometry->getX(); 
    608608        adfGeoTransform[1] = atof(papszOffset1Tokens[0]); 
    609         adfGeoTransform[2] = atof(papszOffset1Tokens[1]); 
     609        adfGeoTransform[2] = atof(papszOffset2Tokens[0]); 
    610610        adfGeoTransform[3] = poOriginGeometry->getY(); 
    611         adfGeoTransform[4] = atof(papszOffset2Tokens[0]); 
     611        adfGeoTransform[4] = atof(papszOffset1Tokens[1]); 
    612612        adfGeoTransform[5] = atof(papszOffset2Tokens[1]); 
    613613 
     
    646646/*      srsName.                                                        */ 
    647647/* -------------------------------------------------------------------- */ 
     648    int bNeedAxisFlip = FALSE; 
     649 
    648650    if( bSuccess && pszSRSName != NULL  
    649651        && (pszProjection == NULL || strlen(pszProjection) == 0) ) 
     
    660662                 && oSRS.importFromURN(pszSRSName) == OGRERR_NONE ) 
    661663        { 
     664            const char *pszCode = strrchr(pszSRSName,':') + 1; 
     665 
    662666            oSRS.exportToWkt( &pszProjection ); 
     667 
     668            // Per #2131 
     669            if( atoi(pszCode) >= 4000 && atoi(pszCode) <= 4999 ) 
     670            { 
     671                CPLDebug( "GMLJP2", "Request axis flip for SRS=%s", 
     672                          pszSRSName ); 
     673                bNeedAxisFlip = TRUE; 
     674            } 
    663675        } 
    664676        else if( !GMLSRSLookup( pszSRSName ) ) 
     
    674686                  "Got projection from GML box: %s",  
    675687                 pszProjection ); 
     688 
     689/* -------------------------------------------------------------------- */ 
     690/*      Do we need to flip the axes?                                    */ 
     691/* -------------------------------------------------------------------- */ 
     692    if( bNeedAxisFlip 
     693        && CSLTestBoolean( CPLGetConfigOption( "GDAL_IGNORE_AXIS_ORIENTATION", 
     694                                               "FALSE" ) ) ) 
     695    { 
     696        bNeedAxisFlip = FALSE; 
     697        CPLDebug( "GMLJP2", "Supressed axis flipping based on GDAL_IGNORE_AXIS_ORIENTATION." ); 
     698    } 
     699 
     700    if( bNeedAxisFlip ) 
     701    { 
     702        double dfTemp; 
     703 
     704        CPLDebug( "GMLJP2",  
     705                  "Flipping axis orientation in GMLJP2 coverage description." ); 
     706 
     707        dfTemp = adfGeoTransform[0]; 
     708        adfGeoTransform[0] = adfGeoTransform[3]; 
     709        adfGeoTransform[3] = dfTemp; 
     710 
     711        dfTemp = adfGeoTransform[1]; 
     712        adfGeoTransform[1] = adfGeoTransform[4]; 
     713        adfGeoTransform[4] = dfTemp; 
     714 
     715        dfTemp = adfGeoTransform[2]; 
     716        adfGeoTransform[2] = adfGeoTransform[5]; 
     717        adfGeoTransform[5] = dfTemp; 
     718    } 
    676719 
    677720    return pszProjection != NULL && bSuccess; 
     
    805848    int nEPSGCode = 0; 
    806849    char szSRSName[100]; 
     850    int  bNeedAxisFlip = FALSE; 
    807851 
    808852    if( oSRS.importFromWkt( &pszWKTCopy ) != OGRERR_NONE ) 
     
    825869        { 
    826870            nEPSGCode = atoi(oSRS.GetAuthorityCode( "GEOGCS" )); 
     871            bNeedAxisFlip = TRUE; 
    827872        } 
    828873    } 
     
    833878        strcpy( szSRSName,  
    834879                "gmljp2://xml/CRSDictionary.gml#ogrcrs1" ); 
     880 
     881/* -------------------------------------------------------------------- */ 
     882/*      Prepare coverage origin and offset vectors.  Take axis          */ 
     883/*      order into account if needed.                                   */ 
     884/* -------------------------------------------------------------------- */ 
     885    double adfOrigin[2]; 
     886    double adfXVector[2]; 
     887    double adfYVector[2]; 
     888     
     889    adfOrigin[0] = adfGeoTransform[0] + adfGeoTransform[1] * 0.5 
     890        + adfGeoTransform[4] * 0.5; 
     891    adfOrigin[1] = adfGeoTransform[3] + adfGeoTransform[2] * 0.5 
     892        + adfGeoTransform[5] * 0.5; 
     893    adfXVector[0] = adfGeoTransform[1]; 
     894    adfXVector[1] = adfGeoTransform[2]; 
     895         
     896    adfYVector[0] = adfGeoTransform[4]; 
     897    adfYVector[1] = adfGeoTransform[5]; 
     898     
     899    if( bNeedAxisFlip 
     900        && CSLTestBoolean( CPLGetConfigOption( "GDAL_IGNORE_AXIS_ORIENTATION", 
     901                                               "FALSE" ) ) ) 
     902    { 
     903        bNeedAxisFlip = FALSE; 
     904        CPLDebug( "GMLJP2", "Supressed axis flipping on write based on GDAL_IGNORE_AXIS_ORIENTATION." ); 
     905    } 
     906 
     907    if( bNeedAxisFlip ) 
     908    { 
     909        double dfTemp; 
     910         
     911        CPLDebug( "GMLJP2", "Flipping GML coverage axis order." ); 
     912         
     913        dfTemp = adfOrigin[0]; 
     914        adfOrigin[0] = adfOrigin[1]; 
     915        adfOrigin[1] = dfTemp; 
     916 
     917        dfTemp = adfXVector[0]; 
     918        adfXVector[0] = adfXVector[1]; 
     919        adfXVector[1] = dfTemp; 
     920 
     921        dfTemp = adfYVector[0]; 
     922        adfYVector[0] = adfYVector[1]; 
     923        adfYVector[1] = dfTemp; 
     924    } 
    835925 
    836926/* -------------------------------------------------------------------- */ 
     
    881971"  </gml:featureMember>\n" 
    882972"</gml:FeatureCollection>\n", 
    883              nXSize-1, nYSize-1, szSRSName, 
    884              adfGeoTransform[0] + adfGeoTransform[1] * 0.5 
    885                                 + adfGeoTransform[4] * 0.5,  
    886              adfGeoTransform[3] + adfGeoTransform[2] * 0.5 
    887                                 + adfGeoTransform[5] * 0.5, 
    888              szSRSName,  
    889              adfGeoTransform[1], adfGeoTransform[2], 
    890              szSRSName, 
    891              adfGeoTransform[4], adfGeoTransform[5] ); 
     973             nXSize-1, nYSize-1, szSRSName, adfOrigin[0], adfOrigin[1], 
     974             szSRSName, adfXVector[0], adfXVector[1],  
     975             szSRSName, adfYVector[0], adfYVector[1] ); 
    892976 
    893977/* -------------------------------------------------------------------- */