@@ -193,10 +193,16 @@ void QgsCoordinateTransform::initialise()
193193 {
194194 destProjString += ( " " + datumTransformString ( mDestinationDatumTransform ) );
195195 }
196- else if ( sourceProjString.contains ( " +nadgrids" ) ) // add null grid if source transformation is ntv2
196+ else if ( !useDefaultDatumTransform && sourceProjString.contains ( " +nadgrids" ) ) // add null grid if source transformation is ntv2
197197 {
198198 destProjString += " +nadgrids=@null" ;
199199 }
200+
201+ if ( mSourceDatumTransform == -1 && !useDefaultDatumTransform && destProjString.contains ( " +nadgrids" ) )
202+ {
203+ sourceProjString += " +nadgrids=@null" ;
204+ }
205+
200206 mDestinationProjection = pj_init_plus ( destProjString.toUtf8 () );
201207
202208#ifdef COORDINATE_TRANSFORM_VERBOSE
@@ -792,8 +798,9 @@ QList< QList< int > > QgsCoordinateTransform::datumTransformations( const QgsCoo
792798 QList<int > directTransforms;
793799 searchDatumTransform ( QString ( " SELECT coord_op_code FROM tbl_datum_transform WHERE source_crs_code = %1 AND target_crs_code = %2" ).arg ( srcAuthCode ).arg ( destAuthCode ),
794800 directTransforms );
801+ QList<int > reverseDirectTransforms;
795802 searchDatumTransform ( QString ( " SELECT coord_op_code FROM tbl_datum_transform WHERE source_crs_code = %1 AND target_crs_code = %2" ).arg ( destAuthCode ).arg ( srcAuthCode ),
796- directTransforms );
803+ reverseDirectTransforms );
797804 QList<int > srcToWgs84;
798805 searchDatumTransform ( QString ( " SELECT coord_op_code FROM tbl_datum_transform WHERE ( source_crs_code = %1 AND target_crs_code = %2 ) OR ( source_crs_code = %2 AND target_crs_code = %1 )" ).arg ( srcAuthCode ).arg ( 4326 ),
799806 srcToWgs84 );
@@ -808,6 +815,12 @@ QList< QList< int > > QgsCoordinateTransform::datumTransformations( const QgsCoo
808815 transformations.push_back ( QList<int >() << *directIt << -1 );
809816 }
810817
818+ // add direct datum transformations
819+ directIt = reverseDirectTransforms.constBegin ();
820+ for ( ; directIt != reverseDirectTransforms.constEnd (); ++directIt )
821+ {
822+ transformations.push_back ( QList<int >() << -1 << *directIt );
823+ }
811824
812825 QList<int >::const_iterator srcWgsIt = srcToWgs84.constBegin ();
813826 for ( ; srcWgsIt != srcToWgs84.constEnd (); ++srcWgsIt )
0 commit comments