Z.View = function (options) {
    if (!options) {
        options = {};
    }
    this.options = options;
    this._initView();
};

Z.Util.extend(Z.View.prototype, {
    defaultView: {
        'EPSG:3857' : {
            'resolutions' : (function () {
                var resolutions = [];
                var d = 2 * 6378137 * Math.PI;
                for (var i = 0; i < 21; i++) {
                    resolutions[i] = d / (256 * Math.pow(2, i));
                }
                return resolutions;
            })(),
            'fullExtent': {
                'top'   : 6378137 * Math.PI,
                'left'  : -6378137 * Math.PI,
                'bottom': -6378137 * Math.PI,
                'right' : 6378137 * Math.PI
            }
        },
        'EPSG:4326' : {
            'fullExtent': {
                'top':90,
                'left':-180,
                'bottom':-90,
                'right':180
            },
            'resolutions' : (function () {
                var resolutions = [];
                for (var i = 0; i < 21; i++) {
                    resolutions[i] = 180 / (Math.pow(2, i) * 128);
                }
                return resolutions;
            })()
        },
        'BAIDU' : {
            'resolutions' : (function () {
                var res = Math.pow(2, 18);
                var resolutions = [];
                for (var i = 0; i < 20; i++) {
                    resolutions[i] = res;
                    res *= 0.5;
                }
                resolutions[0] = null;
                resolutions[1] = null;
                resolutions[2] = null;
                return resolutions;
            })(),
            'fullExtent' : {
                'top':33554432,
                'left':-33554432,
                'bottom':-33554432,
                'right':33554432
            }
        }

    },

    _initView : function () {
        var projection = this.options['projection'];
        if (projection) {
            if (Z.Util.isString(projection)) {
                for (var p in Z.projection) {
                    if (Z.projection.hasOwnProperty(p)) {
                        var regName = Z.projection[p]['code'];
                        if (regName && regName.toLowerCase() === projection.toLowerCase()) {
                            projection = Z.projection[p];
                            break;
                        }
                    }
                }
            }
        } else {
            projection = Z.projection.DEFAULT;
        }
        if (!projection || Z.Util.isString(projection)) {
            throw new Error('must provide a valid projection in map\'s view.');
        }
        this._projection = projection;
        var resolutions = this.options['resolutions'];
        if (!resolutions) {
            var defaultView = this.defaultView[projection['code']];
            if (defaultView) {
                resolutions = defaultView['resolutions'];
            }
            if (!resolutions) {
                throw new Error('must provide valid resolutions in map\'s view.');
            }
        }
        this._resolutions = resolutions;
        var fullExtent = this.options['fullExtent'];
        if (!fullExtent) {
            fullExtent = this.defaultView[projection['code']]['fullExtent'];
            if (!resolutions) {
                throw new Error('must provide a valid fullExtent in map\'s view.');
            }
        }
        this._fullExtent = new Z.Extent(new Z.Coordinate(fullExtent['left'], fullExtent['top']),
                            new Z.Coordinate(fullExtent['right'], fullExtent['bottom']));
        //set left, right, top, bottom value
        Z.Util.extend(this._fullExtent, fullExtent);

        var a = fullExtent['right'] > fullExtent['left'] ? 1 : -1,
            b = fullExtent['top'] > fullExtent['bottom'] ? -1 : 1;
        this._transformation = new Z.Transformation([a, b, 0, 0]);
    },

    getResolutions:function () {
        return this._resolutions;
    },

    getResolution:function (z) {
        return this._resolutions[z];
    },

    getProjection:function () {
        return this._projection;
    },

    getFullExtent:function () {
        return this._fullExtent;
    },

    getTransformation:function () {
        return this._transformation;
    },

    getMinZoom:function () {
        for (var i = 0; i < this._resolutions.length; i++) {
            if (!Z.Util.isNil(this._resolutions[i])) {
                return i;
            }
        }
        return 0;
    },

    getMaxZoom:function () {
        for (var i = this._resolutions.length - 1; i >= 0; i--) {
            if (!Z.Util.isNil(this._resolutions[i])) {
                return i;
            }
        }
        return this._resolutions.length - 1;
    }

});


@@ -2659,32 +2659,218 @@
 w.');%0A        %7D%0A
+        projection = Z.Util.extend(%7B%7D, Z.projection.Common, projection);%0A        if (!projection.measureLength)%7B%0A            Z.Util.extend(projection, Z.MeasurerUtil.DEFAULT);%0A        %7D%0A
         this._pr
@@ -2896,32 +2896,57 @@
 on;%0A        var 
+defaultView,%0A            
 resolutions = th
@@ -3004,35 +3004,73 @@
 ) %7B%0A            
-var
+if (projection%5B'code'%5D) %7B%0A               
  defaultView = t
@@ -3114,24 +3114,28 @@
             
+ 
+   
 if (defaultV
@@ -3137,24 +3137,28 @@
 aultView) %7B%0A
+    
             
@@ -3195,32 +3195,50 @@
 'resolutions'%5D;%0A
+                %7D%0A
             %7D%0A  
@@ -3511,72 +3511,228 @@
     
-fullExtent = this.defaultView%5Bprojection%5B'code'%5D%5D%5B'fullExtent'%5D;
+if (projection%5B'code'%5D) %7B%0A                defaultView = this.defaultView%5Bprojection%5B'code'%5D%5D;%0A                if (defaultView) %7B%0A                    fullExtent = defaultView%5B'fullExtent'%5D;%0A                %7D%0A            %7D
 %0A   
@@ -3741,35 +3741,34 @@
        if (!
-resolutions
+fullExtent
 ) %7B%0A        
@@ -4186,24 +4186,25 @@
 t%5B'right'%5D %3E
+=
  fullExtent%5B
@@ -4256,16 +4256,17 @@
 'top'%5D %3E
+=
  fullExt

add default measure and common methods to project if it doesn't have