[mapserver-commits] r8018 - trunk/mapserver
svn at osgeo.org
svn at osgeo.org
Thu Nov 13 23:09:13 EST 2008
Author: Assefa
Date: 2008-11-13 23:09:12 -0500 (Thu, 13 Nov 2008)
New Revision: 8018
Modified:
trunk/mapserver/HISTORY.TXT
trunk/mapserver/mapcopy.c
trunk/mapserver/mapogcsld.c
Log:
Add Support for SLD TextSymbolizer HALO and ANGLE (#2806)
Modified: trunk/mapserver/HISTORY.TXT
===================================================================
--- trunk/mapserver/HISTORY.TXT 2008-11-12 18:09:08 UTC (rev 8017)
+++ trunk/mapserver/HISTORY.TXT 2008-11-14 04:09:12 UTC (rev 8018)
@@ -12,6 +12,8 @@
Current Version (5.3-dev, SVN trunk):
------------------------------------
+- Add Support for SLD TextSymbolizer HALO and ANGLE (#2806)
+
- IGNORE_MISSING_DATA: largely replaced by run-time CONFIG property,
ON_MISSING_DATA, which supports three modes: FAIL, LOG, and IGNORE.
(#2785) ms-rfc-47.txt
Modified: trunk/mapserver/mapcopy.c
===================================================================
--- trunk/mapserver/mapcopy.c 2008-11-12 18:09:08 UTC (rev 8017)
+++ trunk/mapserver/mapcopy.c 2008-11-14 04:09:12 UTC (rev 8018)
@@ -298,6 +298,8 @@
MS_COPYSTRING(dst->encoding, src->encoding);
+ MS_COPYSTELEM(outlinewidth);
+
return MS_SUCCESS;
}
@@ -446,7 +448,8 @@
MS_COPYSTRING(dst->keyimage, src->keyimage);
MS_COPYSTRING(dst->name, src->name);
MS_COPYSTRING(dst->title, src->title);
-
+ MS_COPYSTRING(dst->group, src->group);
+
if (msCopyExpression(&(dst->text), &(src->text)) != MS_SUCCESS) {
msSetError(MS_MEMERR, "Failed to copy text.", "msCopyClass()");
return MS_FAILURE;
@@ -853,6 +856,8 @@
MS_COPYRECT(&(dst->extent), &(src->extent));
+ MS_COPYSTRING(dst->classgroup, src->classgroup);
+
return MS_SUCCESS;
}
Modified: trunk/mapserver/mapogcsld.c
===================================================================
--- trunk/mapserver/mapogcsld.c 2008-11-12 18:09:08 UTC (rev 8017)
+++ trunk/mapserver/mapogcsld.c 2008-11-14 04:09:12 UTC (rev 8018)
@@ -2497,7 +2497,7 @@
char *pszName=NULL, *pszFontFamily=NULL, *pszFontStyle=NULL;
char *pszFontWeight=NULL;
CPLXMLNode *psLabelPlacement=NULL, *psPointPlacement=NULL, *psLinePlacement=NULL;
- CPLXMLNode *psFill = NULL, *psPropertyName=NULL;
+ CPLXMLNode *psFill = NULL, *psPropertyName=NULL, *psHalo=NULL, *psHaloRadius=NULL, *psHaloFill=NULL;
int nLength = 0;
char *pszColor = NULL;
/* char *pszItem = NULL; */
@@ -2666,11 +2666,55 @@
if (psPointPlacement)
ParseTextPointPlacement(psPointPlacement, psClass);
if (psLinePlacement)
- ParseTextLinePlacement(psPointPlacement, psClass);
+ ParseTextLinePlacement(psLinePlacement, psClass);
}
-
/* -------------------------------------------------------------------- */
+/* parse the halo parameter. */
+/* -------------------------------------------------------------------- */
+ psHalo = CPLGetXMLNode(psRoot, "Halo");
+ if (psHalo)
+ {
+ psHaloRadius = CPLGetXMLNode(psHalo, "Radius");
+ if (psHaloRadius && psHaloRadius->psChild && psHaloRadius->psChild->pszValue)
+ psClass->label.outlinewidth = atoi(psHaloRadius->psChild->pszValue);
+
+ psHaloFill = CPLGetXMLNode(psHalo, "Fill");
+ if (psHaloFill)
+ {
+ psCssParam = CPLGetXMLNode(psHaloFill, "CssParameter");
+ while (psCssParam && psCssParam->pszValue &&
+ strcasecmp(psCssParam->pszValue, "CssParameter") == 0)
+ {
+ pszName = (char*)CPLGetXMLValue(psCssParam, "name", NULL);
+ if (pszName)
+ {
+ if (strcasecmp(pszName, "fill") == 0)
+ {
+ if(psCssParam->psChild && psCssParam->psChild->psNext &&
+ psCssParam->psChild->psNext->pszValue)
+ pszColor = psCssParam->psChild->psNext->pszValue;
+
+ if (pszColor)
+ {
+ nLength = strlen(pszColor);
+ /* expecting hexadecimal ex : #aaaaff */
+ if (nLength == 7 && pszColor[0] == '#')
+ {
+ psClass->label.outlinecolor.red = msHexToInt(pszColor+1);
+ psClass->label.outlinecolor.green = msHexToInt(pszColor+3);
+ psClass->label.outlinecolor.blue = msHexToInt(pszColor+5);
+ }
+ }
+ }
+ }
+ psCssParam = psCssParam->psNext;
+ }
+
+ }
+
+ }
+/* -------------------------------------------------------------------- */
/* Parse the color */
/* -------------------------------------------------------------------- */
psFill = CPLGetXMLNode(psRoot, "Fill");
@@ -2708,7 +2752,7 @@
}/* labelitem */
}
- /* TODO : support Halo parameter => shadow */
+
}
}
@@ -2822,6 +2866,12 @@
{
psClass->label.offsetx = atoi(psOffset->psChild->pszValue);
psClass->label.offsety = atoi(psOffset->psChild->pszValue);
+
+ /*if there is a line placement, we will assume that the
+ best setting for mapserver would be for the text to follow
+ the line #2806*/
+ psClass->label.autofollow = MS_TRUE;
+ psClass->label.autoangle = MS_TRUE;
}
}
More information about the mapserver-commits
mailing list