[mapserver-users] MapScript WMS request

Mr. Puneet Kishor punk.kish at gmail.com
Thu Sep 8 16:14:55 PDT 2011


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
>>>>>>> 
>>>>>> 




More information about the MapServer-users mailing list