[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