2012-06-07 76 views
0

我有这一层与谷歌地图(注:给getTileUrl函数内generateAPIKey()函数)的OpenLayers层点菜谷歌地图ImageMapType

var options ={ 
     center:new google.maps.LatLng(somelat,somelon), 
     zoom:14, 
     disableDefaultUI:true, 
     mapTypeId: google.maps.MapTypeId.ROADMAP, 
     minZoom:11, 
     maxZoom:16, 
    }; 

    var map = new google.maps.Map(document.getElementById('map_canvas'),options); 

    var myLayerOptions = { 
     getTileUrl: function(coord, zoom) { 
     return 'http://localhost/mylayer/'+zoom+'/'+coord.x+'/'+coord.y+'.png&apikey='+ generateAPIKey(); 
     }, 
     tileSize: new google.maps.Size(256, 256), 
     isPng: true, 
     opacity:1.0 
    }; 
    var myLayerMapType = new google.maps.ImageMapType(myLayerOptions); 
    map.overlayMapTypes.insertAt(0, myLayerMapType); 

所以我的主要问题是,我有一个动态API密钥我正在使用的服务,与开放层我有这个:

var mylayer = new OpenLayers.Layer.XYZ(
    "mylayer", 
    [ 
     "http://localhost/mylayer/${z}/${x}/${y}.png&apikey='+ generateAPIKey() 
    ], { 
     sphericalMercator: true, 
     wrapDateLine: true, 
     transitionEffect: "resize", 
     buffer: 1, 
     numZoomLevels: 17 
    } 
); 

var map = new OpenLayers.Map({ 
    div: "map_canvas", 
    layers: [mylayer], 
    controls: [ 
     new OpenLayers.Control.Attribution(), 
     new OpenLayers.Control.Navigation({ 
      dragPanOptions: { 
       enableKinetic: true 
      } 
     }), 
     new OpenLayers.Control.Zoom(), 
     new OpenLayers.Control.Permalink({anchor: true}) 
    ], 


     center: [somelat,somelon], 
     zoom: 14 

}); 

我明白什么是错的,generateAPIKey函数只执行一次。有没有像Google getTileUrl?

回答

2

没错,XYZ-层方法getURL被调用为每瓦,看起来像这样:

/** 
    * Method: getURL 
    * 
    * Parameters: 
    * bounds - {<OpenLayers.Bounds>} 
    * 
    * Returns: 
    * {String} A string with the layer's url and parameters and also the 
    *   passed-in bounds and appropriate tile size specified as 
    *   parameters 
    */ 
    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); 
     } 

     return OpenLayers.String.format(url, xyz); 
    } 

只需重写此方法并添加您的API密钥。