Zooming to match a raster scale
Ed McNierney
ed at TOPOZONE.COM
Sun Apr 24 18:55:08 PDT 2005
Nick -
I'm not sure what your "unit" is supposed to mean, but I can describe
the process for taking the pixel size and finding the right
MINSCALE/MAXSCALE values.
The MINSCALE and MAXSCALE values are the denominators of scale ratios,
like 1:10,000 scale. MINSCALE 10000 means "a minimum scale of
1:10,000", where one meter on the map equals 10,000 meters on the
ground. The problem becomes, "what's one meter on the map"?
The RESOLUTION statement answers that question. The default value is
72, meaning that 72 pixels in a MapServer output image are presumed to
occupy one inch on the screen. This is actually unlikely to be an
accurate value unless you're running a 20-year-old Macintosh, but it
often doesn't matter - it's mostly used for internal calculations.
So, if 72 pixels are presumed to cover one inch on the screen, and your
image has a source resolution of 1.26956817 meters per pixel, then one
inch on the screen will show 72 * 1.26956817 meters or 91.40890824
meters of image. Since 91.40890824 meters equals 3598.7687 inches, this
means one inch on the screen shows 3598.7687 inches on the ground - a
scale ratio of 1:3598.7687
If you displayed that image at the "scale" of 3598.7687 you should get a
pixel-for-pixel replica of your source image. If you use a different
RESOLUTION statement, you need to adjust accordingly.
For calculating the IMGEXT values, you simply need to make the X extent
and Y extent equal the number of (X or Y) pixels in the image times
1.26956817.
Yes, there are better-quality ways of resampling images, but - as you
saw in Preview - they're slow. MapServer doesn't use them, but you can
use various tools (including gdalwarp, from the GDAL distribution) to
resample images offline and create "pyramids" of varying resolutions.
This will improve the display quality of your images while keeping the
performance fast - at the expense of extra disk space and preprocessing
work.
- Ed
Ed McNierney
President and Chief Mapmaker
TopoZone.com / Maps a la carte, Inc.
73 Princeton Street, Suite 305
North Chelmsford, MA 01863
Phone: +1 (978) 251-4242
Fax: +1 (978) 251-1396
ed at topozone.com
________________________________
From: UMN MapServer Users List [mailto:MAPSERVER-USERS at LISTS.UMN.EDU] On
Behalf Of Nick Dabner
Sent: Sunday, April 24, 2005 7:17 PM
To: MAPSERVER-USERS at LISTS.UMN.EDU
Subject: Re: [UMN_MAPSERVER-USERS] Zooming to match a raster scale
Got it. - Thanks Bart. My extents were wrong as IMGEXT do not match the
gdalinfo info fo upper-left, lower-right style when applied to
Australia. Seems I have to switch the latitude.
Ok, so just to finish up this thread, found a solution by taking a point
using Mapxy and then applying a scale or buffer. The rasters I am using
have a pixel size of (1.26956817,-1.26956817) and a unit of
0.0174532925199433. By matching the scale as returned in the
template/html file, as close as possible to this pixel size shown by
gdalinfo, the maps start looking pretty good as they have little or no
scaling.
First question: With a given pixel size and unit (metres) above, what is
the formula to work out the scale to input? In the example above, I
found a value of .31267 would give me a matching output scale to pixel
size to 4 decimal places.
Second question: Loading the TIF file up in Apple Preview, it looks
jagged for a moment, until it anti-aliases the file. Once anti-aliased,
the legibility improves noticeably. I take it mapserver cannot perform
any anti-aliasing when scaling rasters. I suspect even nearest neighbour
would be a great improvement. Any plans for this? I guess it would
require JPEG or PNG24 to provide enough colours. Is it possible for a
browser or client app to do this work?
regards,
Nick
On 25/04/2005, at 7:45 AM, Nick Dabner wrote:
Thanks Bart,
So I take it that scale and mapxy are mutually exclusive with
mapext? Removing mapext always results in the error:
msDrawMap(): Image handling error. Unable to initialize image.
msCalculateScale(): General error message. Invalid image extent,
minx=-1.000000, miny=-1.000000, maxx=-1.000000, maxy=-1.000000
Any idea what I am doing wrong? Also I found out my scale is
current 3.15 on the output map and needs to be 2.59, hence the poor
output. Would a resolution tag in the mapfile help?
ND
On 24/04/2005, at 10:45 PM, Bart van den Eijnden wrote:
Hi Nick,
you can probably use a combination of mapxy and scale.
See Mapserver CGI reference:
http://mapserver.gis.umn.edu/doc44/cgi-reference.html
Best regards,
Bart
On Sun, 24 Apr 2005 22:38:34 +1000, Nick Dabner
<dabner at OPTUSNET.COM.AU>
wrote:
Hello list,
I have a set of raster geotiffs tiled and
working on mapserver 4.2 on
osx (thanks to william k).
When viewing the rasters in mapserver, I find
they suffer from some
slight scaling and never look anywhere near as
good as the original
files. I have given dithering and PNG24 a go,
but see that I probably
need to match my mapserver session's scale as
close as possible to the
source data scale. Does this sound right?
Using CGI mapserver, how can I specify an exact
viewing area (to match
my calculations)? What argument would I choose.
Attemping to pass IMGEXT=2482199.076569
4407814.492404 2484230.3854232
4406291.0107634 just returns an extent error.
Oh, I am in Melb Aust, so
these are real coords.
Any other ideas? The next step would probably be
fixed zoom levels for
street, area, suburb, municipality and city or
similar, with
preprocessed rasters for each level.
regards,
Nick
--
Using Opera's revolutionary e-mail client:
http://www.opera.com/m2/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/mapserver-users/attachments/20050424/dc514adb/attachment.htm>
More information about the MapServer-users
mailing list