[mapserver-dev] WFS query and Postgis cast problem using with filter encoding

Thomas Gratier osgeo.mailinglist at gmail.com
Fri Dec 10 20:00:37 EST 2010


Hello list,

Filter encoding seems to suffer from a type problem with Postgis. I want to
confirm the problem and check I don't miss something.

So my use case.
I have created a Postgis table.
The structure of the table starts with

CREATE TABLE departement
(
  gid serial NOT NULL,
  id_geofla numeric(10,0),
  code_dept character varying(2),
  nom_dept character varying(30),
  the_geom geometry,
....

I use this postgis layer in a WFS webservices
A query like
http://localhost/cgi-bin/mapserv?map=/home/test/SIG/france/mapfiles/mapfile_carte.map&REQUEST=GetFeature&SERVICE=WFS&VERSION=1.0.0&TYPENAME=departements&OUTPUT=gmlworks.

When I use a filter like
http://localhost/cgi-bin/mapserv?map=/home/test/SIG/france/mapfiles/mapfile_carte.map&REQUEST=GetFeature&SERVICE=WFS&VERSION=1.0.0&TYPENAME=departements&OUTPUT=gml&Filter=
<Filter><PropertyIsEqualTo><PropertyName>code_dept</PropertyName><Literal>01</Literal></PropertyIsEqualTo></Filter>
there is an error with the message below.
<ServiceExceptionReport version="1.2.0" xmlns="http://www.opengis.net/ogc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
http://www.opengis.net/ogc
http://schemas.opengis.net/wfs/1.0.0/OGC-exception.xsd">
<ServiceException code="NoApplicableCode" locator="mapserv">
msWFSGetFeature(): WFS server error. FLTApplyFilterToLayer() failed
msPostGISLayerWhichShapes(): Query error. Error (ERREUR: l'opérateur
n'existe pas : character varying = integer LINE 1:
...d_srid('','departement','the_geom')) and ( (code_dept= 01) ) ^ HINT:
Aucun opérateur ne correspond au nom donné et aux types d'arguments. Vous
devez ajouter des conversions explicites de type. ) executing query: select
"gid","id_geofla","code_dept","nom_dept",encode(AsBinary(force_collection(force_2d("the_geom")),'NDR'),'hex')
as geom,"oid" from departement where the_geom &&
GeomFromText('POLYGON((-25000000 -25000000,-25000000 25000000,25000000
25000000,25000000 -25000000,-25000000
-25000000))',find_srid('','departement','the_geom')) and ( (code_dept= 01) )

</ServiceException>
</ServiceExceptionReport>

It seems to come from cast : mapserver receives the parameter from the url
but doesn't check type and considers the retrieved value as an integer
(because there is no quotes)
This problem occurs with Postgis but not with a shapefile (the same url
works...). I've done some test with oid = true but nothing changes too

Regards

ThomasG
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/mapserver-dev/attachments/20101211/a1477a43/attachment.html


More information about the mapserver-dev mailing list