[ka-Map-users] precache2.php bug
Stephen Woodbridge
woodbri at swoodbridge.com
Fri Aug 18 12:09:27 EDT 2006
Hi Tim, Paul,
I think I have found a bug in precache2.php and I'm not sure of the best
way to fix it.
I added an argument -e <xmin ymin xmax ymax> to limit cache creation to
extents so I could use this from then command line or URL instead of
modifing the mapfile. I modified the code to look like this:
// modify map extent for max_extent metadata
if($oMap->getMetaData('max_extents') != '') {
$szMaxExtents = $oMap->getMetaData('max_extents');
$aszMaxExtents = preg_split('/[\s,]+/', $szMaxExtents);
if(count($aszMaxExtents) == 4) {
$minx = min($aszMaxExtents[0], $aszMaxExtents[2]);
$miny = min($aszMaxExtents[1], $aszMaxExtents[3]);
$maxx = max($aszMaxExtents[0], $aszMaxExtents[2]);
$maxy = max($aszMaxExtents[1], $aszMaxExtents[3]);
$oMap->setExtent($minx, $miny, $maxx, $maxy);
}
}
// modify map extents for extents as arguments
if($_REQUEST['e']) {
$aszMaxExtents = preg_split('/[\s,]+/', $_REQUEST['e']);
if(count($aszMaxExtents) == 4) {
$minx = min($aszMaxExtents[0], $aszMaxExtents[2]);
$miny = min($aszMaxExtents[1], $aszMaxExtents[3]);
$maxx = max($aszMaxExtents[0], $aszMaxExtents[2]);
$maxy = max($aszMaxExtents[1], $aszMaxExtents[3]);
$oMap->setExtent($minx, $miny, $maxx, $maxy);
}
else
exit($usage);
}
$dMinX = $oMap->extent->minx;
$dMaxX = $oMap->extent->maxx;
$dMinY = $oMap->extent->miny;
$dMaxY = $oMap->extent->maxy;
print "\nUsing adjusted extents of [$dMinX, $dMinY, $dMaxX, $dMaxY]\n";
So basically, if the command line argument exists is over writes the
metadata values. This all works fine. I added the print, to see what I
was getting and to my surprise I got really wild values compared to what
I was expecting. So the URL and response is below.
http://localhost/ka-map/precache3.php?m=smap-01&s=4000000&e=-142+47+-50+74&f=1
Using adjusted extents of [-142, 14.5, -50, 106.5]
Map: smap-01
Scale: 4000000
Meta tiles: 7 x 7 = 49
Tiles: 7 x 7 x 5 x 5 = 1225
Group: __base__
row: /u/data/tile-cache/smap-01/4000000/__base__/def/t-8960/l-3840,
rtime=3, rrate=11.7
row: /u/data/tile-cache/smap-01/4000000/__base__/def/t-7680/l-3840,
rtime=2, rrate=17.5
row: /u/data/tile-cache/smap-01/4000000/__base__/def/t-6400/l-3840,
rtime=3, rrate=11.7
row: /u/data/tile-cache/smap-01/4000000/__base__/def/t-5120/l-3840,
rtime=8, rrate=4.4
row: /u/data/tile-cache/smap-01/4000000/__base__/def/t-3840/l-3840,
rtime=128, rrate=0.3
row: /u/data/tile-cache/smap-01/4000000/__base__/def/t-2560/l-3840,
rtime=29, rrate=1.2
row: /u/data/tile-cache/smap-01/4000000/__base__/def/t-1280/l-3840,
rtime=2, rrate=17.5
MetaTile Rate = 0.3; Tile Rate = 7.0; Duration = 175 secs
So my analysis is that the code sets:
$mapWidth = $metaWidth * $tileWidth;
$mapHeight = $metaHeight * $tileHeight;
$oMap->setSize($mapWidth, $mapHeight);
which is basically square. Then it gets the extents from the command
line does a:
$oMap->setExtent($minx, $miny, $maxx, $maxy);
which does NOT set the extents entered, but adjusts the extents to be
the same aspect ratio of the square image set above. So if you request
extents 2 degrees high and 180 degrees wide you will generate a square
of tiles 180 x 180 degrees.
Is this analysis correct? Or did I miss something?
I seems the the max extents needs to be converted into correct $dMinX,
$dMinY, $dMaxX, $dMaxY, but it is not obvious how that should be done.
Got any thoughts on this?
-Steve
More information about the ka-Map-users
mailing list