Skip to content

Commit 70863ec

Browse files
committed
[FEATURE]: set default datumstransformation for server with environment variable
1 parent 601e430 commit 70863ec

File tree

4 files changed

+66
-0
lines changed

4 files changed

+66
-0
lines changed

src/core/qgsmaprenderer.cpp

+27
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ QgsMapRenderer::QgsMapRenderer()
6161
mFullExtent.setMinimal();
6262

6363
mLabelingEngine = nullptr;
64+
readDefaultDatumTransformations();
6465
}
6566

6667
QgsMapRenderer::~QgsMapRenderer()
@@ -1110,6 +1111,12 @@ const QgsCoordinateTransform *QgsMapRenderer::transformation( const QgsMapLayer
11101111
}
11111112
else
11121113
{
1114+
//is there a defined datum transformation?
1115+
QHash< QPair< QString, QString >, QPair< int, int > >::const_iterator it = mDefaultDatumTransformations.find( qMakePair( layer->crs().authid(), mDestCRS->authid() ) );
1116+
if ( it != mDefaultDatumTransformations.constEnd() )
1117+
{
1118+
return QgsCoordinateTransformCache::instance()->transform( it.key().first, it.key().second, it.value().first, it.value().second );
1119+
}
11131120
emit datumTransformInfoRequested( layer, layer->crs().authid(), mDestCRS->authid() );
11141121
}
11151122

@@ -1275,4 +1282,24 @@ void QgsMapRenderer::clearLayerCoordinateTransforms()
12751282
mLayerCoordinateTransformInfo.clear();
12761283
}
12771284

1285+
void QgsMapRenderer::readDefaultDatumTransformations()
1286+
{
1287+
const char* envChar = getenv( "DEFAULT_DATUM_TRANSFORM" );
1288+
if ( envChar )
1289+
{
1290+
QString envString( envChar );
1291+
QStringList transformSplit = envString.split( ";" );
1292+
for ( int i = 0; i < transformSplit.size(); ++i )
1293+
{
1294+
QStringList slashSplit = transformSplit.at( i ).split( "/" );
1295+
if ( slashSplit.size() < 4 )
1296+
{
1297+
continue;
1298+
}
1299+
1300+
mDefaultDatumTransformations.insert( qMakePair( slashSplit.at( 0 ), slashSplit.at( 1 ) ), qMakePair( slashSplit.at( 2 ).toInt(), slashSplit.at( 3 ).toInt() ) );
1301+
}
1302+
}
1303+
}
1304+
12781305
bool QgsMapRenderer::mDrawing = false;

src/core/qgsmaprenderer.h

+5
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,11 @@ class CORE_EXPORT QgsMapRenderer : public QObject
456456
QgsMapSettings mMapSettings;
457457

458458
QHash< QString, QgsLayerCoordinateTransform > mLayerCoordinateTransformInfo;
459+
460+
QHash< QPair< QString, QString >, QPair< int, int > > mDefaultDatumTransformations;
461+
462+
private:
463+
void readDefaultDatumTransformations();
459464
};
460465

461466
#endif

src/server/qgsserver.cpp

+25
Original file line numberDiff line numberDiff line change
@@ -78,12 +78,14 @@ bool QgsServer::sCaptureOutput = false;
7878
QgsServer::QgsServer( int &argc, char **argv )
7979
{
8080
init( argc, argv );
81+
saveEnvVars();
8182
}
8283

8384

8485
QgsServer::QgsServer()
8586
{
8687
init();
88+
saveEnvVars();
8789
}
8890

8991

@@ -454,6 +456,12 @@ void QgsServer::putenv( const QString &var, const QString &val )
454456
*/
455457
QPair<QByteArray, QByteArray> QgsServer::handleRequest( const QString& queryString )
456458
{
459+
//apply environment variables
460+
QHash< QString, QString >::const_iterator envIt = mEnvironmentVariables.constBegin();
461+
for ( ; envIt != mEnvironmentVariables.constEnd(); ++envIt )
462+
{
463+
putenv( envIt.key(), envIt.value() );
464+
}
457465

458466
/*
459467
* This is mainly for python bindings, passing QUERY_STRING
@@ -657,3 +665,20 @@ QPair<QByteArray, QByteArray> QgsServer::testQPair( QPair<QByteArray, QByteArray
657665
}
658666
#endif
659667

668+
void QgsServer::saveEnvVars()
669+
{
670+
saveEnvVar( "MAX_CACHE_LAYERS" );
671+
saveEnvVar( "DEFAULT_DATUM_TRANSFORM" );
672+
}
673+
674+
void QgsServer::saveEnvVar( const QString& variableName )
675+
{
676+
const char* env = getenv( variableName.toLocal8Bit() );
677+
if ( !env )
678+
{
679+
return;
680+
}
681+
682+
mEnvironmentVariables.insert( variableName, QString::fromLocal8Bit( env ) );
683+
}
684+

src/server/qgsserver.h

+9
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,12 @@ class SERVER_EXPORT QgsServer
9393
#endif
9494

9595
private:
96+
97+
void saveEnvVars();
98+
99+
/** Saves environment variable into mEnvironmentVariables if defined*/
100+
void saveEnvVar( const QString& variableName );
101+
96102
// All functions that where previously in the main file are now
97103
// static methods of this class
98104
static QString configPath( const QString& defaultConfigPath,
@@ -128,6 +134,9 @@ class SERVER_EXPORT QgsServer
128134
static int sArgc;
129135
static QgsApplication* sQgsApplication;
130136
static bool sCaptureOutput;
137+
138+
/** Pass important environment variables to the fcgi processes*/
139+
QHash< QString, QString > mEnvironmentVariables;
131140
};
132141
#endif // QGSSERVER_H
133142

0 commit comments

Comments
 (0)