0

私はGoogleマップでこのレイヤーを持っています:(getTileUrl関数内のgenerateAPIKey()関数に注意してください)

    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 関数は 1 回しか実行されません。Google getTileUrl のようなものはありますか?

4

1 に答える 1

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 キーを追加するだけです。

于 2012-06-08T07:05:04.020 に答える