[mapserver-users] WMS SLD Troubles

Frank Broniewski brfr at metrico.lu
Fri Feb 11 04:30:26 EST 2011


Ok, I've found a problem with the parsing of OWSRequest.setParameter()


My code:

...

     elif request.method == 'GET':
         logging.debug("%s: Request method is GET" % 
datetime.datetime.now())
         for key, value in request.args.items():
             if key.lower() == 'sld':
                 logging.debug("%s: Escaping %s" % 
(datetime.datetime.now(), key))
                 logging.debug("%s: Value is %s" % 
(datetime.datetime.now(), value))
                 value = urllib.quote_plus(value)
             g.ows_request.setParameter(key, value)

             if key.lower() == 'sld':
                 value = g.ows_request.getValueByName(key)
                 logging.debug("%s: Loaded Param %s" % 
(datetime.datetime.now(), value))

     mapscript.msIO_installStdoutToBuffer()

     success = g.ows_map.OWSDispatch(g.ows_request)

...


What I'm basically doing here is setting the request parameters with 
setParameter on the ows_reqeuest object. When there is _no_ sld 
parameter in the request, escaping is not necessary. Once there is a sld 
request parameter, mapscript crashes when doing setParameter('SLD', 
'http://192.168.0.111:8502/sld/style.sld')


[Fri Feb 11 11:10:32 2011] [error] [client 192.168.0.2]     success = 
g.ows_map.OWSDispatch(g.ows_request)
[Fri Feb 11 11:10:32 2011] [error] [client 192.168.0.2]   File 
"/usr/lib/python2.5/site-packages/mapscript.py", line 1515, in OWSDispatch
[Fri Feb 11 11:10:32 2011] [error] [client 192.168.0.2]     def 
OWSDispatch(*args): return _mapscript.mapObj_OWSDispatch(*args)
[Fri Feb 11 11:10:32 2011] [error] [client 192.168.0.2] MapServerError: 
msEvalRegex(): Regular expression error. String failed expression test.
[Fri Feb 11 11:10:32 2011] [error] [client 192.168.0.2] msEvalRegex(): 
Regular expression error. String failed expression test.


Using urllib.quote_plus I escaped the SLD URL back to a web 
representation and set it with setParameter.

SLD=http%3A%2F%2F192.168.0.111%3A8502%2Fsld%2Fstyle.sld
request.args:
Key: SLD
Value: http://192.168.0.111:8502/sld/style.sld
Quoted Value: http%3A%2F%2F192.168.0.111%3A8502%2Fsld%2Fstyle.sld
Loaded Param  http%3A%2F%2F192.168.0.111%3A8502%2Fsld%2Fstyle.sld



Unfortunately quoting does not help, but the error this time is less 
clear than the one before:

[Fri Feb 11 11:11:51 2011] [error] [client 192.168.0.2] Premature end of 
script headers: gishosting.wsgi


the mapserver error log (debug 5) shows also no entry, so I am 
completely clueless what's going wrong here.


Does someone have a clue whats going on there? Datasource is a Postgis 
database (OpenStreetMap data) which works without the SLD parameter.

System is a Ubuntu Hardy 8.04 with the
deb http://ppa.launchpad.net/ubuntugis/ubuntugis-unstable/ubuntu hardy main
deb-src http://ppa.launchpad.net/ubuntugis/ubuntugis-unstable/ubuntu 
hardy main sources

  /usr/lib/cgi-bin/mapserv -v
MapServer version 5.6.6 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG OUTPUT=WBMP 
OUTPUT=SWF OUTPUT=SVG SUPPORTS=PROJ SUPPORTS=AGG SUPPORTS=FREETYPE 
SUPPORTS=ICONV SUPPORTS=FRIBIDI SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT 
SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER 
SUPPORTS=SOS_SERVER SUPPORTS=FASTCGI SUPPORTS=THREADS SUPPORTS=GEOS 
SUPPORTS=RGBA_PNG INPUT=EPPL7 INPUT=POSTGIS INPUT=OGR INPUT=GDAL 
INPUT=SHAPEFILE

dpkg -l
||/ Name           Version        Description
+++-==============-==============-============================================
ii  apache2        2.2.8-1ubuntu0 Next generation, scalable, extendable 
web se
ii  python-mapscri 5.6.6-2~hardy1 Python library for MapServer
ii  mapserver-bin  5.6.6-2~hardy1 MapServer utilities
ii  cgi-mapserver  5.6.6-2~hardy1 CGI executable for MapServer

Python 2.5.2 (r252:60911, Jan 20 2010, 23:14:04)
And self compiled libapache2-mod-wsgi


Frank




Am 10.02.2011 15:00, schrieb Frank Broniewski:
> Ok, we've narrowed it down a bit. When we use the cgi-mapserver the SLD
> styling works, so the issue seems to be with (python) mapscript ...
> I will investigate further
>
> Frank
>
>
> Am 09.02.2011 09:18, schrieb Frank Broniewski:
>> Hello,
>>
>> thank you for your kind help :-) I've put the requested informations
>> below.
>>
>>
>> Frank
>>
>>
>> INFO:
>>
>> we're using
>> /usr/lib/cgi-bin/mapserv -v
>> MapServer version 5.6.6 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG OUTPUT=WBMP
>> OUTPUT=SWF OUTPUT=SVG SUPPORTS=PROJ SUPPORTS=AGG SUPPORTS=FREETYPE
>> SUPPORTS=ICONV SUPPORTS=FRIBIDI SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT
>> SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER
>> SUPPORTS=SOS_SERVER SUPPORTS=FASTCGI SUPPORTS=THREADS SUPPORTS=GEOS
>> SUPPORTS=RGBA_PNG INPUT=EPPL7 INPUT=POSTGIS INPUT=OGR INPUT=GDAL
>> INPUT=SHAPEFILE
>> on Ubuntu 8.04 with the ubuntu-gis ppa.
>>
>>
>>
>>
>> Original layer definition:
>>
>> LAYER
>> NAME "post"
>> STATUS Off
>> CONNECTIONTYPE Postgis
>> CONNECTION "host=localhost dbname=osm user= password= port=5432"
>> DATA "nway FROM
>> (SELECT way as nway, osm_id, amenity, name
>> FROM planet_osm_point
>> WHERE amenity='post_box' OR amenity='post_office'
>> )
>> as foo using unique osm_id using SRID=900913"
>> TYPE Point
>> PROCESSING "CLOSE_CONNECTION=DEFER"
>> CLASSITEM "amenity"
>> DUMP true
>>
>> # ---------------------------------------------------------------
>> # Projection configuration
>> # ---------------------------------------------------------------
>> INCLUDE "/usr/local/mapconf/share/projections/google.map"
>>
>> METADATA
>> # lots of metadata ....
>> END
>> END
>>
>>
>>
>>
>>
>>
>> the SLD:
>> <NamedLayer>
>> <Name>post</Name>
>> <UserStyle>
>> <Title>Post</Title>
>> <FeatureTypeStyle>
>> <Rule>
>> <ogc:Filter>
>> <ogc:PropertyIsEqualTo>
>> <ogc:PropertyName>amenity</ogc:PropertyName>
>> <ogc:Literal>post_box</ogc:Literal>
>> </ogc:PropertyIsEqualTo>
>> </ogc:Filter>
>> <PointSymbolizer>
>> <Graphic>
>> <ExternalGraphic>
>> <OnlineResource
>> xlink:type="simple"
>>
>> xlink:href="http://192.168.0.111:8502/sld/img/briefkasten.png" />
>> <Format>image/png</Format>
>> </ExternalGraphic>
>> <Size>40</Size>
>> </Graphic>
>> </PointSymbolizer>
>> </Rule>
>> <Rule>
>> <Filter>
>> <PropertyIsEqualTo>
>> <PropertyName>amenity</PropertyName>
>> <Literal>post_office</Literal>
>> </PropertyIsEqualTo>
>> </Filter>
>> <PointSymbolizer>
>> <Graphic>
>> <ExternalGraphic>
>> <OnlineResource
>> xlink:type="simple"
>>
>> xlink:href="http://192.168.0.111:8502/sld/img/posthorn.png" />
>> <Format>image/png</Format>
>> </ExternalGraphic>
>> <Size>40</Size>
>> </Graphic>
>> </PointSymbolizer>
>> </Rule>
>> </FeatureTypeStyle>
>> </UserStyle>
>> </NamedLayer>
>>
>>
>>
>>
>>
>>
>>
>> the generated map file:
>> LAYER
>> CLASSITEM "amenity"
>> CONNECTION "host=localhost dbname=osm user= password= port=5432"
>> CONNECTIONTYPE POSTGIS
>> DATA "nway FROM
>> (SELECT way as nway, osm_id, amenity, name
>> FROM planet_osm_point
>> WHERE amenity='post_box'
>> OR amenity='post_office'
>> )
>> as foo using unique osm_id using SRID=900913"
>> DUMP TRUE
>> METADATA
>> # metadata
>> END
>> NAME "post"
>> PROCESSING "CLOSE_CONNECTION=DEFER"
>> PROJECTION
>> "proj=merc"
>> "a=6378137"
>> "b=6378137"
>> "lat_ts=0"
>> "lon_0=0"
>> "x_0=0"
>> "y_0=0"
>> "k=1"
>> "nadgrids=@null"
>> "units=m"
>> "no_defs"
>> END
>> STATUS ON
>> TYPE POINT
>> UNITS METERS
>> CLASS
>> NAME "Unknown"
>> EXPRESSION ("[amenity]" = "post_box")
>> STYLE
>> ANGLE 360
>> COLOR 0 0 0
>> SIZE 40
>> SYMBOL "http://192.168.0.111:8502/sld/img/briefkasten.png"
>> WIDTH 1
>> END
>> END
>> END
>>
>>
>>
>>
>> Am 08.02.2011 15:57, schrieb Yewondwossen Assefa:
>>> What version of MapServer?
>>>
>>> Also, what is the part in the map file that is causing the problem:
>>> * if you remove the EXPRESSION ("[amenity]" = "post_box") from the
>>> generated map, will that work
>>> * Is the layer's FILTER element set (on the generated map)? If so what
>>> is the value?
>>>
>>> A full layer definition in the generated map would be useful. A full sld
>>> might also help.
>>>
>>> regards,
>>>
>>>
>>> On 07/02/2011 4:58 AM, Frank Broniewski wrote:
>>>> Hello,
>>>>
>>>> We're using a OpenStreetMap Postgis database as a source for our
>>>> geo-servers. We want to provide WMS and WFS services on the data. In
>>>> order to do the styling only once, we are using SLDs, which works
>>>> mostly fine.
>>>>
>>>> One of our layers does not render as a WMS, it throws a
>>>> "msEvalRegex(): Regular expression error. String failed expression
>>>> test." Error during execution.
>>>>
>>>> We identified the layer, and it's the one rendering post boxes. The
>>>> corresponding SLD definition is using a filter:
>>>>
>>>>
>>>> <Filter>
>>>> <PropertyIsEqualTo>
>>>> <PropertyName>amenity</PropertyName>
>>>> <Literal>post_office</Literal>
>>>> </PropertyIsEqualTo>
>>>> </Filter>
>>>>
>>>>
>>>> Using debug-level 5, the mapfile after SLD application looks like
>>>>
>>>> # ...
>>>> # more definitions
>>>> # ...
>>>> CLASSITEM "amenity"
>>>> DATA "nway FROM
>>>> (SELECT way as nway, osm_id, amenity, name
>>>> FROM planet_osm_point
>>>> WHERE amenity='post_box'
>>>> OR amenity='post_office'
>>>> )
>>>> as foo using unique osm_id using SRID=900913"
>>>> # ...
>>>> # more definitions
>>>> # ...
>>>> CLASS
>>>> NAME "Unknown"
>>>> EXPRESSION ("[amenity]" = "post_box")
>>>> STYLE
>>>> ANGLE 360
>>>> COLOR 0 0 0
>>>> SIZE 40
>>>> SYMBOL "http://192.168.0.111:8502/sld/img/briefkasten.png"
>>>> WIDTH 1
>>>> END
>>>> END
>>>>
>>>>
>>>> We simply can't figure out, what might be the problem here. The whole
>>>> issue seem to be related to the filter element, removing it makes the
>>>> layer render. Using the generated map layer, rendering fails with the
>>>> same error.
>>>> So I would be happy if someone with more experience with SLDs can give
>>>> me a hint about whats going wrong here.
>>>>
>>>>
>>>> Frank
>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>
>


-- 
Frank BRONIEWSKI

METRICO s.à r.l.
géomètres
technologies d'information géographique
rue des Romains 36
L-5433 NIEDERDONVEN

tél.: +352 26 74 94 - 28
fax.: +352 26 74 94 99
http://www.metrico.lu


More information about the mapserver-users mailing list