@@ -193,10 +193,16 @@ void QgsCoordinateTransform::initialise()
193
193
{
194
194
destProjString += ( " " + datumTransformString ( mDestinationDatumTransform ) );
195
195
}
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
197
197
{
198
198
destProjString += " +nadgrids=@null" ;
199
199
}
200
+
201
+ if ( mSourceDatumTransform == -1 && !useDefaultDatumTransform && destProjString.contains ( " +nadgrids" ) )
202
+ {
203
+ sourceProjString += " +nadgrids=@null" ;
204
+ }
205
+
200
206
mDestinationProjection = pj_init_plus ( destProjString.toUtf8 () );
201
207
202
208
#ifdef COORDINATE_TRANSFORM_VERBOSE
@@ -792,8 +798,9 @@ QList< QList< int > > QgsCoordinateTransform::datumTransformations( const QgsCoo
792
798
QList<int > directTransforms;
793
799
searchDatumTransform ( QString ( " SELECT coord_op_code FROM tbl_datum_transform WHERE source_crs_code = %1 AND target_crs_code = %2" ).arg ( srcAuthCode ).arg ( destAuthCode ),
794
800
directTransforms );
801
+ QList<int > reverseDirectTransforms;
795
802
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 );
797
804
QList<int > srcToWgs84;
798
805
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 ),
799
806
srcToWgs84 );
@@ -808,6 +815,12 @@ QList< QList< int > > QgsCoordinateTransform::datumTransformations( const QgsCoo
808
815
transformations.push_back ( QList<int >() << *directIt << -1 );
809
816
}
810
817
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
+ }
811
824
812
825
QList<int >::const_iterator srcWgsIt = srcToWgs84.constBegin ();
813
826
for ( ; srcWgsIt != srcToWgs84.constEnd (); ++srcWgsIt )
0 commit comments