OGRErr OGRGeometryCollection::transform( OGRCoordinateTransformation *poCT ) { #ifdef DISABLE_OGRGEOM_TRANSFORM return OGRERR_FAILURE; #else for( int iGeom = 0; iGeom < nGeomCount; iGeom++ ) { OGRErr eErr; eErr = papoGeoms[iGeom]->transform( poCT ); if( eErr != OGRERR_NONE ) { if( iGeom != 0 ) { CPLDebug("OGR", "OGRGeometryCollection::transform() failed for a geometry other\n" "than the first, meaning some geometries are transformed\n" "and some are not!\n" ); return OGRERR_FAILURE; } return eErr; } } assignSpatialReference( poCT->GetTargetCS() ); return OGRERR_NONE; #endif }
OGRErr OGRPolygon::transform( OGRCoordinateTransformation *poCT ) { #ifdef DISABLE_OGRGEOM_TRANSFORM return OGRERR_FAILURE; #else for( int iRing = 0; iRing < nRingCount; iRing++ ) { OGRErr eErr; eErr = papoRings[iRing]->transform( poCT ); if( eErr != OGRERR_NONE ) { if( iRing != 0 ) { CPLDebug("OGR", "OGRPolygon::transform() failed for a ring other\n" "than the first, meaning some rings are transformed\n" "and some are not!\n" ); return OGRERR_FAILURE; } return eErr; } } assignSpatialReference( poCT->GetTargetCS() ); return OGRERR_NONE; #endif }
OGRErr OGRGeometryCollection::transform( OGRCoordinateTransformation *poCT ) { int iGeom = 0; for( auto&& poSubGeom: *this ) { const OGRErr eErr = poSubGeom->transform( poCT ); if( eErr != OGRERR_NONE ) { if( iGeom != 0 ) { CPLDebug("OGR", "OGRGeometryCollection::transform() failed for a " "geometry other than the first, meaning some " "geometries are transformed and some are not." ); return OGRERR_FAILURE; } return eErr; } iGeom ++; } assignSpatialReference( poCT->GetTargetCS() ); return OGRERR_NONE; }
OGRErr OGRPoint::transform( OGRCoordinateTransformation *poCT ) { if( poCT->Transform( 1, &x, &y, &z ) ) { assignSpatialReference( poCT->GetTargetCS() ); return OGRERR_NONE; } return OGRERR_FAILURE; }
OGRErr OGRPoint::transform( OGRCoordinateTransformation *poCT ) { #ifdef DISABLE_OGRGEOM_TRANSFORM return OGRERR_FAILURE; #else if( poCT->Transform( 1, &x, &y, &z ) ) { assignSpatialReference( poCT->GetTargetCS() ); return OGRERR_NONE; } else return OGRERR_FAILURE; #endif }
OGRErr OGRLineString::transform( OGRCoordinateTransformation *poCT ) { #ifdef DISABLE_OGRGEOM_TRANSFORM return OGRERR_FAILURE; #else double *xyz; int i; /* -------------------------------------------------------------------- */ /* Because we don't want to partially transform this geometry */ /* (if some points fail after some have succeeded) we will */ /* instead make a copy of the points to operate on. */ /* -------------------------------------------------------------------- */ xyz = (double *) CPLMalloc(sizeof(double) * nPointCount * 3); if( xyz == NULL ) return OGRERR_NOT_ENOUGH_MEMORY; for( i = 0; i < nPointCount; i++ ) { xyz[i ] = paoPoints[i].x; xyz[i+nPointCount] = paoPoints[i].y; if( padfZ ) xyz[i+nPointCount*2] = padfZ[i]; else xyz[i+nPointCount*2] = 0.0; } /* -------------------------------------------------------------------- */ /* Transform and reapply. */ /* -------------------------------------------------------------------- */ if( !poCT->Transform( nPointCount, xyz, xyz + nPointCount, xyz+nPointCount*2 ) ) { CPLFree( xyz ); return OGRERR_FAILURE; } else { setPoints( nPointCount, xyz, xyz+nPointCount, xyz+nPointCount*2 ); CPLFree( xyz ); assignSpatialReference( poCT->GetTargetCS() ); return OGRERR_NONE; } #endif }