Re: [mapserver-users] Designing a wrapper around mapserv which can be used with fcgi

2009-11-04 Thread Andy Colson


Andy Colson wrote:

Andy Colson wrote:

Adrian Popa wrote:

Hello everyone,

I am currently using a wrapper around mapserv which receives the 
URL parameters, builds the map file (actually I only need to set 
some filters in the map file, but the filters need to be built 
after running some SQL queries with the passed in parameters). 
After the map file is built, mapserv is called (as a shell script), 
and the map gets sent to the user. Currently this wrapper is 
written in perl - so it's not terribly fast as a cgi process.


While this approach works, it is terribly inefficient. I would like 
to use mapserv as a fcgi process (or something faster than plain 
cgi). My question is - how can I /should I build a wrapper around 
mapserv that can customize the MAP file on the fly and run as a 
fcgi process?


Any ideas on where I should start? An example of such a wrapper?

Also, I suspect I can send parameters to mapserver and use some 
sort of variables in the map file to set up my filters - but I 
haven't seen an example. Can someone point me to such a documentation?


Thanks,
Adrian


Have you seen mapscript?  You can use mapserver directly from perl.  
And perl can do fast-cgi.  Here is a little, ad-hoc, non-tested, 
perl fcgi:



#!/usr/bin/perl

use strict;
use mapscript;
use FCGI;


my $request = FCGI::Request( );
while($request-Accept() = 0)
{
my($req, $x, $at, $xmap, $xpin, $sid, $y, $q);

$req = new mapscript::OWSRequest();
$req-loadParams();

$xmap = $req-getValueByName('map');
$xpin = $req-getValueByName('pin');

my $map = new mapscript::mapObj( /maps/$xmap.map );
if (! $map)
{
#print STDERR - Error loading map: $xmap.map\n;
print(Content-type: text/text\r\n\r\n);
print cant load $xmap.map;
$request-Finish();
next;
}

mapscript::msIO_installStdoutToBuffer();

$x = $map-OWSDispatch( $req );
if ($x)
{
print STDERR OWSDispatch: $x\n;
my $errObj = new mapscript::errorObj();
while ($errObj) {
print STDERR ERROR: 
$errObj-{code}:$errObj-{message}:$errObj-{routine} \n;

$errObj = $errObj-next();
}
}

my $content_type = 
mapscript::msIO_stripStdoutBufferContentType();


$x = mapscript::msIO_getStdoutBufferBytes();


print(Content-type: $content_type\r\n\r\n);
if (mapscript::msGetVersionInt() = 50500)
{
print $$x;
} else {
print $x;
}

mapscript::msIO_resetHandlers();
$request-Finish();
}



I'd recommend using mapserver 5.6.0.

-Andy





Adrian Popa wrote:
 Thank you,

 I will look into it. I guess through mapscript I can redefine the
 parameters that get sent to mapserver? Or do I rewrite the whole map?



You can load a map into memory (I assume you were already doing that). 
You said ..perl.. receives the URL parameters ...and... builds the 
map file.



I assume your perl does: use mapscript?

and at some point: my $map = new mapscript::mapObj( /maps/$xmap.map );

You kind of imbed mapserver into your perl script, and can call its 
functions and what not.  After you load the map you can do things to 
it, in memory.


In my example above, I'm using the WMS features ($map-OWSDispatch), 
but you can also generate an image:


my $img = $map-draw();
$img-save('x.jpg', $mapscript::MS_JPG);

-Andy






Adrian Popa wrote:
 Thank you Andy for explaining.

 Actually my wrapper is very hard-core, meaning I don't use mapscript
 (because I had to build it quickly and didn't have time to research
 which was the best approach). Now I have more time and I'd like to tune
 things up, so I will definitely start studying mapscript (If you have a
 link to a good tutorial/function reference for it I am in your debt).

 My wrapper just copied over a template map file, edited it (rewrites
 some filters) and then it set
 $ENV{'QUERY_STRING'} = $ENV{'QUERY_STRING'}.map=$file;

 ...and then called

 print `/var/www/cgi-bin/mapserv`;


 It's barbaric, I know, but it worked for me. :)
 It will take a bit of rewrite to add fcgi support and mapscript, but in
 the long run it will be more mantainable... :)

 Thanks again,
 Adrian

So are you using the template html stuff?  Humm... I've never used that 
stuff, not sure how it'll all translate.


For documentation, I used the mapscript reference:
http://mapserver.org/mapscript/mapscript.html

I found a few example perl scripts that helped with the syntax (my $c = 
new mapscript::colorObj(), $c-{blue} = 255;, etc...).  Other than that, 
I had more problems comming up with nice looking colors for my map, than 
actually writing the perl code.


-Andy
___
mapserver-users mailing list
mapserver-users@lists.osgeo.org

Re: [mapserver-users] Designing a wrapper around mapserv which can be used with fcgi

2009-11-04 Thread Dan Little
If you can you might want to consider python... the syntax is a little cleaner 
with Mapscript.  Of course, that's an opinion but I also am a little allergic 
to sigils (I get all itchy).


- Original Message 
 From: Andy Colson a...@squeakycode.net
 To: Adrian Popa adrian_gh.p...@romtelecom.ro
 Cc: mapserver-users@lists.osgeo.org
 Sent: Wed, November 4, 2009 8:38:52 AM
 Subject: Re: [mapserver-users] Designing a wrapper around mapserv which can 
 be used with fcgi
 
  
  Andy Colson wrote:
  Andy Colson wrote:
  Adrian Popa wrote:
  Hello everyone,
  
  I am currently using a wrapper around mapserv which receives the URL 
 parameters, builds the map file (actually I only need to set some filters in 
 the 
 map file, but the filters need to be built after running some SQL queries 
 with 
 the passed in parameters). After the map file is built, mapserv is called (as 
 a 
 shell script), and the map gets sent to the user. Currently this wrapper is 
 written in perl - so it's not terribly fast as a cgi process.
  
  While this approach works, it is terribly inefficient. I would like to 
  use 
 mapserv as a fcgi process (or something faster than plain cgi). My question 
 is - 
 how can I /should I build a wrapper around mapserv that can customize the 
 MAP 
 file on the fly and run as a fcgi process?
  
  Any ideas on where I should start? An example of such a wrapper?
  
  Also, I suspect I can send parameters to mapserver and use some sort of 
 variables in the map file to set up my filters - but I haven't seen an 
 example. 
 Can someone point me to such a documentation?
  
  Thanks,
  Adrian
  
  Have you seen mapscript?  You can use mapserver directly from perl.  And 
 perl can do fast-cgi.  Here is a little, ad-hoc, non-tested, perl fcgi:
  
  
  #!/usr/bin/perl
  
  use strict;
  use mapscript;
  use FCGI;
  
  
  my $request = FCGI::Request( );
  while($request-Accept() = 0)
  {
  my($req, $x, $at, $xmap, $xpin, $sid, $y, $q);
  
  $req = new mapscript::OWSRequest();
  $req-loadParams();
  
  $xmap = $req-getValueByName('map');
  $xpin = $req-getValueByName('pin');
  
  my $map = new mapscript::mapObj( /maps/$xmap.map );
  if (! $map)
  {
  #print STDERR - Error loading map: $xmap.map\n;
  print(Content-type: text/text\r\n\r\n);
  print cant load $xmap.map;
  $request-Finish();
  next;
  }
  
  mapscript::msIO_installStdoutToBuffer();
  
  $x = $map-OWSDispatch( $req );
  if ($x)
  {
  print STDERR OWSDispatch: $x\n;
  my $errObj = new mapscript::errorObj();
  while ($errObj) {
  print STDERR ERROR: 
 $errObj-{code}:$errObj-{message}:$errObj-{routine} \n;
  $errObj = $errObj-next();
  }
  }
  
  my $content_type = 
  mapscript::msIO_stripStdoutBufferContentType();
  
  $x = mapscript::msIO_getStdoutBufferBytes();
  
  
  print(Content-type: $content_type\r\n\r\n);
  if (mapscript::msGetVersionInt() = 50500)
  {
  print $$x;
  } else {
  print $x;
  }
  
  mapscript::msIO_resetHandlers();
  $request-Finish();
  }
  
  
  
  I'd recommend using mapserver 5.6.0.
  
  -Andy
  
  
  
  Adrian Popa wrote:
   Thank you,
  
   I will look into it. I guess through mapscript I can redefine the
   parameters that get sent to mapserver? Or do I rewrite the whole map?
  
  
  
  You can load a map into memory (I assume you were already doing that). You 
 said ..perl.. receives the URL parameters ...and... builds the map file.
  
  
  I assume your perl does: use mapscript?
  
  and at some point: my $map = new mapscript::mapObj( /maps/$xmap.map );
  
  You kind of imbed mapserver into your perl script, and can call its 
  functions 
 and what not.  After you load the map you can do things to it, in memory.
  
  In my example above, I'm using the WMS features ($map-OWSDispatch), but 
  you 
 can also generate an image:
  
  my $img = $map-draw();
  $img-save('x.jpg', $mapscript::MS_JPG);
  
  -Andy
  
  
  
 
 Adrian Popa wrote:
  Thank you Andy for explaining.
 
  Actually my wrapper is very hard-core, meaning I don't use mapscript
  (because I had to build it quickly and didn't have time to research
  which was the best approach). Now I have more time and I'd like to tune
  things up, so I will definitely start studying mapscript (If you have a
  link to a good tutorial/function reference for it I am in your debt).
 
  My wrapper just copied over a template map file, edited it (rewrites
  some filters) and then it set
  $ENV{'QUERY_STRING'} = $ENV{'QUERY_STRING'}.map=$file;
 
  ...and then called
 
  print `/var/www/cgi-bin/mapserv`;
 
 
  It's barbaric, I know, but it worked for me. :)
  It will 

Re: [mapserver-users] Designing a wrapper around mapserv which can be used with fcgi

2009-11-04 Thread Milo van der Linden
I have:

- mapserver running as fastcgi
- php running as fastcgi

I am currently setting up, not sure how this is going to end up; but I
have the structure you mention in mind too.

I hope that since both processes are fcgi they will enhance each other?
But testing will have to prove it in the near future.

Dan Little schreef:
 If you can you might want to consider python... the syntax is a little 
 cleaner with Mapscript.  Of course, that's an opinion but I also am a little 
 allergic to sigils (I get all itchy).


 - Original Message 
   
 From: Andy Colson a...@squeakycode.net
 To: Adrian Popa adrian_gh.p...@romtelecom.ro
 Cc: mapserver-users@lists.osgeo.org
 Sent: Wed, November 4, 2009 8:38:52 AM
 Subject: Re: [mapserver-users] Designing a wrapper around mapserv which can 
 be used with fcgi

 
 Andy Colson wrote:
   
 Andy Colson wrote:
   
 Adrian Popa wrote:
 
 Hello everyone,

 I am currently using a wrapper around mapserv which receives the URL 
   
 parameters, builds the map file (actually I only need to set some filters in 
 the 
 map file, but the filters need to be built after running some SQL queries 
 with 
 the passed in parameters). After the map file is built, mapserv is called 
 (as a 
 shell script), and the map gets sent to the user. Currently this wrapper is 
 written in perl - so it's not terribly fast as a cgi process.
 
 While this approach works, it is terribly inefficient. I would like to 
 use 
   
 mapserv as a fcgi process (or something faster than plain cgi). My question 
 is - 
 how can I /should I build a wrapper around mapserv that can customize the 
 MAP 
 file on the fly and run as a fcgi process?
 
 Any ideas on where I should start? An example of such a wrapper?

 Also, I suspect I can send parameters to mapserver and use some sort of 
   
 variables in the map file to set up my filters - but I haven't seen an 
 example. 
 Can someone point me to such a documentation?
 
 Thanks,
 Adrian
   
 Have you seen mapscript?  You can use mapserver directly from perl.  And 
 
 perl can do fast-cgi.  Here is a little, ad-hoc, non-tested, perl fcgi:
 
 #!/usr/bin/perl

 use strict;
 use mapscript;
 use FCGI;


 my $request = FCGI::Request( );
 while($request-Accept() = 0)
 {
 my($req, $x, $at, $xmap, $xpin, $sid, $y, $q);

 $req = new mapscript::OWSRequest();
 $req-loadParams();

 $xmap = $req-getValueByName('map');
 $xpin = $req-getValueByName('pin');

 my $map = new mapscript::mapObj( /maps/$xmap.map );
 if (! $map)
 {
 #print STDERR - Error loading map: $xmap.map\n;
 print(Content-type: text/text\r\n\r\n);
 print cant load $xmap.map;
 $request-Finish();
 next;
 }

 mapscript::msIO_installStdoutToBuffer();

 $x = $map-OWSDispatch( $req );
 if ($x)
 {
 print STDERR OWSDispatch: $x\n;
 my $errObj = new mapscript::errorObj();
 while ($errObj) {
 print STDERR ERROR: 
 
 $errObj-{code}:$errObj-{message}:$errObj-{routine} \n;
 
 $errObj = $errObj-next();
 }
 }

 my $content_type = 
 mapscript::msIO_stripStdoutBufferContentType();

 $x = mapscript::msIO_getStdoutBufferBytes();


 print(Content-type: $content_type\r\n\r\n);
 if (mapscript::msGetVersionInt() = 50500)
 {
 print $$x;
 } else {
 print $x;
 }

 mapscript::msIO_resetHandlers();
 $request-Finish();
 }



 I'd recommend using mapserver 5.6.0.

 -Andy

 
 Adrian Popa wrote:
 
 Thank you,

 I will look into it. I guess through mapscript I can redefine the
 parameters that get sent to mapserver? Or do I rewrite the whole map?

   
 You can load a map into memory (I assume you were already doing that). You 
 
 said ..perl.. receives the URL parameters ...and... builds the map file.
 
 I assume your perl does: use mapscript?

 and at some point: my $map = new mapscript::mapObj( /maps/$xmap.map );

 You kind of imbed mapserver into your perl script, and can call its 
 functions 
 
 and what not.  After you load the map you can do things to it, in memory.
 
 In my example above, I'm using the WMS features ($map-OWSDispatch), but 
 you 
 
 can also generate an image:
 
 my $img = $map-draw();
 $img-save('x.jpg', $mapscript::MS_JPG);

 -Andy

 
   
 Adrian Popa wrote:
 
 Thank you Andy for explaining.

 Actually my wrapper is very hard-core, meaning I don't use mapscript
 (because I had to build it quickly and didn't have time to research
 which was the best approach). Now I have more time and I'd like to tune
 things up, so I 

Re: [mapserver-users] Designing a wrapper around mapserv which can be used with fcgi

2009-11-03 Thread Andy Colson

Andy Colson wrote:

Adrian Popa wrote:

Hello everyone,

I am currently using a wrapper around mapserv which receives the URL 
parameters, builds the map file (actually I only need to set some 
filters in the map file, but the filters need to be built after 
running some SQL queries with the passed in parameters). After the 
map file is built, mapserv is called (as a shell script), and the map 
gets sent to the user. Currently this wrapper is written in perl - so 
it's not terribly fast as a cgi process.


While this approach works, it is terribly inefficient. I would like 
to use mapserv as a fcgi process (or something faster than plain 
cgi). My question is - how can I /should I build a wrapper around 
mapserv that can customize the MAP file on the fly and run as a 
fcgi process?


Any ideas on where I should start? An example of such a wrapper?

Also, I suspect I can send parameters to mapserver and use some sort 
of variables in the map file to set up my filters - but I haven't 
seen an example. Can someone point me to such a documentation?


Thanks,
Adrian


Have you seen mapscript?  You can use mapserver directly from perl.  
And perl can do fast-cgi.  Here is a little, ad-hoc, non-tested, perl 
fcgi:



#!/usr/bin/perl

use strict;
use mapscript;
use FCGI;


my $request = FCGI::Request( );
while($request-Accept() = 0)
{
my($req, $x, $at, $xmap, $xpin, $sid, $y, $q);

$req = new mapscript::OWSRequest();
$req-loadParams();

$xmap = $req-getValueByName('map');
$xpin = $req-getValueByName('pin');

my $map = new mapscript::mapObj( /maps/$xmap.map );
if (! $map)
{
#print STDERR - Error loading map: $xmap.map\n;
print(Content-type: text/text\r\n\r\n);
print cant load $xmap.map;
$request-Finish();
next;
}

mapscript::msIO_installStdoutToBuffer();

$x = $map-OWSDispatch( $req );
if ($x)
{
print STDERR OWSDispatch: $x\n;
my $errObj = new mapscript::errorObj();
while ($errObj) {
print STDERR ERROR: 
$errObj-{code}:$errObj-{message}:$errObj-{routine} \n;

$errObj = $errObj-next();
}
}

my $content_type = 
mapscript::msIO_stripStdoutBufferContentType();


$x = mapscript::msIO_getStdoutBufferBytes();


print(Content-type: $content_type\r\n\r\n);
if (mapscript::msGetVersionInt() = 50500)
{
print $$x;
} else {
print $x;
}

mapscript::msIO_resetHandlers();
$request-Finish();
}



I'd recommend using mapserver 5.6.0.

-Andy





Adrian Popa wrote:
 Thank you,

 I will look into it. I guess through mapscript I can redefine the
 parameters that get sent to mapserver? Or do I rewrite the whole map?



You can load a map into memory (I assume you were already doing that). 
You said ..perl.. receives the URL parameters ...and... builds the map 
file.



I assume your perl does: use mapscript?

and at some point: my $map = new mapscript::mapObj( /maps/$xmap.map );

You kind of imbed mapserver into your perl script, and can call its 
functions and what not.  After you load the map you can do things to it, 
in memory.


In my example above, I'm using the WMS features ($map-OWSDispatch), but 
you can also generate an image:


my $img = $map-draw();
$img-save('x.jpg', $mapscript::MS_JPG);

-Andy
___
mapserver-users mailing list
mapserver-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/mapserver-users


Re: [mapserver-users] Designing a wrapper around mapserv which can be used with fcgi

2009-11-03 Thread Adrian Popa

Thank you Andy for explaining.

Actually my wrapper is very hard-core, meaning I don't use mapscript 
(because I had to build it quickly and didn't have time to research 
which was the best approach). Now I have more time and I'd like to tune 
things up, so I will definitely start studying mapscript (If you have a 
link to a good tutorial/function reference for it I am in your debt).


My wrapper just copied over a template map file, edited it (rewrites 
some filters) and then it set

$ENV{'QUERY_STRING'} = $ENV{'QUERY_STRING'}.map=$file;

...and then called

print `/var/www/cgi-bin/mapserv`;


It's barbaric, I know, but it worked for me. :)
It will take a bit of rewrite to add fcgi support and mapscript, but in 
the long run it will be more mantainable... :)


Thanks again,
Adrian

Andy Colson wrote:

Andy Colson wrote:

Adrian Popa wrote:

Hello everyone,

I am currently using a wrapper around mapserv which receives the 
URL parameters, builds the map file (actually I only need to set 
some filters in the map file, but the filters need to be built 
after running some SQL queries with the passed in parameters). 
After the map file is built, mapserv is called (as a shell script), 
and the map gets sent to the user. Currently this wrapper is 
written in perl - so it's not terribly fast as a cgi process.


While this approach works, it is terribly inefficient. I would like 
to use mapserv as a fcgi process (or something faster than plain 
cgi). My question is - how can I /should I build a wrapper around 
mapserv that can customize the MAP file on the fly and run as a 
fcgi process?


Any ideas on where I should start? An example of such a wrapper?

Also, I suspect I can send parameters to mapserver and use some 
sort of variables in the map file to set up my filters - but I 
haven't seen an example. Can someone point me to such a documentation?


Thanks,
Adrian


Have you seen mapscript?  You can use mapserver directly from perl.  
And perl can do fast-cgi.  Here is a little, ad-hoc, non-tested, 
perl fcgi:



#!/usr/bin/perl

use strict;
use mapscript;
use FCGI;


my $request = FCGI::Request( );
while($request-Accept() = 0)
{
my($req, $x, $at, $xmap, $xpin, $sid, $y, $q);

$req = new mapscript::OWSRequest();
$req-loadParams();

$xmap = $req-getValueByName('map');
$xpin = $req-getValueByName('pin');

my $map = new mapscript::mapObj( /maps/$xmap.map );
if (! $map)
{
#print STDERR - Error loading map: $xmap.map\n;
print(Content-type: text/text\r\n\r\n);
print cant load $xmap.map;
$request-Finish();
next;
}

mapscript::msIO_installStdoutToBuffer();

$x = $map-OWSDispatch( $req );
if ($x)
{
print STDERR OWSDispatch: $x\n;
my $errObj = new mapscript::errorObj();
while ($errObj) {
print STDERR ERROR: 
$errObj-{code}:$errObj-{message}:$errObj-{routine} \n;

$errObj = $errObj-next();
}
}

my $content_type = 
mapscript::msIO_stripStdoutBufferContentType();


$x = mapscript::msIO_getStdoutBufferBytes();


print(Content-type: $content_type\r\n\r\n);
if (mapscript::msGetVersionInt() = 50500)
{
print $$x;
} else {
print $x;
}

mapscript::msIO_resetHandlers();
$request-Finish();
}



I'd recommend using mapserver 5.6.0.

-Andy





Adrian Popa wrote:
 Thank you,

 I will look into it. I guess through mapscript I can redefine the
 parameters that get sent to mapserver? Or do I rewrite the whole map?



You can load a map into memory (I assume you were already doing that). 
You said ..perl.. receives the URL parameters ...and... builds the 
map file.



I assume your perl does: use mapscript?

and at some point: my $map = new mapscript::mapObj( /maps/$xmap.map );

You kind of imbed mapserver into your perl script, and can call its 
functions and what not.  After you load the map you can do things to 
it, in memory.


In my example above, I'm using the WMS features ($map-OWSDispatch), 
but you can also generate an image:


my $img = $map-draw();
$img-save('x.jpg', $mapscript::MS_JPG);

-Andy




--
--- 
Adrian Popa

NOC Division
Network Engineer
Divizia Centrul National de Operare Retea
Departament Transport IP  Metro
Compartiment IP Core  Backbone
Phone: +40 21 400 3099

___
mapserver-users mailing list
mapserver-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/mapserver-users


[mapserver-users] Designing a wrapper around mapserv which can be used with fcgi

2009-11-02 Thread Adrian Popa

Hello everyone,

I am currently using a wrapper around mapserv which receives the URL 
parameters, builds the map file (actually I only need to set some 
filters in the map file, but the filters need to be built after running 
some SQL queries with the passed in parameters). After the map file is 
built, mapserv is called (as a shell script), and the map gets sent to 
the user. Currently this wrapper is written in perl - so it's not 
terribly fast as a cgi process.


While this approach works, it is terribly inefficient. I would like to 
use mapserv as a fcgi process (or something faster than plain cgi). My 
question is - how can I /should I build a wrapper around mapserv that 
can customize the MAP file on the fly and run as a fcgi process?


Any ideas on where I should start? An example of such a wrapper?

Also, I suspect I can send parameters to mapserver and use some sort of 
variables in the map file to set up my filters - but I haven't seen an 
example. Can someone point me to such a documentation?


Thanks,
Adrian

___
mapserver-users mailing list
mapserver-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/mapserver-users


Re: [mapserver-users] Designing a wrapper around mapserv which can be used with fcgi

2009-11-02 Thread Andy Colson

Adrian Popa wrote:

Hello everyone,

I am currently using a wrapper around mapserv which receives the URL 
parameters, builds the map file (actually I only need to set some 
filters in the map file, but the filters need to be built after running 
some SQL queries with the passed in parameters). After the map file is 
built, mapserv is called (as a shell script), and the map gets sent to 
the user. Currently this wrapper is written in perl - so it's not 
terribly fast as a cgi process.


While this approach works, it is terribly inefficient. I would like to 
use mapserv as a fcgi process (or something faster than plain cgi). My 
question is - how can I /should I build a wrapper around mapserv that 
can customize the MAP file on the fly and run as a fcgi process?


Any ideas on where I should start? An example of such a wrapper?

Also, I suspect I can send parameters to mapserver and use some sort of 
variables in the map file to set up my filters - but I haven't seen an 
example. Can someone point me to such a documentation?


Thanks,
Adrian


Have you seen mapscript?  You can use mapserver directly from perl.  And 
perl can do fast-cgi.  Here is a little, ad-hoc, non-tested, perl fcgi:



#!/usr/bin/perl

use strict;
use mapscript;
use FCGI;


my $request = FCGI::Request( );
while($request-Accept() = 0)
{
my($req, $x, $at, $xmap, $xpin, $sid, $y, $q);

$req = new mapscript::OWSRequest();
$req-loadParams();

$xmap = $req-getValueByName('map');
$xpin = $req-getValueByName('pin');

my $map = new mapscript::mapObj( /maps/$xmap.map );
if (! $map)
{
#print STDERR - Error loading map: $xmap.map\n;
print(Content-type: text/text\r\n\r\n);
print cant load $xmap.map;
$request-Finish();
next;
}

mapscript::msIO_installStdoutToBuffer();

$x = $map-OWSDispatch( $req );
if ($x)
{
print STDERR OWSDispatch: $x\n;
my $errObj = new mapscript::errorObj();
while ($errObj) {
print STDERR ERROR: 
$errObj-{code}:$errObj-{message}:$errObj-{routine} \n;

$errObj = $errObj-next();
}
}

my $content_type = mapscript::msIO_stripStdoutBufferContentType();

$x = mapscript::msIO_getStdoutBufferBytes();


print(Content-type: $content_type\r\n\r\n);
if (mapscript::msGetVersionInt() = 50500)
{
print $$x;
} else {
print $x;
}

mapscript::msIO_resetHandlers();
$request-Finish();
}



I'd recommend using mapserver 5.6.0.

-Andy
___
mapserver-users mailing list
mapserver-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/mapserver-users


Re: [mapserver-users] Designing a wrapper around mapserv which can be used with fcgi

2009-11-02 Thread Adrian Popa

Thank you,

I will look into it. I guess through mapscript I can redefine the 
parameters that get sent to mapserver? Or do I rewrite the whole map?


Andy Colson wrote:

Adrian Popa wrote:

Hello everyone,

I am currently using a wrapper around mapserv which receives the URL 
parameters, builds the map file (actually I only need to set some 
filters in the map file, but the filters need to be built after 
running some SQL queries with the passed in parameters). After the 
map file is built, mapserv is called (as a shell script), and the map 
gets sent to the user. Currently this wrapper is written in perl - so 
it's not terribly fast as a cgi process.


While this approach works, it is terribly inefficient. I would like 
to use mapserv as a fcgi process (or something faster than plain 
cgi). My question is - how can I /should I build a wrapper around 
mapserv that can customize the MAP file on the fly and run as a 
fcgi process?


Any ideas on where I should start? An example of such a wrapper?

Also, I suspect I can send parameters to mapserver and use some sort 
of variables in the map file to set up my filters - but I haven't 
seen an example. Can someone point me to such a documentation?


Thanks,
Adrian


Have you seen mapscript?  You can use mapserver directly from perl.  
And perl can do fast-cgi.  Here is a little, ad-hoc, non-tested, perl 
fcgi:



#!/usr/bin/perl

use strict;
use mapscript;
use FCGI;


my $request = FCGI::Request( );
while($request-Accept() = 0)
{
my($req, $x, $at, $xmap, $xpin, $sid, $y, $q);

$req = new mapscript::OWSRequest();
$req-loadParams();

$xmap = $req-getValueByName('map');
$xpin = $req-getValueByName('pin');

my $map = new mapscript::mapObj( /maps/$xmap.map );
if (! $map)
{
#print STDERR - Error loading map: $xmap.map\n;
print(Content-type: text/text\r\n\r\n);
print cant load $xmap.map;
$request-Finish();
next;
}

mapscript::msIO_installStdoutToBuffer();

$x = $map-OWSDispatch( $req );
if ($x)
{
print STDERR OWSDispatch: $x\n;
my $errObj = new mapscript::errorObj();
while ($errObj) {
print STDERR ERROR: 
$errObj-{code}:$errObj-{message}:$errObj-{routine} \n;

$errObj = $errObj-next();
}
}

my $content_type = 
mapscript::msIO_stripStdoutBufferContentType();


$x = mapscript::msIO_getStdoutBufferBytes();


print(Content-type: $content_type\r\n\r\n);
if (mapscript::msGetVersionInt() = 50500)
{
print $$x;
} else {
print $x;
}

mapscript::msIO_resetHandlers();
$request-Finish();
}



I'd recommend using mapserver 5.6.0.

-Andy



___
mapserver-users mailing list
mapserver-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/mapserver-users