@@ -425,6 +425,7 @@ int FLTApplySimpleSQLFilter(FilterEncodingNode *psNode, mapObj *map, int iLayerI
425
425
szEPSG = FLTGetBBOX (psNode , & sQueryRect );
426
426
if (szEPSG && map -> projection .numargs > 0 ) {
427
427
msInitProjection (& sProjTmp );
428
+ msProjectionInheritContextFrom (& sProjTmp , & map -> projection );
428
429
/* Use the non EPSG variant since axis swapping is done in FLTDoAxisSwappingIfNecessary */
429
430
if (msLoadProjectionString (& sProjTmp , szEPSG ) == 0 ) {
430
431
msProjectRect (& sProjTmp , & map -> projection , & sQueryRect );
@@ -768,6 +769,7 @@ int FLTLayerApplyPlainFilterToLayer(FilterEncodingNode *psNode, mapObj *map,
768
769
if (pszEPSG && map -> projection .numargs > 0 ) {
769
770
projectionObj sProjTmp ;
770
771
msInitProjection (& sProjTmp );
772
+ msProjectionInheritContextFrom (& sProjTmp , & map -> projection );
771
773
/* Use the non EPSG variant since axis swapping is done in FLTDoAxisSwappingIfNecessary */
772
774
if (msLoadProjectionString (& sProjTmp , pszEPSG ) == 0 ) {
773
775
rectObj oldRect = rect ;
@@ -2923,11 +2925,15 @@ int FLTParseGMLEnvelope(CPLXMLNode *psRoot, rectObj *psBbox, char **ppszSRS)
2923
2925
/* FLTNeedSRSSwapping */
2924
2926
/************************************************************************/
2925
2927
2926
- static int FLTNeedSRSSwapping ( const char * pszSRS )
2928
+ static int FLTNeedSRSSwapping ( mapObj * map , const char * pszSRS )
2927
2929
{
2928
2930
int bNeedSwapping = MS_FALSE ;
2929
2931
projectionObj sProjTmp ;
2930
2932
msInitProjection (& sProjTmp );
2933
+ if ( map )
2934
+ {
2935
+ msProjectionInheritContextFrom (& sProjTmp , & map -> projection );
2936
+ }
2931
2937
if (msLoadProjectionStringEPSG (& sProjTmp , pszSRS ) == 0 ) {
2932
2938
bNeedSwapping = msIsAxisInvertedProj (& sProjTmp );
2933
2939
}
@@ -2944,7 +2950,8 @@ static int FLTNeedSRSSwapping( const char* pszSRS )
2944
2950
/* caller will have to determine its value from a more general */
2945
2951
/* context. */
2946
2952
/************************************************************************/
2947
- void FLTDoAxisSwappingIfNecessary (FilterEncodingNode * psFilterNode ,
2953
+ void FLTDoAxisSwappingIfNecessary (mapObj * map ,
2954
+ FilterEncodingNode * psFilterNode ,
2948
2955
int bDefaultSRSNeedsAxisSwapping )
2949
2956
{
2950
2957
if ( psFilterNode == NULL )
@@ -2955,7 +2962,7 @@ void FLTDoAxisSwappingIfNecessary(FilterEncodingNode *psFilterNode,
2955
2962
{
2956
2963
rectObj * rect = (rectObj * )psFilterNode -> psRightNode -> pOther ;
2957
2964
const char * pszSRS = psFilterNode -> pszSRS ;
2958
- if ( (pszSRS != NULL && FLTNeedSRSSwapping (pszSRS )) ||
2965
+ if ( (pszSRS != NULL && FLTNeedSRSSwapping (map , pszSRS )) ||
2959
2966
(pszSRS == NULL && bDefaultSRSNeedsAxisSwapping ) )
2960
2967
{
2961
2968
double tmp ;
@@ -2974,16 +2981,16 @@ void FLTDoAxisSwappingIfNecessary(FilterEncodingNode *psFilterNode,
2974
2981
{
2975
2982
shapeObj * shape = (shapeObj * )(psFilterNode -> psRightNode -> pOther );
2976
2983
const char * pszSRS = psFilterNode -> pszSRS ;
2977
- if ( (pszSRS != NULL && FLTNeedSRSSwapping (pszSRS )) ||
2984
+ if ( (pszSRS != NULL && FLTNeedSRSSwapping (map , pszSRS )) ||
2978
2985
(pszSRS == NULL && bDefaultSRSNeedsAxisSwapping ) )
2979
2986
{
2980
2987
msAxisSwapShape (shape );
2981
2988
}
2982
2989
}
2983
2990
else
2984
2991
{
2985
- FLTDoAxisSwappingIfNecessary (psFilterNode -> psLeftNode , bDefaultSRSNeedsAxisSwapping );
2986
- FLTDoAxisSwappingIfNecessary (psFilterNode -> psRightNode , bDefaultSRSNeedsAxisSwapping );
2992
+ FLTDoAxisSwappingIfNecessary (map , psFilterNode -> psLeftNode , bDefaultSRSNeedsAxisSwapping );
2993
+ FLTDoAxisSwappingIfNecessary (map , psFilterNode -> psRightNode , bDefaultSRSNeedsAxisSwapping );
2987
2994
}
2988
2995
}
2989
2996
0 commit comments