[mapserver-dev] RFC 89 Layer Geomtransform: Call for vote

Stephen Woodbridge woodbri at swoodbridge.com
Wed Feb 20 20:09:06 PST 2013

On 2/20/2013 10:11 PM, Daniel Morissette wrote:
> On 13-02-20 1:36 PM, Alan Boudreault wrote:
>> Initially, that's what I wanted to avoid: adding new GEOMTRANSFORMUNITS.
>> We already have UNITS, TOLERANCEUNITS and SIZEUNITS. I would tend to
>> force the user to use UNITS with GEOMTRANSFORM. I'm not necessary right
>> though.
> Thinking about this some more and out loud:
> - unless I'm mistaken, the UNITS value will matter in this context only
> if you use the [map_cellsize] variable in your GEOMTRANSFORM expression.
> In this case the UNITS setting is used to convert the map->cellsize from
> the map output units to the units of the source data
> - if you don't use the [map_cellsize] variable then the args (e.g. the
> simplify or buffer tolerance)) are passed directly to the corresponding
> function (GEOS or other), so the arg value is assumed to be in the same
> units as the source data (whatever it is) and the UNITS setting has no
> impact in this case
> - there is currently no way in MapServer to set UNITS to a null/unset
> value, so we have no way to know if UNITS was explicitly set in the
> mapfile or not (the default units setting is meters)
> - adding a GEOMTRANSFORMUNITS param (presumably to add the ability to
> pass the tolerance args in arbitrary units instead of in the data
> source's units) will just complicate the issue and not solve the core
> issue which is to determine in which units the original data source
> coordinates are in order to convert the map>cellsize from map output
> units to layer data source units for use in the [map_cellsize] variable
> If the above are true, then a simple solution would be to always use the
> layer->units value and never try to lookup of the projection units. We
> should document the requirement to set UNITS together with the
> [map_cellsize] variable docs (at the same place). If one chooses to use
> [map_cellsize] in their GEOMTRANSFORM expression then they MUST also
> explicitly set UNITS in the layer to the correct value (corresponding to
> the UNITS of the raw vector data source).


This explanation is very clear and helps a lot - thank you.

I agree with all of your points except for the part that if you set 
[map_cellsize] that you must set UNITS to reflect the raw source data 
units. This breaks the following use case.

I have street data in degrees,
I want to street widths to be rendered in meters
(the proceeding is very common) and
I need to apply a GEOTRANSFORM using [map_cellsize] or not.

Your requirement means that I can not use different UNITS for the WIDTH, 
the GEOTRANSFORM with [map_cellsize] and my source data!

OK, so maybe this is not a case anyone would want to use, I just don't 
know. Maybe we should provide a way to specify the source data units if 
that is what is unknown and needed?

I'm not trying to make this more complicated than it needs to be and I 
think that there is significant value even if it isn't supported for all 
possible cases.

   -Steve W

More information about the mapserver-dev mailing list