Changeset 13572

Show
Ignore:
Timestamp:
01/22/08 15:25:20 (6 months ago)
Author:
warmerdam
Message:

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

Files:

Legend:

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

    r12389 r13572  
    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 ) ) 
     
    675687                 pszProjection ); 
    676688 
     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    } 
     719 
    677720    return pszProjection != NULL && bSuccess; 
    678721} 
     
    764807    int nEPSGCode = 0; 
    765808    char szSRSName[100]; 
     809    int  bNeedAxisFlip = FALSE; 
    766810 
    767811    if( oSRS.importFromWkt( &pszWKTCopy ) != OGRERR_NONE ) 
     
    784828        { 
    785829            nEPSGCode = atoi(oSRS.GetAuthorityCode( "GEOGCS" )); 
     830            bNeedAxisFlip = TRUE; 
    786831        } 
    787832    } 
     
    792837        strcpy( szSRSName,  
    793838                "gmljp2://xml/CRSDictionary.gml#ogrcrs1" ); 
     839 
     840/* -------------------------------------------------------------------- */ 
     841/*      Prepare coverage origin and offset vectors.  Take axis          */ 
     842/*      order into account if needed.                                   */ 
     843/* -------------------------------------------------------------------- */ 
     844    double adfOrigin[2]; 
     845    double adfXVector[2]; 
     846    double adfYVector[2]; 
     847     
     848    adfOrigin[0] = adfGeoTransform[0] + adfGeoTransform[1] * 0.5 
     849        + adfGeoTransform[4] * 0.5; 
     850    adfOrigin[1] = adfGeoTransform[3] + adfGeoTransform[2] * 0.5 
     851        + adfGeoTransform[5] * 0.5; 
     852    adfXVector[0] = adfGeoTransform[1]; 
     853    adfXVector[1] = adfGeoTransform[2]; 
     854         
     855    adfYVector[0] = adfGeoTransform[4]; 
     856    adfYVector[1] = adfGeoTransform[5]; 
     857     
     858    if( bNeedAxisFlip 
     859        && CSLTestBoolean( CPLGetConfigOption( "GDAL_IGNORE_AXIS_ORIENTATION", 
     860                                               "FALSE" ) ) ) 
     861    { 
     862        bNeedAxisFlip = FALSE; 
     863        CPLDebug( "GMLJP2", "Supressed axis flipping on write based on GDAL_IGNORE_AXIS_ORIENTATION." ); 
     864    } 
     865 
     866    if( bNeedAxisFlip ) 
     867    { 
     868        double dfTemp; 
     869         
     870        CPLDebug( "GMLJP2", "Flipping GML coverage axis order." ); 
     871         
     872        dfTemp = adfOrigin[0]; 
     873        adfOrigin[0] = adfOrigin[1]; 
     874        adfOrigin[1] = dfTemp; 
     875 
     876        dfTemp = adfXVector[0]; 
     877        adfXVector[0] = adfXVector[1]; 
     878        adfXVector[1] = dfTemp; 
     879 
     880        dfTemp = adfYVector[0]; 
     881        adfYVector[0] = adfYVector[1]; 
     882        adfYVector[1] = dfTemp; 
     883    } 
    794884 
    795885/* -------------------------------------------------------------------- */ 
     
    840930"  </gml:featureMember>\n" 
    841931"</gml:FeatureCollection>\n", 
    842              nXSize-1, nYSize-1, szSRSName, 
    843              adfGeoTransform[0] + adfGeoTransform[1] * 0.5 
    844                                 + adfGeoTransform[4] * 0.5,  
    845              adfGeoTransform[3] + adfGeoTransform[2] * 0.5 
    846                                 + adfGeoTransform[5] * 0.5, 
    847              szSRSName,  
    848              adfGeoTransform[1], adfGeoTransform[2], 
    849              szSRSName, 
    850              adfGeoTransform[4], adfGeoTransform[5] ); 
     932             nXSize-1, nYSize-1, szSRSName, adfOrigin[0], adfOrigin[1], 
     933             szSRSName, adfXVector[0], adfXVector[1],  
     934             szSRSName, adfYVector[0], adfYVector[1] ); 
    851935 
    852936/* -------------------------------------------------------------------- */