postgis table joins in layer DATA and FILTER

David Niergarth dn at HDDESIGN.COM
Fri Nov 30 14:19:00 PST 2007


David Niergarth wrote:
> Here's an example of what we'd like to accomplish.
> 
> DATA "p.the_geom from people_points p, spam_table s, eggs_table e"
> FILTER "p.id=s.id and p.id=e.id and s.spam='foo' and e.eggs='bar'"

The only problem with the example above is that mapserver takes everything in 
the FROM clause and includes it in a find_srid() call. See the generated query 
below; note especially the last full line.

DECLARE mycursor
BINARY CURSOR FOR
SELECT asbinary(force_collection(force_2d(pp.the_geom)),'NDR'),OID::text
   from people_points p, spam_table s, eggs_table e
  WHERE (p.id = s.id and p.id = e.id)
        and (p.the_geom && setSRID('BOX3D(-91.5260946100404
41.6407165527344,-91.4920023137877 41.667503356933)'::BOX3D,
find_srid('','people_points p, spam_table s, eggs_table e', 'p.the_geom')
))

That last line should be

   find_srid('','people_points','the_geom')

rather than

   find_srid('','people_points p, spam_table s, eggs_table e', 'p.the_geom')

which it gets by grabbing everything following "from" in the DATA string

   DATA "p.the_geom from people_points p, spam_table s, eggs_table e"

If mapserver were to parse the DATA line more precisely, join queries like this 
would just work. (Would this extra parsing be too postgres-specific?) This 
seems like such a common sort of query to want to run I'm wondering if I'm 
missing some obvious other way to do it. (Or maybe I should make this a feature 
request?)

How are others making this sort of database join for layers?

Thanks,

--David



More information about the MapServer-users mailing list