[postgis-users] Querying MapServer PostGIS layer
Dave Stone
D.Stone at ed.ac.uk
Thu Apr 20 09:13:48 PDT 2006
Hi Paul, thanks for your input. We're running MapServer 4.8.3 and
PostgreSQL 8.0.7; PostGIS seems to be 1.0.6.
I've checked the error logs and tried to see what messages appear as a
result of 'atomic' actions at the user interface. I have noted some
'interesting' features (marked below with asterisks), but I don't really
understand how to tie together the input by the end-user and the content
of the log entries. Don't know if you can help?
Cheers,
Dave
Context: the .map file has 3 layers, but only 1 (saint_locations) which
refers to the PostgreSQL database ('stdraft' ).
Experiment: with the browser displaying the 2 non-PostGIS layers
(boundaries and labels), and the PostGIS layer ('locations' -- red
dots), the user chooses from a select list 'mode=query' and clicks one
of the dots. This should load the query template result.html and display
a selection of attributes for the selected location.
Result: in fact he sees a blank page titled 'MapServer Message' and no
message.
Note that if the 'dot layer' is in a shapefile rather than a PostGIS
database, the action works as expected.
[the browser address displayed with the blank page is:]
http://drayton.ucs.ed.ac.uk/cgi-bin/mapserv?imgxy=300.0+300.0&imgext=211720.600000+606214.306667+382058.600000+776552.306667&map=%2Fvar%2Fwww%2Fhtml%2Fsaints%2Fdata%2Fparish%2Fuig.map&savequery=true&map_web_template=result.html&img.x=407&img.y=382&zoomdir=0&zoomsize=4&layer=parish_labels&layer=parish&layer=saint_locations&mode=query
*** Note the mode is query
The error log entries for the 'click-the-dot' interaction are as follows:
[Error log entries:]
[Mon Apr 17 11:23:53 2006] [error] [client 129.215.70.111] [Mon Apr 17
11:23:53 2006].459
924 msPOSTGISLayerOpen called datastatement: geom from loccoords using
unique locationref
using srid=27700, referer:
http://drayton.ucs.ed.ac.uk/cgi-bin/mapserv?imgxy=300.0+300.0
&imgext=211720.600000+606214.306667+382058.600000+776552.306667&map=%2Fvar%2Fwww%2Fhtml%2
Fsaints%2Fdata%2Fparish%2Fuig.map&savequery=true&map_web_template=result.html&zoomdir=0&z
oomsize=4&layer=parish_labels&layer=parish&layer=saint_locations&mode=browse
*** Note mode=browse; is this because that was the calling page's mode?
The data statement is exactly what layer saint_locations has in the .map
file.
*** For brevity, I've chopped the referer parameter and the
time/date/Id/etc. from subsequent messages: they're all the same.
MSPOSTGISLayerOpen -- shared connection not available., referer:...
msConnPoolRegister(saint_locations,user=erdb13
dbname=stdraft,0x9127438), referer:
msPOSTGISLayerFreeItemInfo called, referer:
msPOSTGISLayerWhichShapes called, referer:
msPOSTGISLayerParseData: unique column = locationref, srid='27700',
geom_column_name = geom, table_name=loccoords, referer:
query_string_0_6:DECLARE mycursor BINARY CURSOR FOR SELECT
asbinary(force_collection(force_2d(geom)),'NDR'),locationref::text from
loccoords WHERE geom && setSRID('BOX3D(320169.126666667
661006.363333667,334363.96 675201.196667)'::BOX3D, 27700 ), referer:
msPOSTGISLayerFreeItemInfo called, referer:
msPOSTGISLayerClose datastatement: geom from loccoords using unique
locationref using srid=27700, referer:
msPOSTGISLayerClose -- closing query_result, referer:
msConnPoolRelease(saint_locations,user=erdb13 dbname=stdraft,0x9127438),
referer:
msConnPoolClose(user=erdb13 dbname=stdraft,0x9127438), referer:
*** This next bit looks a repeat of the stuff above: why is it doing that?
msPOSTGISLayerOpen called datastatement: geom from loccoords using
unique locationref using srid=27700, referer:
MSPOSTGISLayerOpen -- shared connection not available., referer:
msConnPoolRegister(saint_locations,user=erdb13
dbname=stdraft,0x9193528), referer:
msPOSTGISLayerFreeItemInfo called, referer:
msPOSTGISLayerWhichShapes called, referer:
msPOSTGISLayerParseData: unique column = locationref, srid='27700',
geom_column_name = geom, table_name=loccoords, referer:
query_string_0_6:DECLARE mycursor BINARY CURSOR FOR SELECT
asbinary(force_collection(force_2d(geom)),'NDR'),locationref::text from
loccoords WHERE geom && setSRID('BOX3D(211720.6 606214.306667,382058.6
776552.306667)'::BOX3D, 27700 ), referer:
msPOSTGISLayerFreeItemInfo called, referer:
msPOSTGISLayerClose datastatement: geom from loccoords using unique
locationref using srid=27700, referer:
msPOSTGISLayerClose -- closing query_result, referer:
msConnPoolRelease(saint_locations,user=erdb13 dbname=stdraft,0x9193528),
referer:
msConnPoolClose(user=erdb13 dbname=stdraft,0x9193528), referer:
*** the third time around -- this IS significantly different though!
msPOSTGISLayerOpen called datastatement: geom from loccoords using
unique locationref using srid=27700, referer:
MSPOSTGISLayerOpen -- shared connection not available., referer:
msConnPoolRegister(saint_locations,user=erdb13
dbname=stdraft,0x9193528), referer:
msPOSTGISLayerFreeItemInfo called, referer:
*** haven't seen the next line before: what does record=0 signify?
msPOSTGISLayerGetShape called for record = 0, referer:
msPOSTGISLayerParseData: unique column = locationref, srid='27700',
geom_column_name = geom, table_name=loccoords, referer:
*** I suspect this is the killer line -- locationrefs should be like
'LO/EW/0001' not 0!!
msPOSTGISLayerGetShape: DECLARE mycursor2 BINARY CURSOR FOR SELECT
asbinary(force_collection(force_2d(geom)),'NDR') from loccoords WHERE
locationref = 0 , referer:
msPOSTGISLayerClose datastatement: geom from loccoords using unique
locationref using srid=27700, referer:
msPOSTGISLayerClose -- query_result is NULL, referer:
msConnPoolRelease(saint_locations,user=erdb13 dbname=stdraft,0x9193528),
referer:
msConnPoolClose(user=erdb13 dbname=stdraft,0x9193528), referer:
Paul Ramsey wrote:
> Dave,
>
> Turn on statement logging in your PostgreSQL installation and see what
> SQL mapserver is sending to the back-end. That may clarify where/why
> things are failing a little. Also, what Mapserver version are you using?
>
> P
More information about the postgis-users
mailing list