[Mapserver-users] grass from mapscript with system()-call?
Lowell Filak
lfilak at medinaco.org
Tue May 27 13:29:31 PDT 2003
Have you thought of possibly adding your setup information to the wiki?
Maybe even provide a download of the setup similar to SlideLinks.
One way to solve a lot of the questions posted for MapServer (ie., buffering) is to have GRASS in the background doing things such as taking a given shape(file) and buffering it or doing some sort of analysis and then creating a shapefile, or GRASS raster as a result and then MapServer could incorporate the result.
Lowell F.
The following message was sent by "Matt Doggett" <mdoggett at coas.oregonstate.edu> on Tue, 27 May 2003 12:28:27 -0700.
> I'm doing exactly what you are after and have succeeded (finally!).
> However, I think my method is a little different. What I do (from my
> mapserver app) is call a CGI script which (after doing some other stuff)
> calls a couple of Grass scripts that do the calculations. I have a
> subroutine (Grass_Init) which initializes the Grass environment to the
> specified database, location, and mapset. At some point in the process,
> this subroutine is called, after which the script can run any grass
> command simply by running a system command. E.g. (in Perl):
> System "r.mapcalc \'newgrid=sin(A)+cos(B)\'";
> If you can't get anywhere with your method, maybe this will help.
>
> -Matt
>
>
>
> #/***************************************
> # Usage: Grass_Init( Grass_Database, Location, Mapset);
> # Sets up a GRASS environment and creates a GISRC file.
> # Returns the name of the GISRC file created.
> sub Grass_Init {
> my ($GISDBASE,$LOCATION_NAME,$MAPSET) = @_;
> die "Usage: Grass_Init( Grass_Database, Location,
> Mapset)!" if (@_<3);
>
> my $GISBASE="/usr/local/grass5";
> my $GISRC = "/tmp/.grassrc.$$";
> my $ETC = "$GISBASE/etc";
> my $PATH ="$GISBASE/bin:$GISBASE/scripts:$GISBASE/garden/bin";
> my $LOCATION = "$GISDBASE/$LOCATION_NAME/$MAPSET";
>
> # Setup environment variables GRASS requires
> $ENV {'GISBASE'}= $GISBASE;
> $ENV {'GISRC'} = $GISRC;
> $ENV {'ETC'}= $ETC;
> $ENV {'PATH'}= "$PATH:$ENV{'PATH'}" if (index($ENV{'PATH'},$GISBASE)
> < 0);
> $ENV {'LOCATION_NAME'}=$LOCATION_NAME;
> $ENV {'MAPSET'} = $MAPSET;
> $ENV {'LOCATION'} = $LOCATION;
>
> # Create .grassrc file #
> open (RC,">$GISRC")
> or die "Error opening $GISRC! $!";
> print RC <<EOF;
> GISDBASE: $GISDBASE
> LOCATION_NAME: $LOCATION_NAME
> MAPSET: $MAPSET
> GISLIB: $GISBASE/src/libes/gis
> VECT_INCLUDE: $GISBASE/src/mapdev/Vlib
> XDRIVER_HEIGHT: 480
> XDRIVER_WIDTH: 640
> EOF
>
> close RC;
> print "GRASS initialized using $GISRC.\n";
> return $GISRC;
> }#end Grass_Init
>
>
>
> > -----Original Message-----
> > From: mapserver-users-admin at lists.gis.umn.edu [mailto:mapserver-users-
> > admin at lists.gis.umn.edu] On Behalf Of Stephan Holl
> > Sent: Saturday, May 24, 2003 3:54 AM
> > To: mapserver-users
> > Subject: [Mapserver-users] grass from mapscript with system()-call?
> >
> > Dear list,
> >
> > I am struggling around with starting a non-interactive session of
> > grass, which should produce some raster-maps.
> > these maps should then be added to the running mapserver.
> > The Idea is to perform some calculations with r.mapcalc directly in
> the
> > browser.
> > whenever I start grass with
> >
> > system("SHELL=./grass_commands.sh ; /path/where/grass/lives/grass5
> > testlocation/PERMANENT ; SHELL=/bin/sh");
> >
> > the output says, that grass is already in use from the apache-user....
> > does anybody how to solve this?
> >
> >
> > Thank you.
> >
> > cheers
> > Stephan Holl
> > --
> > Stephan Holl
> >
> > GnuPG Key-ID: 11946A09
>
> _______________________________________________
> Mapserver-users mailing list
> Mapserver-users at lists.gis.umn.edu
> http://lists.gis.umn.edu/mailman/listinfo/mapserver-users
More information about the MapServer-users
mailing list