[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