[Mapserver-DE] Question about WMS Services and capabilities

Stephan Holl holl at gdf-hannover.de
Die Apr 25 11:36:04 CEST 2006


Hello Michael,

On Tue, 25 Apr 2006 11:22:22 +0200 Michael Schulz <mschulz at webgis.de>
wrote:

> Hallo,
> 
> wenn ich die Mail richtig verstehe, dann ist das Problem "nur", dass
> der Extent im getCapabilities für die PostGIS-Layer falsch
> zurückgegeben wird - nicht das die Daten falsch oder anders
> gezeichnet werden. Stimmt das?
> 
> Ich kann das Problem aber bestätigen, habe es mit diversen 
> mapserver-Versionen und PG-DBs. Man kann dieses Problem beheben indem 
> man der Layer das Metadata Attribut "wms_extent" mit einem gültigen 
> Extent angibt.
> 
> Was mir nicht ganz klar ist, warum haben nicht mehr Leute dieses 
> Problem? Bisher noch nicht im getCapabilities geschaut? Existiert
> dieses Problem nur bei bestimmten Versionen?
> 
> Wenn ich das richtig verstehe, dann wird beim getCapabilities-Aufruf 
> irgendwann die Funktion msPOSTGISLayerGetExtent in mapPostgis
> aufgerufen und die gibt nunmal nicht die richtigen Werte zurück:
> "
> /* we return an infinite extent */
> /* we could call the SQL AGGREGATE extent(GEOMETRY), but that would
> take FOREVER */
> /* to return (it has to read the entire table). */
> /* So, we just tell it that we're everywhere and lets the spatial 
> indexing figure things out for us */
> "
> 
> Vielleicht weiss jemand mehr dazu?

Ich hatte das Problem anfang März auf der  englischen MS-Liste:

das ist FrankWs Antwort darauf:
------------------------------------------------------

Stephan,

Well, this is certainly useful information, and would seem to support
the idea that the problem is to some extent related to the PostGIS
connector in MapServer.

When I look in mappostgis.c I see this implementation for the getextent
function:

int msPOSTGISLayerGetExtent(layerObj *layer, rectObj *extent)
{
     if(layer->debug) {
         msDebug("msPOSTGISLayerGetExtent called\n");
     }

     extent->minx = extent->miny = -1.0 * FLT_MAX ;
     extent->maxx = extent->maxy = FLT_MAX;

     return MS_SUCCESS;

... followed by a big chunk of commented out code that presumably
actually computes the extents.  The code is introduced with this
comment:

         /* this should get the real extents,but it requires a table
read */ /* unforunately, there is no way to call this function from 
mapscript, so its */
         /* pretty useless.  Untested since you cannot actually call
it. */

It would seem you get bad extents because the PostGIS connector
deliberately does not attempt to produce the extents.

Likely your best bet is to manually set the extent using the wfs_extent
or ows_extent metadata on the layer in your mapfile.  As long as things
are reasonable static this should be straight forward.

Alternatively this function could be implemented, but even if it was, I
imagine it would be expensive to evaluate for large layers.

Any mappostgis.c maintainers out there that would care to comment?

Best regards,
-- 
---------------------------------------+--------------------------------------
I set the clouds in motion - turn up   | Frank Warmerdam,
warmerdam at pobox.com light and sound - activate the windows |
http://pobox.com/~warmerdam and watch the world go round - Rush    |
President OSGF, http://osgeo.org

------------------------------------------------------

Viele Grüße

	Stephan


-- 
GDF Hannover - Solutions for spatial data analysis and remote sensing
Hannover Office      -     Mengendamm 16d      -     D-30177 Hannover
Internet: www.gdf-hannover.de      -      Email: holl at gdf-hannover.de
Phone : ++49-(0)511.39088507       -        Fax: ++49-(0)511.39088508




This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)