[mapserver-users] MapScript WMS request

Daniel Morissette dmorissette at mapgears.com
Thu Sep 8 19:27:43 EDT 2011


Hi Puneet,

A few things to try:

1- Reduce your map to a single layer if that's not already the case for 
your first round of tests.

2- Try a GetCapabilities instead of GetMap, and make sure your layer 
shows up properly and with no WARNING in the GetCapabilities XML output. 
Make sure the name of the layer is not changed: if you have multiple 
layers with the same name then the WMS handler will rename them to make 
them unique (WMS spec requirement)

3- Enable DEBUG at the map and layer level and look for any hints as to 
why nothing shows up. Compare the debug output between your WMS requests 
and the regular MapServer requests (the one that you say works fine) 
(see http://mapserver.org/optimization/debugging.html)

4- Frank's earlier suggestion to start by making things work from a 
regular mapfile first and then converting/moving stuff to mapscript 
progressively still stands as a great option.

Daniel


On 11-09-08 07:14 PM, Mr. Puneet Kishor wrote:
> top posting, as most of the relevant info is self-contained in this email --
>
> Ok, with the help of the suggestions from many of you, and by adding the following lines to my program, I am no longer getting any error.
>
> 	..
> 	$map->setMetaData("ows_enable_request", "*");
> 	
> 	..
> 	$map->setProjection("init=epsg:4326");
> 	
> 	..
> 	$layerOne->setProjection("init=epsg:4326");
> 	
> 	..
> 	my $req = new mapscript::OWSRequest();
> 	$req->setParameter("SERVICE", "WMS" );
> 	$req->setParameter("VERSION", "1.1.0" );
> 	$req->setParameter("REQUEST", "GetMap" );
> 	$req->setParameter("BBOX", "-180,-90,180,90" );
> 	$req->setParameter("LAYERS", "mylayer");
> 	$req->setParameter("SRS", "EPSG:4326");
> 	$req->setParameter("WIDTH", "1200");
> 	$req->setParameter("HEIGHT", "600");
> 	$req->setParameter("FORMAT", "image/png");
> 	
> 	my $io = mapscript::msIO_installStdoutToBuffer();
> 	my $dispatch_out = $map->OWSDispatch( $req );
> 	printf "%s\n", mapscript::msIO_getStdoutBufferString();
> 	
> The only problem is -- I am getting an image with nothing in it. This implies that I have likely got all the params for WMS correct, but now I am screwing up with some step in the layer creation. The interesting thing is, this is the same code that works fine as a regular MapServer request; makes an image fast and quick and correct. Is there a way I can add error logging to my WMS program to see what is going on at every step? Perhaps capture the database query being made, etc.
>
>
> On Sep 8, 2011, at 1:22 PM, Frank Warmerdam wrote:
>
>> Puneet,
>>
>> I would add that there is a lot of other metadata that you need to set on a
>> map in order to get WxS services like WMS working.  If you haven't done
>> that either you are going to be frustrated.
>>
>> I would suggest getting your script working initially with an actual mapfile
>> and then if you really want to construct the map programmatically use
>> that as a guide.
>>
>> Best regards,
>>
>> On Thu, Sep 8, 2011 at 11:15 AM, Armin Burger<armin.burger at gmx.net>  wrote:
>>> in PHP MapScript should be something like
>>>   $map->setMetaData("ows_enable_request", "*");
>>>
>>> in Python:
>>>   map.setMetaData("ows_enable_request", "*")
>>>
>>> armin
>>>
>>>
>>> On 08/09/2011 20:05, Mr. Puneet Kishor wrote:
>>>>
>>>> On Sep 8, 2011, at 1:03 PM, thomas bonfort wrote:
>>>>
>>>>> it goes in map->web->metadata
>>>>>
>>>>
>>>> I guessed as much, but I can't fathom the syntax. The webObj doesn't seem
>>>> to have any constructor, and I don't see any documentation. Could you please
>>>> point me to an example?
>>>>
>>>>
>>>>
>>>>>
>>>>> On Thu, Sep 8, 2011 at 19:48, Mr. Puneet Kishor<punk.kish at gmail.com>
>>>>>   wrote:
>>>>>>
>>>>>> a bit more investigation on producing a WMS response via Perl MapScript
>>>>>> reveals the following error
>>>>>>
>>>>>>   <?xml version='1.0' encoding="ISO-8859-1" standalone="no" ?>
>>>>>>   <!DOCTYPE ServiceExceptionReport SYSTEM
>>>>>> "http://schemas.opengis.net/wms/1.1.0/exception_1_1_0.dtd">
>>>>>>   <ServiceExceptionReport version="1.1.0">
>>>>>>   <ServiceException>
>>>>>>   msWMSDispatch(): WMS server error. WMS request not enabled. Check
>>>>>> wms/ows_enable_request settings.
>>>>>>   </ServiceException>
>>>>>>   </ServiceExceptionReport>
>>>>>>
>>>>>> So, it seems I have to somehow, somewhere enable 'ows_enable_request'.
>>>>>> Looking at the documentation, seems like if I had a map file, I could add
>>>>>> the following line to do so
>>>>>>
>>>>>>   ows_enable_request '*'
>>>>>>
>>>>>> However, I am not using a map file at all. Not finding any documentation
>>>>>> on this setting, I tried the following to no avail
>>>>>>
>>>>>>   $map->{ows_enable_request} = '*';
>>>>>>
>>>>>>
>>>>>> Suggestions, anyone?
>>>>>>
>>>>>>
>>>>>> On Sep 7, 2011, at 10:18 PM, Mr. Puneet Kishor wrote:
>>>>>>
>>>>>>> I would really appreciate insight from someone well-versed in the ins
>>>>>>> and outs of WMS via MapScript. Looking at the discussion at
>>>>>>> [http://trac.osgeo.org/mapserver/ticket/670], the `img = wms_map.draw()`
>>>>>>> step seems to be a crucial part of drawing the image.
>>>>>>>
>>>>>>> So, I added `my $img = $map->draw();` to my code below, and indeed, the
>>>>>>> image was drawn and sent back to the browser.
>>>>>>>
>>>>>>> Is this something that should be added to the examples in the
>>>>>>> documentation? Is this the right way to do things? In any case, I am not
>>>>>>> write to STDOUT, and sending the buffer directly. Instead, my code is very
>>>>>>> much like a regular request (and it works) --
>>>>>>>
>>>>>>>     my $new_extent = $map->{extent};
>>>>>>>
>>>>>>>     my $req = new mapscript::OWSRequest();
>>>>>>>     $req->setParameter( "SERVICE", "WMS" );
>>>>>>>     $req->setParameter( "VERSION", "1.1.0" );
>>>>>>>     $req->setParameter( "REQUEST", "GetMap" );
>>>>>>>     $req->setParameter( "BBOX", "-180,-90,180,90" );
>>>>>>>     $req->setParameter( "LAYERS", "layer_name");
>>>>>>>     $req->setParameter( "SRS", "-1");
>>>>>>>     $req->setParameter( "WIDTH", "1200");
>>>>>>>     $req->setParameter( "HEIGHT", "600");
>>>>>>>
>>>>>>>     my $dispatch_out = $map->OWSDispatch( $req );
>>>>>>>     my $img = $map->draw();
>>>>>>>     my $map_img = 'test_' . sprintf("%0.10d", rand(1000000000)) .
>>>>>>> '.png';
>>>>>>>     $img->save("/path/to/$map_img");
>>>>>>>     return send_file("/path/to/$map_img");
>>>>>>>
>>>>>>>
>>>>>>> Comments? Corrections?
>>>>>>>
>>>>>>>
>>>>>>> On Sep 7, 2011, at 6:12 PM, Mr. Puneet Kishor wrote:
>>>>>>>
>>>>>>>>
>>>>>>>> On Sep 7, 2011, at 5:49 PM, Mr. Puneet Kishor wrote:
>>>>>>>>
>>>>>>>>> I am trying to convert my MapScript program to a WMS responder. I
>>>>>>>>> create my $map where I set all the layers and classes and colors, etc, just
>>>>>>>>> like for a normal, non-WMS request that works perfectly correctly.
>>>>>>>>>
>>>>>>>>> my $map = undef;
>>>>>>>>> $map = mapObj(name =>   'mymap') unless defined $map;
>>>>>>>>>
>>>>>>>>> my $req = new mapscript::OWSRequest();
>>>>>>>>> $req->setParameter( "SERVICE", "WMS" );
>>>>>>>>> $req->setParameter( "VERSION", "1.1.0" );
>>>>>>>>> $req->setParameter( "REQUEST", "GetCapabilities" );
>>>>>>>>
>>>>>>>> I changed the above line to
>>>>>>>>
>>>>>>>>   $req->setParameter( "REQUEST", "GetMap");
>>>>>>>>
>>>>>>>> but, still no improvement.
>>>>>>>>
>>>>>>>>
>>>>>>>>>
>>>>>>>>> mapscript::msIO_installStdoutToBuffer();
>>>>>>>>> my $dispatch_out = $map->OWSDispatch( $req );
>>>>>>>>> printf "%s\n", mapscript::msIO_getStdoutBufferString();
>>>>>>>>>
>>>>>>>>> Except, the above doesn't really do anything for me. I get nothing in
>>>>>>>>> my browser. Suggestions?
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Puneet Kishor
>>>>>>>>
>>>>>>>
>
> _______________________________________________
> mapserver-users mailing list
> mapserver-users at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapserver-users


-- 
Daniel Morissette
http://www.mapgears.com/
Provider of Professional MapServer Support since 2000



More information about the mapserver-users mailing list