[mapserver-dev] support for label priority in php mapscript

Yewondwossen Assefa yassefa at dmsolutions.ca
Wed Oct 1 05:35:22 EDT 2008


Steve Lime wrote:
> Cool, this is probably something we can get into 5.2.1, at least the numerical
> part. Swig:MapScript uses a setBinding/removeBinding approach that should be
> used here, if not already implemented. Syntax becomes:
> 

  The priority attribute has been added to php mapscript. 
(http://trac.osgeo.org/mapserver/ticket/2782)


>   # in Perl
>   $label->setBinding(mapscript::MS_LABEL_BINDING_PRIORITY, $myColumnName);
> 
> I'll defer to one of the PHP/MapScript devs...
> 

  The same funtions do exist in php mapscript 
(http://mapserver.gis.umn.edu/docs/reference/phpmapscript-class/classes/labelobj)


> Steve
> 
>>>> "Guy Carpenter" <guyc at atgis.com.au> 09/30/08 1:21 AM >>>
> I'm using mapserver 5.2.0 and the PHP mapscript bindings.
> I would like to be able to use the label priority features
> introduced in mapserver 5.0, as documented here:
> 	https://trac.osgeo.org/mapserver/ticket/1619
> 
> I see that the php bindings do not include access
> to the new labelObj->priority attribute, so
> Below are the changes required to support 
> label priority via the php interface...
> 
> Changes to support the numeric priority values are just two lines...
>  
> --- mapserver-5.2.0-orig/mapscript/php3/php_mapscript.c      2008-06-26
> 05:07:30.000000000 +1000
> +++ mapserver-5.2.0/mapscript/php3/php_mapscript.c  2008-09-30
> 09:39:39.000000000 +1000
> @@ -8584,6 +8584,7 @@ static long _phpms_build_label_object(la
>      add_property_long(return_value,   "mindistance",plabel->mindistance);
>      add_property_long(return_value,   "partials",   plabel->partials);
>      add_property_long(return_value,   "force",      plabel->force);
> +    add_property_long(return_value ,  "priority",   plabel->priority);
>  
>      MAKE_STD_ZVAL(new_obj_ptr);  /* Alloc and Init a ZVAL for new object */
>      _phpms_build_color_object(&(plabel->color),list, new_obj_ptr
> TSRMLS_CC);
> @@ -8670,6 +8671,7 @@ DLEXPORT void php3_ms_label_setProperty(
>      else IF_SET_LONG(  "mindistance",  self->mindistance)
>      else IF_SET_LONG(  "partials",     self->partials)
>      else IF_SET_LONG(  "force",        self->force)
> +    else IF_SET_LONG(  "priority",     self->priority)
>      else
>      {
>          php3_error(E_ERROR,"Property '%s' does not exist in this object.", 
> 
> 
> There is also the PRIORITY "[attribute]" form of this
> command which is more complicated to implement.
> Below is a working solution, but I did not find similar code in the
> php bindings to take a lead from, so please cast a critical
> eye over it for style and convention mistakes.
> 
> This patch is *instead of* the above one, and adds support for
> both number label priority and binding priority to a table attribute.
> 
> 
> /usr/local/src/mapserver/mapserver-5.2.0/mapscript/php3/php_mapscript.c
> ---
> /usr/local/src/mapserver/mapserver-5.2.0-orig/mapscript/php3/php_mapscript.c
> 2008-06-26 05:07:30.000000000 +1000
> +++ /usr/local/src/mapserver/mapserver-5.2.0/mapscript/php3/php_mapscript.c
> 2008-09-30 15:58:25.000000000 +1000
> @@ -8584,6 +8584,7 @@ static long _phpms_build_label_object(la
>      add_property_long(return_value,   "mindistance",plabel->mindistance);
>      add_property_long(return_value,   "partials",   plabel->partials);
>      add_property_long(return_value,   "force",      plabel->force);
> +    add_property_long(return_value ,  "priority",   plabel->priority);
>  
>      MAKE_STD_ZVAL(new_obj_ptr);  /* Alloc and Init a ZVAL for new object */
>      _phpms_build_color_object(&(plabel->color),list, new_obj_ptr
> TSRMLS_CC);
> @@ -8612,6 +8613,33 @@ static long _phpms_build_label_object(la
>  
>  
>  /**********************************************************************
> + *                        set_label_priority
> + **********************************************************************/
> +static void set_label_priority(pval *pThis, labelObj *self, pval
> *pNewValue)
> +{
> +  // if string is not null and starts with '[' it is an attribute
> +  if (pNewValue->value.str.val && pNewValue->value.str.val[0]=='[') 
> +  {
> +    // strip leading '[' and trailing ']' from field and duplicate field
> +    char *field = pNewValue->value.str.val;
> +    char *endField = index(field,']');
> +    int len = endField==NULL ? strlen(field) : endField-field-1;  //
> forgive missing ']'
> +    char *copy = malloc(len+1);
> +    memcpy(copy, field+1, len);
> +    copy[len]='\0';
> +    self->bindings[MS_LABEL_BINDING_PRIORITY].item = copy;
> +    self->numbindings++;
> +    _phpms_set_property_string(pThis, "priority", field, E_ERROR
> TSRMLS_CC);
> +  }
> +  else
> +  {
> +    convert_to_long(pNewValue);
> +    _phpms_set_property_long(pThis, "priority", pNewValue->value.lval,
> E_ERROR TSRMLS_CC); 
> +    self->priority = pNewValue->value.lval;
> +  }
> +}
> +
> +/**********************************************************************
>   *                        label->set()
>   **********************************************************************/
>  
> @@ -8670,6 +8698,11 @@ DLEXPORT void php3_ms_label_setProperty(
>      else IF_SET_LONG(  "mindistance",  self->mindistance)
>      else IF_SET_LONG(  "partials",     self->partials)
>      else IF_SET_LONG(  "force",        self->force)
> +    else if (strcmp(pPropertyName->value.str.val, "priority") == 0) 
> +    {      
> +      set_label_priority(pThis, self, pNewValue);
> +    }
>      else
>      {
>          php3_error(E_ERROR,"Property '%s' does not exist in this object.", 
> 
> 
> 
> 
> 
> 
> 
> Thanks
> Guy Carpenter
> Atherton Tablelands GIS
> 
> 
> 
> 
> 
> 
> 
> 
> _______________________________________________
> mapserver-dev mailing list
> mapserver-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapserver-dev
> 
> _______________________________________________
> mapserver-dev mailing list
> mapserver-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapserver-dev
> 


-- 
----------------------------------------------------------------
Assefa Yewondwossen
Software Analyst

Email: assefa at dmsolutions.ca
http://www.dmsolutions.ca/

Phone: (613) 565-5056 (ext 14)
Fax:   (613) 565-0925
----------------------------------------------------------------



More information about the mapserver-dev mailing list