OpenLayers OpenLayers

Changeset 7889

Show
Ignore:
Timestamp:
08/29/08 02:08:32 (3 months ago)
Author:
euzuro
Message:

bubbling up the 'closest' parameter to the higher-level map object api calls zoomToScale() and zoomToExtent(). Includes thorough tests. r=cr5 (Closes #1250)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/openlayers/lib/OpenLayers/Map.js

    r7879 r7889  
    19411941     * Parameters: 
    19421942     * bounds - {<OpenLayers.Bounds>} 
    1943      */ 
    1944     zoomToExtent: function(bounds) { 
     1943     * closest - {Boolean} Find the zoom level that most closely fits the  
     1944     *     specified bounds. Note that this may result in a zoom that does  
     1945     *     not exactly contain the entire extent. 
     1946     *     Default is false. 
     1947     *  
     1948     */ 
     1949    zoomToExtent: function(bounds, closest) { 
    19451950        var center = bounds.getCenterLonLat(); 
    19461951        if (this.baseLayer.wrapDateLine) { 
     
    19661971            center = bounds.getCenterLonLat().wrapDateLine(maxExtent); 
    19671972        } 
    1968         this.setCenter(center, this.getZoomForExtent(bounds)); 
     1973        this.setCenter(center, this.getZoomForExtent(bounds, closest)); 
    19691974    }, 
    19701975 
     
    19962001     * Parameters: 
    19972002     * scale - {float} 
    1998      */ 
    1999     zoomToScale: function(scale) { 
     2003     * closest - {Boolean} Find the zoom level that most closely fits the  
     2004     *     specified scale. Note that this may result in a zoom that does  
     2005     *     not exactly contain the entire extent. 
     2006     *     Default is false. 
     2007     *  
     2008     */ 
     2009    zoomToScale: function(scale, closest) { 
    20002010        var res = OpenLayers.Util.getResolutionFromScale(scale,  
    20012011                                                         this.baseLayer.units); 
     
    20092019                                           center.lon + w_deg / 2, 
    20102020                                           center.lat + h_deg / 2); 
    2011         this.zoomToExtent(extent); 
     2021        this.zoomToExtent(extent, closest); 
    20122022    }, 
    20132023     
  • trunk/openlayers/tests/Map.html

    r7621 r7889  
    10951095    } 
    10961096 
     1097    function test_Map_zoomToScale(t) { 
     1098        t.plan(4); 
     1099         
     1100        var m = { 
     1101            'baseLayer': { 'units': {} }, 
     1102            'getSize': function() { return {'w': 10, 'h': 15}; }, 
     1103            'getCenter': function() { return {'lon': -5, 'lat': -25}; }, 
     1104            'zoomToExtent': function(extent, closest) { 
     1105                t.ok(extent.equals(g_ExpectedExtent), "extent correctly calculated for zoomToExtent()"); 
     1106                t.ok(closest == g_Closest, "closest correctly passed on to zoomToExtent()"); 
     1107            }             
     1108        } 
     1109 
     1110        var temp = OpenLayers.Util.getResolutionFromScale; 
     1111        OpenLayers.Util.getResolutionFromScale = function(scale, units) { 
     1112            t.ok(scale == g_Scale, "scale parameter correctly passed to getResolutionFromScale"); 
     1113            t.ok(units == m.baseLayer.units, "map's baselayer's units parameter correctly passed to getResolutionFromScale"); 
     1114            return 1000; 
     1115        }; 
     1116  
     1117        g_ExpectedExtent = new OpenLayers.Bounds(-5005,-7525,4995,7475); 
     1118        g_Scale = {}; 
     1119        g_Closest = {}; 
     1120        var args = [g_Scale, g_Closest]; 
     1121        OpenLayers.Map.prototype.zoomToScale.apply(m, args);     
     1122 
     1123        OpenLayers.Util.getResolutionFromScale = temp; 
     1124    } 
    10971125     
     1126    function test_Map_zoomToExtent(t) { 
     1127        t.plan(8); 
     1128 
     1129         
     1130        var m = { 
     1131            'baseLayer': { 
     1132                'wrapDateLine': false       
     1133            }, 
     1134            'setCenter': function(center, zoomLevel) { 
     1135                g_Center = center; 
     1136                g_ZoomLevel = zoomLevel; 
     1137            }, 
     1138            'getZoomForExtent': function(bounds, closest) { 
     1139                t.ok(bounds.equals(g_ToCenterBounds), "bounds correctly passed into getZoomForExtent()"); 
     1140                t.ok(closest == g_Closest, "closest correctly passed along to getZoomForExtent()"); 
     1141                return g_ZoomLevelReturn; 
     1142            } 
     1143        }; 
     1144 
     1145    //no wrapDateLine         
     1146        g_ZoomLevelReturn = {}; 
     1147        g_Bounds = new OpenLayers.Bounds(-20,-15,0,5); 
     1148        g_ExpectedCenter = new OpenLayers.LonLat(-10,-5); 
     1149        g_Closest = {}; 
     1150        g_ToCenterBounds = g_Bounds; 
     1151        var args = [g_Bounds, g_Closest]; 
     1152        OpenLayers.Map.prototype.zoomToExtent.apply(m, args); 
     1153         
     1154        t.ok(g_Center.equals(g_ExpectedCenter), "setCenter called on correct center"); 
     1155        t.ok(g_ZoomLevel == g_ZoomLevelReturn, "correctly passes along zoom level as returned from getZoomForExtent()"); 
     1156 
     1157 
     1158    //wrapDateLine 
     1159        m.baseLayer.wrapDateLine = true; 
     1160        m.getMaxExtent = function() { return new OpenLayers.Bounds(-200,-200,200,200); }; 
     1161 
     1162        g_ZoomLevelReturn = {}; 
     1163        g_BoundsCenter = {}; 
     1164        g_Bounds = new OpenLayers.Bounds(160,-60,-60,60); 
     1165        g_ExpectedCenter = new OpenLayers.LonLat(-150,0); 
     1166        g_Closest = {}; 
     1167        g_ToCenterBounds = new OpenLayers.Bounds(160,-60,340,60); 
     1168        var args = [g_Bounds, g_Closest]; 
     1169        OpenLayers.Map.prototype.zoomToExtent.apply(m, args); 
     1170        t.ok(g_Center.equals(g_ExpectedCenter), "setCenter called on correct center"); 
     1171        t.ok(g_ZoomLevel == g_ZoomLevelReturn, "correctly passes along zoom level as returned from getZoomForExtent()"); 
     1172 
     1173         
     1174    } 
    10981175 
    10991176  </script>