<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=UTF-8" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Sorry, I'll stick with perl because I already have experience with it
(and I got used to the cryptic syntax). I'm a big fat zero when it
comes to python, so let's not complicate matters unnecessarily :)<br>
<br>
Andy - thanks for the reference. I too had problems with matching
colors (there doesn't seem to be an algorithm that matches them for
you!) - but I solved it by stealing color schemes from other maps :)<br>
<br>
Regards,<br>
Adrian<br>
<br>
Dan Little wrote:
<blockquote cite="mid:630238.3079.qm@web51406.mail.re2.yahoo.com"
 type="cite">
  <pre wrap="">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 ----
  </pre>
  <blockquote type="cite">
    <pre wrap="">From: Andy Colson <a class="moz-txt-link-rfc2396E" href="mailto:andy@squeakycode.net">&lt;andy@squeakycode.net&gt;</a>
To: Adrian Popa <a class="moz-txt-link-rfc2396E" href="mailto:adrian_gh.popa@romtelecom.ro">&lt;adrian_gh.popa@romtelecom.ro&gt;</a>
Cc: <a class="moz-txt-link-abbreviated" href="mailto:mapserver-users@lists.osgeo.org">mapserver-users@lists.osgeo.org</a>
Sent: Wed, November 4, 2009 8:38:52 AM
Subject: Re: [mapserver-users] Designing a wrapper around mapserv which can be used with fcgi

    </pre>
    <blockquote type="cite">
      <pre wrap="">Andy Colson wrote:
      </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <pre wrap="">Andy Colson wrote:
          </pre>
          <blockquote type="cite">
            <pre wrap="">Adrian Popa wrote:
            </pre>
            <blockquote type="cite">
              <pre wrap="">Hello everyone,

I am currently using a wrapper around mapserv which receives the URL 
              </pre>
            </blockquote>
          </blockquote>
        </blockquote>
      </blockquote>
    </blockquote>
    <pre wrap="">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.
    </pre>
    <blockquote type="cite">
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <blockquote type="cite">
              <pre wrap="">While this approach works, it is terribly inefficient. I would like to use 
              </pre>
            </blockquote>
          </blockquote>
        </blockquote>
      </blockquote>
    </blockquote>
    <pre wrap="">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?
    </pre>
    <blockquote type="cite">
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <blockquote type="cite">
              <pre wrap="">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 
              </pre>
            </blockquote>
          </blockquote>
        </blockquote>
      </blockquote>
    </blockquote>
    <pre wrap="">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?
    </pre>
    <blockquote type="cite">
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <blockquote type="cite">
              <pre wrap="">Thanks,
Adrian
              </pre>
            </blockquote>
            <pre wrap="">Have you seen mapscript?  You can use mapserver directly from perl.  And 
            </pre>
          </blockquote>
        </blockquote>
      </blockquote>
    </blockquote>
    <pre wrap="">perl can do fast-cgi.  Here is a little, ad-hoc, non-tested, perl fcgi:
    </pre>
    <blockquote type="cite">
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <pre wrap="">
#!/usr/bin/perl

use strict;
use mapscript;
use FCGI;


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

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

        $xmap = $req-&gt;getValueByName('map');
        $xpin = $req-&gt;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-&gt;Finish();
                next;
        }

        mapscript::msIO_installStdoutToBuffer();

        $x = $map-&gt;OWSDispatch( $req );
        if ($x)
        {
                print STDERR "OWSDispatch: $x\n";
                my $errObj = new mapscript::errorObj();
                while ($errObj) {
                        print STDERR "ERROR: 
            </pre>
          </blockquote>
        </blockquote>
      </blockquote>
    </blockquote>
    <pre wrap="">$errObj-&gt;{code}:$errObj-&gt;{message}:$errObj-&gt;{routine} \n";
    </pre>
    <blockquote type="cite">
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <pre wrap="">                        $errObj = $errObj-&gt;next();
                }
        }

        my $content_type = mapscript::msIO_stripStdoutBufferContentType();

        $x = mapscript::msIO_getStdoutBufferBytes();


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

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



I'd recommend using mapserver 5.6.0.

-Andy

            </pre>
          </blockquote>
        </blockquote>
        <pre wrap="">Adrian Popa wrote:
        </pre>
        <blockquote type="cite">
          <pre wrap="">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?

          </pre>
        </blockquote>
        <pre wrap="">
You can load a map into memory (I assume you were already doing that). You 
        </pre>
      </blockquote>
    </blockquote>
    <pre wrap="">said "..perl.. receives the URL parameters ...and... builds the map file".
    </pre>
    <blockquote type="cite">
      <blockquote type="cite">
        <pre wrap="">
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 
        </pre>
      </blockquote>
    </blockquote>
    <pre wrap="">and what not.  After you load the map you can do things to it, in memory.
    </pre>
    <blockquote type="cite">
      <blockquote type="cite">
        <pre wrap="">In my example above, I'm using the WMS features ($map-&gt;OWSDispatch), but you 
        </pre>
      </blockquote>
    </blockquote>
    <pre wrap="">can also generate an image:
    </pre>
    <blockquote type="cite">
      <blockquote type="cite">
        <pre wrap="">my $img = $map-&gt;draw();
$img-&gt;save('x.jpg', $mapscript::MS_JPG);

-Andy

        </pre>
      </blockquote>
      <pre wrap="">
      </pre>
    </blockquote>
    <pre wrap="">Adrian Popa wrote:
    </pre>
    <blockquote type="cite">
      <pre wrap="">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'}."&amp;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
      </pre>
    </blockquote>
    <pre wrap="">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:
<a class="moz-txt-link-freetext" href="http://mapserver.org/mapscript/mapscript.html">http://mapserver.org/mapscript/mapscript.html</a>

I found a few example perl scripts that helped with the syntax (my $c = new 
mapscript::colorObj(), $c-&gt;{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
<a class="moz-txt-link-abbreviated" href="mailto:mapserver-users@lists.osgeo.org">mapserver-users@lists.osgeo.org</a>
<a class="moz-txt-link-freetext" href="http://lists.osgeo.org/mailman/listinfo/mapserver-users">http://lists.osgeo.org/mailman/listinfo/mapserver-users</a>
    </pre>
  </blockquote>
  <pre wrap=""><!---->


      

  </pre>
</blockquote>
<br>
</body>
</html>