[mapserver-users] WFS GetFeature with PostGIS database : the PostGIS request is not well formated (with string fields that contains only numbers)

"SAEZ Laurent - CETE Méditerr./DI/ETER" Laurent.Saez at developpement-durable.gouv.fr
Thu Jul 24 10:18:44 EDT 2008


Hi List,

I have a PostGIS database.
I have a point table representing plots.
I have to select a plot using several fields :

    * num_dep (string) : departement code,
    * nom_com (string) : city name,
    * section (string) : section number,
    * numero (string) : plot number.

I use MapServer 4.99 and Postgersql 8.1.

All my fields are strings.
Result of DescribeFeatureType request :
<complexType name="bdparcellaire_numeroType">
  <complexContent>
    <extension base="gml:AbstractFeatureType">
      <sequence>
        <element name="geometry" type="gml:PointPropertyType" 
minOccurs="0" maxOccurs="1"/>
        <element name="code_dep" type="string"/>
        <element name="nom_com" type="string"/>
        <element name="section" type="string"/>
        <element name="numero" type="string"/>
        <element name="gid" type="string"/>
        <element name="oid" type="string"/>
      </sequence>
    </extension>
  </complexContent>
</complexType>

When I do a WFS GetFeature request, mapserver doesn't format correctly 
strings fields that contains only numbers.
Example : (to select the plot where num_dep='66' and nom_com='Baixas' 
and section='0A' and numero='2651')
http://mapserver_i2.cete-mediterranee.i2/maps/mapserv?map=%2Fdata%2Fcarto%2Fref%2Fbdparcellaire%2Fbdparcellaire_2007_iso.map&=&SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=bdparcellaire_numero&FILTER=%28%3CFilter%3E%3CAnd%3E%3CPropertyIsEqualTo%3E%3CPropertyName%3Ecode_dep%3C%2FPropertyName%3E%3CLiteral%3E66%3C%2FLiteral%3E%3C%2FPropertyIsEqualTo%3E%3CPropertyIsEqualTo%3E%3CPropertyName%3Enom_com%3C%2FPropertyName%3E%3CLiteral%3EBaixas%3C%2FLiteral%3E%3C%2FPropertyIsEqualTo%3E%3CPropertyIsEqualTo%3E%3CPropertyName%3Esection%3C%2FPropertyName%3E%3CLiteral%3E0A%3C%2FLiteral%3E%3C%2FPropertyIsEqualTo%3E%3CPropertyIsEqualTo%3E%3CPropertyName%3Enumero%3C%2FPropertyName%3E%3CLiteral%3E2651%3C%2FLiteral%3E%3C%2FPropertyIsEqualTo%3E%3C%2FAnd%3E%3C%2FFilter%3E%29

For human people :
map=/data/carto/ref/bdparcellaire/bdparcellaire_2007_iso.map&=
&SERVICE=WFS
&VERSION=1.0.0
&REQUEST=GetFeature
&TYPENAME=bdparcellaire_numero
&FILTER=(
<Filter>
  <And>
    <PropertyIsEqualTo>
      <PropertyName>code_dep</PropertyName>
      <Literal>66</Literal>
    </PropertyIsEqualTo>
    <PropertyIsEqualTo>
      <PropertyName>nom_com</PropertyName>
      <Literal>Baixas</Literal>
    </PropertyIsEqualTo>
    <PropertyIsEqualTo>
      <PropertyName>section</PropertyName>
      <Literal>0A</Literal>
    </PropertyIsEqualTo>
    <PropertyIsEqualTo>
      <PropertyName>numero</PropertyName>
      <Literal>2651</Literal>
    </PropertyIsEqualTo>
  </And>
</Filter>)

MapServer sends this instruction to PostGIS :
LOG:  instruction : DECLARE mycursor BINARY CURSOR FOR SELECT 
asbinary(force_collection(force_2d(the_geom)),'NDR'),oid::text from 
(select code_dep, nom_com, section, numero, gid, the_geom, oid FROM 
localisant) as foo WHERE ( (code_dep= 66)  And  ( (nom_com= 'Baixas')  
And  ( (section= '0A')  And  (numero= 2651) ) ) ) and (the_geom && 
setSRID( 'BOX3D(47650 1620400,1197850 2677450)'::BOX3D,27582) )

We can see that code_dep and numero are not quoted. It's not a problem 
in this example, but when I search the plot with the numero=0256, search 
returned no results. The plot exists ! The right request in PostGIS 
returns the plot.
It seems that not '0256' is search but 256.
Is it a bug ? I think so !
For me it's very very very very disturbing.
I can't use mapserver as a WFS server to select plot !
I hope someone could help me !

Regards

Laurent
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/mapserver-users/attachments/20080724/8046a0dd/attachment.html


More information about the mapserver-users mailing list