PERL/Mapscript postGIS examples?

Eric Bridger eric at GOMOOS.ORG
Mon Mar 20 17:02:10 EST 2006


Not sure why this would work in CGI mode.
shp2img is the best tool for debugging postgis layers. Well, turning on
postgres logging works as well.

Just a guess but I suspect a projection issue.

Does your postgis data really have an SRID of 4284?  You many need to
change your DATA statement in the postgis layer to something like:
DATA "the_geom (select * from probe) using unique oid using SRID=4284"

The postgis queries below look like they are attempting to use the
standard SRID of -1 or lat/lon projection.

Also I don't see any EXTENT in your map file. That should throw an
error.

I would try getting it all to work with no projection (proj=latlong or
EPGS:4326) first then start messing with the projections.

Eric


On Sat, 2006-03-18 at 01:15, Stephen Davies wrote:
> Thanks for the feedback.
> 
> Turning on PostgreSQL logging did indeed reveal more information.
> However, it leaves even more confused than before.
> 
> It seems that the underlying cause of my results is that the extent 
> being used by mapscript bears no relation to the extent that I 
> specified.
> 
> Here is the sql statement generated from mapscript:
> 
>  2006-03-18 16:22:47 CST LOG:  00000: duration: 33.759 ms  statement: 
> DECLARE mycursor BINARY CURSOR FOR SELECT 
> location::text,asbinary(force_collection(force_2d(geom)),'NDR'),id::text 
> from probe WHERE geom && setSRID('BOX3D(139.522253226183 
> -0.000314231148091942,139.522253452601 -0.000314003203767908)'::BOX3D, 
> find_srid('','probe','geom') )
> 
> The actual extent specified (and the one that works from CGI mapserv) 
> was:
> 
> 139.5143351 -34.7459112 139.5278707 -34.7207064
> 
> The "correct" query as generated by a CGI call with the above mapext is:
> 
> 2006-03-18 16:11:57 CST LOG:  00000: duration: 33.703 ms  statement: 
> DECLARE mycursor BINARY CURSOR FOR SELECT 
> location::text,asbinary(force_collection(force_2d
> (geom)),'NDR'),id::text from probe WHERE geom && 
> setSRID('BOX3D(139.508530404246 -34.7456930137356,139.533675395754 
> -34.7204885334377)'::BOX3D, find_srid('','probe','geom') ) 
> 
> Again the extent is changed but nowhere as drastically.
> 
> I then tried hard-wiring the extent into the map file and removing the 
> mapext argument from the CGI call and got the same result and the same 
> query.
> 
> I then modified my PERL script to use the extent in the map file and 
> again got the same result and the same query generated.
> 
> It looks as if the mapscript setExtent method does something strange and 
> different from the CGI mapext option and that both do strange things 
> with extent statements in map files in some circumstances.
> 
> I tried changing the UNITS to DD but this made no difference (METERS is 
> required to make reference maps etc work properly in the CGI world.)
> 
> Cheers,
> Stephen
> 
> On Friday 17 March 2006 23:42, Simpson wrote:
> > Stephen,
> >
> > You might try checking the Postgresql logs to see if Mapserver is
> > connecting and requesting data.  Turn on statement logging in
> > Postgresql config to get details of exactly what is being sent.  You
> > can then run the statement from psql to see if it is returning what
> > you expect.
> >
> > Drew.
> >
> > -----Original Message-----
> > From: UMN MapServer Users List
> > [mailto:MAPSERVER-USERS at LISTS.UMN.EDU]On Behalf Of Stephen Davies
> > Sent: Friday, March 17, 2006 12:48 AM
> > To: MAPSERVER-USERS at LISTS.UMN.EDU
> > Subject: [UMN_MAPSERVER-USERS] PERL/Mapscript postGIS examples?
> >
> >
> > Could somebody please send me or point me at an example of a
> > PERL/Mapscript script that displays layers populated from a postGIS
> > database and/or raster layers?
> > The following PERL/Mapscript  and map file generates an image
> > containing only the copyright layer.
> > Exactly the same map file with mapserver invoked as CGI generates all
> > layers.
> > (In both cases the extent is provided as args.
> > eg ./genpics q 1 jpg 139.5143351 -34.7459112 139.5278707 -34.7207064)
> >
> > Cheers and thanks,
> > Stephen Davies
> >
> > #! /usr/bin/perl
> > #
> > # args are UID (for mapfile), pic sequence #, image type (extension),
> > extent
> > #
> > use strict;
> > #use CGI;
> > use mapscript;
> > my $uno = $ARGV[0];
> > my $seq = $ARGV[1];
> > my $ext = $ARGV[2];
> > my $minx = $ARGV[3];
> > my $miny = $ARGV[4];
> > my $maxx = $ARGV[5];
> > my $maxy = $ARGV[6];
> > #
> > # if sequence = 1, create/empty directory (ignoring errors)
> > #
> > if ($seq == 1){
> >   mkdir("/var/www/html/status_images/$uno",0777);
> >   unlink </var/www/html/status_images/$uno/*>;
> > }
> > #
> > my $mapfile = "/tmp/$uno.map";
> > my $map = mapscript::mapObj->new($mapfile);
> > my $i=$map->setExtent($minx,$miny,$maxx,$maxy);
> > #
> > #my $img = $map->prepareImage();
> > my $img = $map->draw();
> > my $fname = "/var/www/html/status_images/$uno/$seq.$ext";
> > $img->save($fname);
> > ===================================================
> > MAP
> >   NAME perltest
> >
> >
> >     PROJECTION
> >         "proj=eqc"
> >         "lon_0=139.521e"
> >     END
> >
> >     SIZE 600 600
> >     FONTSET "/var/www/html/benparts/fonts.list"
> >     SYMBOLSET "/var/www/html/benparts/symbols"
> >     UNITS METERS
> >     IMAGETYPE  jpeg
> >     OUTPUTFORMAT
> >         NAME jpeg
> >         DRIVER "GD/JPEG"
> >         MIMETYPE "image/jpeg"
> >         IMAGEMODE RGB
> >         EXTENSION "jpg"
> >         FORMATOPTION "QUALITY=75"
> >     END
> >     IMAGECOLOR 255 255 255
> >
> >     WEB
> >         template /var/www/html/benparts/templates/test1.html
> >         imagepath "/var/www/html/tmp/"
> >         imageurl  "/tmp/"
> >     END
> >
> >     LAYER
> >       TYPE RASTER
> >       NAME "bkgrnd"
> >       STATUS DEFAULT
> >       PROJECTION
> >        "init=epsg:28354"
> >       END
> >       DATA "/var/www/html/benparts/rasters/walker.ecw"
> > #      OFFSITE 0 0 0
> >       PROCESSING "DITHER=YES"
> >     END
> >
> >     LAYER
> >       CONNECTIONTYPE postgis
> >       NAME "probe"
> >       DATA "geom from probe"
> >       CONNECTION "user=scldad dbname=benparts"
> >       STATUS DEFAULT
> >       TYPE POINT
> > #      FILTER "id in (0)"
> >       PROJECTION
> >         "init=epsg:4284"
> >       END
> >       MAXSCALE 5000000
> >       LABELITEM "location"
> >       CLASS
> >         NAME       "Probe (Right Click to select)"
> >         STYLE
> >           COLOR        0 214 0
> >           SYMBOL 'circle'
> >           SIZE 7
> >         END
> >         LABEL
> >           MINDISTANCE 15
> >           POSITION CR
> >           SIZE SMALL
> >           COLOR 0 0 0
> >           FORCE TRUE
> >         END
> >       END
> >     END
> >
> >     LAYER
> >       NAME 'copyright'
> >       TYPE ANNOTATION
> >       STATUS DEFAULT
> >       TRANSFORM FALSE # coordinates are in pixels
> >       FEATURE
> >         POINTS 10 595 END
> >       END
> >       CLASS
> >         LABEL
> >           TYPE TRUETYPE
> >           FONT arial
> >           SIZE 8
> >           COLOR 255 0 0
> >           POSITION CR
> >         END
> >         TEXT 'Photography supplied by MAPLAND, Environment
> > Information, Dept Environment & Heritage'
> >       END
> >     END
> > END
> > --
> > =====================================================================
> >=== This email is for the person(s) identified above, and is
> > confidential to the sender and the person(s).  No one else is
> > authorised to use or disseminate this email or its contents.
> >
> > Stephen Davies Consulting                            Voice: 08-8177
> > 1595 Adelaide, South Australia.                             Fax:
> > 08-8177 0133 Computing & Network solutions.                      
> > Mobile:0403 0405 83
> 
> -- 
> ========================================================================
> This email is for the person(s) identified above, and is confidential to
> the sender and the person(s).  No one else is authorised to use or
> disseminate this email or its contents.
> 
> Stephen Davies Consulting                            Voice: 08-8177 1595
> Adelaide, South Australia.                             Fax: 08-8177 0133
> Computing & Network solutions.                       Mobile:0403 0405 83



More information about the mapserver-users mailing list