OpenLayers Googleマップをロード


もともとOpenLayers中国語ネットに投稿されていたが、交流する人は少なく、すべてがここに投稿された.
前にTileCacheから継承された実装をいくつか見ましたが、ここでも独自の実装を送り、XYZクラスから継承します.OpenLayersに触れるのは长くなくて、実际のプロジェクトの応用経験がなくて、理解できない地方があってまた各位によけいに指导することを望んで、ありがとうございます!
/* Copyright (c) 2002-2012 by fiftyk*/

/**
 * @requires OpenLayers/Layer/XYZ.js
 */

/**
 * @class
 */
OpenLayers.Layer.GMapLayer = OpenLayers.Class(OpenLayers.Layer.XYZ, {
        wrapDateLine:true,
        sphericalMercator:true,
        
        urlTpl:"&hl=zh-CN&gl=CN&src=app&x=${x}&y=${y}&z=${z}",
        
        /**
         * @constructor
         * @param {String} name
         * @param {String} url
         * @param {Object} options
         */
        initialize:function(name,url,options){
                options = OpenLayers.Util.applyDefaults({}, 
                  options);
                
                OpenLayers.Layer.XYZ.prototype.initialize.apply(this,
                  [name,url,options]);
        },
        
        getURL: function (bounds) {
        var xyz = this.getXYZ(bounds);
        var url = this.url;
        if (OpenLayers.Util.isArray(url)) {
            var s = '' + xyz.x + xyz.y + xyz.z;
            url = this.selectUrl(s, url) + this.urlTpl;
        }
        
        return OpenLayers.String.format(url, xyz);
    },
        
        destory:function(){
           this.sphericalMercator = null;
           this.urlTpl = null;
           OpenLayers.Layer.XYZ.prototype.destroy.apply(this, arguments);
        },

        clone:function(obj){
                if(obj == null){
                        obj = new OpenLayers.Layer.GMapLayer(this.name,this.url,
                         this.getOptions());
                }

                obj = OpenLayers.Layer.XYZ.prototype.clone.apply(this,[obj]);

                return obj;
        },

        getXYZ:function(bounds){
                var res = this.getServerResolution();
        var x = Math.round((bounds.left - this.maxExtent.left) /
           (res * this.tileSize.w));

        var y = Math.round((this.maxExtent.top - bounds.top) /
           (res * this.tileSize.h));

        var z = this.getServerZoom();//   Grid

        if (this.wrapDateLine) {
            var limit = Math.pow(2, z);
            x = ((x % limit) + limit) % limit;
        }

        return {'x': x, 'y': y, 'z': z};
        },

        CLASS_NAME: "OpenLayers.Layer.GMapLayer"
});

次の操作を行います.
var map = new OpenLayers.Map("map",{
                layers:[
                    new OpenLayers.Layer.GMapLayer("Google    ",
                        ["http://mt1.google.cn/vt/lyrs=s@123"]),
                    new OpenLayers.Layer.GMapLayer("Google    ",
                        ["http://mt2.google.cn/vt/imgtp=png32&lyrs=h@205000000"]),
                    new OpenLayers.Layer.GMapLayer("Google    ",
                        ["http://mt1.google.cn/vt/lyrs=m@205000000"]),
                    new OpenLayers.Layer.GMapLayer("Google    ",
                        ["http://mt1.google.cn/vt/lyrs=t@130,r@205000000"]),
                    new OpenLayers.Layer.GMapLayer("Google    ",
                        ["http://mt0.google.com/vt?lyrs=m@205000000,traffic|seconds_into_week:-1"])
                ]
                ,center:new OpenLayers.LonLat(120.30549379552448,31.55342767838905),
            });
            //      
            map.addControl(new OpenLayers.Control.LayerSwitcher());
            //    
            map.addControl(new OpenLayers.Control.OverviewMap());