SuperMap二维iClient客户端如何添加自定义请求头(二)
本文已同步更新于简书文章
在前面的文章已经介绍了和iServer有交互的功能接口如何单个以及全局设置请求头,但是地图瓦片请求相对特殊一点,不走之前的设置,下面就具体看看各个地图框架里面如何设置的 ####1.Leaflet
L.TileLayer.include({
createTile: function(coords, done) {
var tile = document.createElement(img);
L.DomEvent.on(tile, load, L.Util.bind(this._tileOnLoad, this, done, tile));
L.DomEvent.on(tile, error, L.Util.bind(this._tileOnError, this, done, tile));
if (this.options.crossOrigin || this.options.crossOrigin === ) {
tile.crossOrigin = this.options.crossOrigin === true ? : this.options.crossOrigin;
}
tile.alt = ;
tile.setAttribute(role, presentation);
var xhr = new XMLHttpRequest();
xhr.responseType = blob;
xhr.addEventListener(loadend, function(evt) {
var data = this.response;
if (data !== undefined) {
tile.src = URL.createObjectURL(data);
} else {
tile.setState(error);
}
});
xhr.addEventListener(error, function() {
tile.setState(error);
});
xhr.open(GET, this.getTileUrl(coords));
xhr.setRequestHeader(apptoken, aaaa);
xhr.send();
return tile;
}
});
L.supermap.tiledMapLayer(url).addTo(map);
####2.OpenLayers
var layer = new ol.layer.Tile({
source: new ol.source.TileSuperMapRest({
url: url,
wrapX: true,
tileLoadFunction: function (tile, src) {
var xhr = new XMLHttpRequest();
xhr.responseType = blob;
xhr.addEventListener(loadend, function (evt) {
var data = this.response;
if (data !== undefined) {
tile.getImage().src = URL.createObjectURL(data);
} else {
tile.setState(error);
}
});
xhr.addEventListener(error, function () {
tile.setState(error);
});
xhr.open(GET, src);
xhr.setRequestHeader(apptoken, aaaa);
xhr.send();
}
}),
projection: EPSG:4326
});
map.addLayer(layer);
####3.MapboxGL
var map = new mapboxgl.Map({
container: map, // container id
style: {
version: 8,
sources: {
raster-tiles: {
attribution: attribution,
type: raster,
tiles: [
host +
/iserver/services/map-china400/rest/maps/China/zxyTileImage.png?z={z}&x={x}&y={y}
],
tileSize: 256
}
},
layers: [
{
id: simple-tiles,
type: raster,
source: raster-tiles,
minzoom: 0,
maxzoom: 22
}
]
},
transformRequest: function (url, resourceType) {
return {
url: url,
headers: { apptoken: aaaa }
};
},
center: [120.143, 30.236], // starting position
zoom: 3 // starting zoom
});
####4.Classic
SuperMap.Tile.CanvasImage.prototype.loadTileImage=function(){
var me = this,
image = new Image();
image.firstInView = true;
me.lastImage = image;
var context = {
image: image,
tile: me,
viewRequestID: me.layer.map.viewRequestID,
newImgTag: me.newImgTag
};
var onLoadFunctionProxy = function() {
if(this.tile.newImgTag === this.newImgTag){
this.tile.onLoadFunction(this);
}
};
var onErrorFunctionProxy = function() {
this.tile.onErrorFunction(this);
};
image.onerror = SuperMap.Function.bind(onErrorFunctionProxy, context);
//跨域请求瓦片,暂时只支持非重定向的SUPERMAP_REST服务的地图
if(this.layer.useCORS&&!SuperMap.Util.isInTheSameDomain(me.url)&&(me.url.indexOf("redirect=true")<0)&&((SuperMap.Layer.SimpleCachedLayer && me.layer instanceof SuperMap.Layer.SimpleCachedLayer)||
(SuperMap.Layer.TiledDynamicRESTLayer && me.layer instanceof SuperMap.Layer.TiledDynamicRESTLayer))){
image.crossOrigin="anonymous";
}
//添加请求头
var xhr = new XMLHttpRequest();
xhr.responseType = blob;
xhr.open(GET, me.url);
xhr.setRequestHeader(apptoken, aaaa);
xhr.onreadystatechange = e => {
if (xhr.readyState == XMLHttpRequest.DONE && xhr.status == 200) {
image.src = URL.createObjectURL(xhr.response);
image.onload = SuperMap.Function.bind(onLoadFunctionProxy, context);
}
};
xhr.send();
}
