2012-06-07 91 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密鑰。