patch for SLD (vs. 4.8.3)

Bart van den Eijnden (OSGIS) bartvde at XS4ALL.NL
Wed Sep 13 01:46:44 EDT 2006


Hi,

can you please submit this via the Mapserver bugzilla?

Thanks in advance.

Best regards,
Bart

Rob Cermak schreef:
> Hi,
>
> We have a patch for the SLD rendering for the colormap.  It seems that it is
> documented to take doubles, but all floats passed via SLD become ints through
> use of atoi.
>
> This patch only takes care of the ColorMap.  This allows color rendering of
> float values.
>
> http://ak.aoos.org/data/patch/mapserver_483_mapogcsld.patch
>
> If some change could work into 4.10, that would be great.
>
> Cheers,
> Rob
>
> --- mapogcsld.c.orig	2006-09-12 15:30:39.000000000 -0800
> +++ mapogcsld.c	2006-09-12 15:32:24.000000000 -0800
> @@ -2354,6 +2354,7 @@
>      char szExpression[100];
>      int nClassId = 0;
>      double dfOpacity = 1.0;
> +    char *pch, *pchPrevious;
>
>      if (!psRoot || !psLayer)
>        return;
> @@ -2403,10 +2404,32 @@
>                          sColor.blue = hex2int(pszPreviousColor+5);
>
>                          /* ?? Test if pszPreviousQuality < pszQuantity */
> -                        sprintf(szExpression,
> -                                "([pixel] >= %d AND [pixel] < %d)",
> -                                atoi(pszPreviousQuality),
> -                                atoi(pszQuantity));
> +
> +			/* pszQuantity and pszPreviousQuality may be integer or float */
> +			pchPrevious=strchr(pszPreviousQuality,'.');
> +			pch=strchr(pszQuantity,'.');
> +			if (pchPrevious==NULL && pch==NULL) {
> +			  sprintf(szExpression,
> +				  "([pixel] >= %d AND [pixel] < %d)",
> +				  atoi(pszPreviousQuality),
> +				  atoi(pszQuantity));
> +			} else if (pchPrevious != NULL && pch==NULL) {
> +			  sprintf(szExpression,
> +				  "([pixel] >= %f AND [pixel] < %d)",
> +				  atof(pszPreviousQuality),
> +				  atoi(pszQuantity));
> +			} else if (pchPrevious == NULL && pch != NULL) {
> +			  sprintf(szExpression,
> +				  "([pixel] >= %d AND [pixel] < %f)",
> +				  atoi(pszPreviousQuality),
> +				  atof(pszQuantity));
> +			} else {
> +			  sprintf(szExpression,
> +				  "([pixel] >= %f AND [pixel] < %f)",
> +				  atof(pszPreviousQuality),
> +				  atof(pszQuantity));
> +			}
> +
>                          if (psLayer->numclasses < MS_MAXCLASSES)
>                          {
>                              initClass(&(psLayer->class[psLayer->numclasses]));
> @@ -2456,7 +2479,15 @@
>                  sColor.red = hex2int(pszColor+1);
>                  sColor.green= hex2int(pszColor+3);
>                  sColor.blue = hex2int(pszColor+5);
> -                sprintf(szExpression, "([pixel] = %d)", atoi(pszQuantity));
> +
> +		/* pszQuantity may be integer or float */
> +		pch=strchr(pszQuantity,'.');
> +		if (pch==NULL) {
> +		  sprintf(szExpression, "([pixel] = %d)", atoi(pszQuantity));
> +		} else {
> +		  sprintf(szExpression, "([pixel] = %f)", atof(pszQuantity));
> +		}
> +
>                  if (psLayer->numclasses < MS_MAXCLASSES)
>                  {
>                      initClass(&(psLayer->class[psLayer->numclasses]));
>
>
> Rob
>   


-- 
Bart van den Eijnden
OSGIS, Open Source GIS
http://www.osgis.nl



More information about the mapserver-users mailing list