[mapserver-users] CGI script - MAP NOT CHANGING SCALE

Marie Flanagan theflan at gofree.indigo.ie
Thu May 23 05:43:57 EDT 2002


Hi Lowell,

I got the problem sorted out.  What I discovered is that if you change the
extent, you must use $map->prepareImage() prior to drawing.  This seems to
set variables like 'scale' based on the extent.

Thanks for your help.

Regards

Marie

----- Original Message -----
From: Lowell Filak <lfilak at medinaco.org>
To: Marie Flanagan <theflan at gofree.indigo.ie>
Sent: Wednesday, May 22, 2002 2:03 PM
Subject: Re: [mapserver-users] CGI script - MAP NOT CHANGING SCALE


> After taking a quick look I'm wondering:
> Is $image_extent[1] your maxy?
> Also isn't the (!CGI::param('imgext')) test ALWAYS false?
> Lowell
>
> The following message was sent by "Marie Flanagan"
<theflan at gofree.indigo.ie> on Mon, 20 May 2002 19:08:13 +0100.
>
> > Hi Lowell,
> >
> > Here's the set_extent routine .... and thanks for having a look.
> >
> > Marie
> >
> > sub set_extent
> > {
> >    my ($zoomdir, $zoomsize, $x, $y, @image_extent) = @_;
> >    my $zoom;
> >    my $map_width = $image_extent[2] - $image_extent[0];
> >    my $map_height = abs($image_extent[1]) - abs($image_extent[3]);
> >    if (!CGI::param('imgext'))
> >    {
> >       if ($map_width > $map_height) { $map_height = $map_width; }
> >       else { $map_width = $map_height; }
> >    }
> >    my $cell_width = $map_width/$map->{width};
> >    my $cell_height = $map_height/$map->{height};
> >    $x = $image_extent[0] + $cell_width*$x;
> >    $y = $image_extent[3] - $cell_height*$y;
> >    print DBG "dir $zoomdir, zoom size $zoomsize, \n";
> >    if ($zoomdir == 0) {$zoom = 1; }
> >    else
> >    {
> >       $zoom = ($zoomdir*$zoomsize);
> >       $zoom = 1.0/abs($zoom) if $zoom < 0;
> >    }
> >    $map->{extent}->{minx} = $x - .5*(($map_width)/$zoom);
> >    $map->{extent}->{miny} = $y - .5*(($map_height)/$zoom);
> >    $map->{extent}->{maxx} = $x + .5*(($map_width)/$zoom);
> >    $map->{extent}->{maxy} = $y + .5*(($map_height)/$zoom);
> >    return;
> > }
> >
> > ----- Original Message -----
> > From: Lowell Filak <lfilak at medinaco.org>
> > To: Marie Flanagan <theflan at gofree.indigo.ie>;
> > <mapserver-users at lists.gis.umn.edu>
> > Sent: Monday, May 20, 2002 2:38 PM
> > Subject: Re: [mapserver-users] CGI script - MAP NOT CHANGING SCALE
> >
> >
> > > Can you forward the set_extent subroutine?
> > > Lowel F.
> > >
> > > The following message was sent by "Marie Flanagan"
> > <theflan at gofree.indigo.ie> on Sat, 18 May 2002 11:02:35 +0100.
> > >
> > > > Hi list,
> > > >
> > > > I have a problem with a CGI script - with zooming in/out.
> > > > My set_extent subroutine seems to work in that the map extent is >
> > changed, but when the map is drawn it presents as a little map in the >
top
> > left hand corner if I am zooming in - it's like the exent is working >
but
> > the scale of the map is not changing.  What am I missing?
> > > >
> > > > 2 of my layers are being created on the fly from a flat file.  One
of >
> > the 'dynamic' layers is a shape and is added as a feature to the layer,
>
> > the other is a set of points and labels.
> > > >
> > > > Help gratetfully received - as I am driven demented with this
problem!
> > > >
> > > > Regards,
> > > >
> > > > Marie
> > > >
> > > >
> > > > Extract from the code:
> > > >
> > > > &set_extent($zoomdir, $zoomsize, $imgx, $imgy, @image_extent);
> > > >
> > > > $shape_layer->addFeature($shape);
> > > > $shape_layer->close();
> > > >
> > > > # Now draw all the map layers.  Point layer with labels will be
drawn >
> > separately after this
> > > > for my $i (0 ..($map->{numlayers}-1))
> > > >
> >
> > > >    my $layer = $map->getLayer($i);
> > > >    $success = $layer->draw($map, $image);
> > > >    print DBG "Drew layer $layer->{name} --------- $i ------
$success\n";
> > >
> > > > }
> > > >
> > > > $num_stops = @stops_list -1;
> > > > for my $i (0 .. $num_stops)
> > > > {
> > > >    $display_count = $i + 1;
> > > >    my ($x, $y, $desc) = split(/\t/, $stops_list[$i]);
> > > >    if ($i==0) { $desc="[ $display_count ] START," . $desc; }
> > > >    if ($i== ($num_stops)) { $desc = "[ $display_count ] FINISH," . >
> > $desc; }
> > > >    if ($i > 0 && $i < ($num_stops)) { $desc =
"[ $display_count ]"; }
> > > >    print DBG "$stops_list[$i] ... $i ... $desc \n";
> > > >    $draw_pt1=new pointObj();
> > > >    $draw_pt1->{x} = $x;
> > > >    $draw_pt1->{y} = $y;
> > > >    $draw_pt1->draw($map, $pt_label, $image, undef, "$desc");
> > > >    $draw_pt2=new pointObj();
> > > >    $draw_pt2->{x} = $x;
> > > >    $draw_pt2->{y} = $y;
> > > >    $draw_pt2->draw($map, $pt_layer, $image, undef, undef);
> > > >    $i++;
> > > > }
> > > >
> > >
> > >
>
>




More information about the mapserver-users mailing list