bool QgsCoordinateTransformPrivate::initialize() { invalidate(); if ( !mSourceCRS.isValid() ) { // Pass through with no projection since we have no idea what the layer // coordinates are and projecting them may not be appropriate QgsDebugMsgLevel( QStringLiteral( "Source CRS is invalid!" ), 4 ); return false; } if ( !mDestCRS.isValid() ) { //No destination projection is set so we set the default output projection to //be the same as input proj. mDestCRS = mSourceCRS; QgsDebugMsgLevel( QStringLiteral( "Destination CRS is invalid!" ), 4 ); return false; } mIsValid = true; int sourceDatumTransform = mSourceDatumTransform; int destDatumTransform = mDestinationDatumTransform; bool useDefaultDatumTransform = ( sourceDatumTransform == - 1 && destDatumTransform == -1 ); // init the projections (destination and source) freeProj(); mSourceProjString = mSourceCRS.toProj4(); if ( !useDefaultDatumTransform ) { mSourceProjString = stripDatumTransform( mSourceProjString ); } if ( sourceDatumTransform != -1 ) { mSourceProjString += ( ' ' + QgsDatumTransform::datumTransformToProj( sourceDatumTransform ) ); } mDestProjString = mDestCRS.toProj4(); if ( !useDefaultDatumTransform ) { mDestProjString = stripDatumTransform( mDestProjString ); } if ( destDatumTransform != -1 ) { mDestProjString += ( ' ' + QgsDatumTransform::datumTransformToProj( destDatumTransform ) ); } if ( !useDefaultDatumTransform ) { addNullGridShifts( mSourceProjString, mDestProjString, sourceDatumTransform, destDatumTransform ); } // create proj projections for current thread QPair<projPJ, projPJ> res = threadLocalProjData(); #ifdef COORDINATE_TRANSFORM_VERBOSE QgsDebugMsg( "From proj : " + mSourceCRS.toProj4() ); QgsDebugMsg( "To proj : " + mDestCRS.toProj4() ); #endif if ( !res.first || !res.second ) { mIsValid = false; } #ifdef COORDINATE_TRANSFORM_VERBOSE if ( mIsValid ) { QgsDebugMsg( QStringLiteral( "------------------------------------------------------------" ) ); QgsDebugMsg( QStringLiteral( "The OGR Coordinate transformation for this layer was set to" ) ); QgsLogger::debug<QgsCoordinateReferenceSystem>( "Input", mSourceCRS, __FILE__, __FUNCTION__, __LINE__ ); QgsLogger::debug<QgsCoordinateReferenceSystem>( "Output", mDestCRS, __FILE__, __FUNCTION__, __LINE__ ); QgsDebugMsg( QStringLiteral( "------------------------------------------------------------" ) ); } else { QgsDebugMsg( QStringLiteral( "------------------------------------------------------------" ) ); QgsDebugMsg( QStringLiteral( "The OGR Coordinate transformation FAILED TO INITIALIZE!" ) ); QgsDebugMsg( QStringLiteral( "------------------------------------------------------------" ) ); } #else if ( !mIsValid ) { QgsDebugMsg( QStringLiteral( "Coordinate transformation failed to initialize!" ) ); } #endif //XXX todo overload == operator for QgsCoordinateReferenceSystem //at the moment srs.parameters contains the whole proj def...soon it won't... //if (mSourceCRS->toProj4() == mDestCRS->toProj4()) if ( mSourceCRS == mDestCRS ) { // If the source and destination projection are the same, set the short // circuit flag (no transform takes place) mShortCircuit = true; QgsDebugMsgLevel( QStringLiteral( "Source/Dest CRS equal, shortcircuit is set." ), 3 ); } else { // Transform must take place mShortCircuit = false; QgsDebugMsgLevel( QStringLiteral( "Source/Dest CRS not equal, shortcircuit is not set." ), 3 ); } return mIsValid; }
// XXX This whole function is full of multiple return statements!!! // And probably shouldn't be a void void QgsCoordinateTransform::initialise() { // XXX Warning - multiple return paths in this block!! if ( !mSourceCRS.isValid() ) { //mSourceCRS = defaultWkt; // Pass through with no projection since we have no idea what the layer // coordinates are and projecting them may not be appropriate mShortCircuit = true; QgsDebugMsg( "SourceCRS seemed invalid!" ); return; } if ( !mDestCRS.isValid() ) { //No destination projection is set so we set the default output projection to //be the same as input proj. mDestCRS = QgsCRSCache::instance()->crsByAuthId( mSourceCRS.authid() ); } bool useDefaultDatumTransform = ( mSourceDatumTransform == - 1 && mDestinationDatumTransform == -1 ); // init the projections (destination and source) pj_free( mSourceProjection ); QString sourceProjString = mSourceCRS.toProj4(); if ( !useDefaultDatumTransform ) { sourceProjString = stripDatumTransform( sourceProjString ); } if ( mSourceDatumTransform != -1 ) { sourceProjString += ( " " + datumTransformString( mSourceDatumTransform ) ); } pj_free( mDestinationProjection ); QString destProjString = mDestCRS.toProj4(); if ( !useDefaultDatumTransform ) { destProjString = stripDatumTransform( destProjString ); } if ( mDestinationDatumTransform != -1 ) { destProjString += ( " " + datumTransformString( mDestinationDatumTransform ) ); } if ( !useDefaultDatumTransform ) { addNullGridShifts( sourceProjString, destProjString ); } mSourceProjection = pj_init_plus( sourceProjString.toUtf8() ); mDestinationProjection = pj_init_plus( destProjString.toUtf8() ); #ifdef COORDINATE_TRANSFORM_VERBOSE QgsDebugMsg( "From proj : " + mSourceCRS.toProj4() ); QgsDebugMsg( "To proj : " + mDestCRS.toProj4() ); #endif mInitialisedFlag = true; if ( !mDestinationProjection ) { mInitialisedFlag = false; } if ( !mSourceProjection ) { mInitialisedFlag = false; } #ifdef COORDINATE_TRANSFORM_VERBOSE if ( mInitialisedFlag ) { QgsDebugMsg( "------------------------------------------------------------" ); QgsDebugMsg( "The OGR Coordinate transformation for this layer was set to" ); QgsLogger::debug<QgsCoordinateReferenceSystem>( "Input", mSourceCRS, __FILE__, __FUNCTION__, __LINE__ ); QgsLogger::debug<QgsCoordinateReferenceSystem>( "Output", mDestCRS, __FILE__, __FUNCTION__, __LINE__ ); QgsDebugMsg( "------------------------------------------------------------" ); } else { QgsDebugMsg( "------------------------------------------------------------" ); QgsDebugMsg( "The OGR Coordinate transformation FAILED TO INITIALISE!" ); QgsDebugMsg( "------------------------------------------------------------" ); } #else if ( !mInitialisedFlag ) { QgsDebugMsg( "Coordinate transformation failed to initialize!" ); } #endif //XXX todo overload == operator for QgsCoordinateReferenceSystem //at the moment srs.parameters contains the whole proj def...soon it wont... //if (mSourceCRS->toProj4() == mDestCRS->toProj4()) if ( mSourceCRS == mDestCRS ) { // If the source and destination projection are the same, set the short // circuit flag (no transform takes place) mShortCircuit = true; QgsDebugMsgLevel( "Source/Dest CRS equal, shortcircuit is set.", 3 ); } else { // Transform must take place mShortCircuit = false; QgsDebugMsgLevel( "Source/Dest CRS UNequal, shortcircuit is NOt set.", 3 ); } }