TileArcGISRest
和 ImageArcGISRest
比较
TileArcGISRest
是以地图瓦片的方式加载显示地图,地图一片一片加载显示。
ImageArcGISRest
是将当前地图视窗范围里的一次性加载显示。
注意: 图层服务矢量数据较多的情况,TileArcGISRest
加载显示效果较好。但是,如果矢量图形是带 label
的渲染样式,同时矢量图形跨了多个瓦片范围,服务返回的瓦片图片上均带有 label
。而矢量图形又多,ImageArcGISRest
整个加载耗时较长,看情况选择方案。
图斑动态过滤
不论是 TileArcGISRest
还是 ImageArcGISRest
,都提供了一个 params
参数,参数值同 ArcGIS REST APIs - export
用来过滤要渲染的矢量数据。
查看请求可知都是以 get
请求的 ArcGIS REST APIs
,这就存在了一个问题,参数过多导致 url 过长的问题。1
URL 过长解决方案
参数过长的时候,我们可以提供 imageLoadFunction
或 tileLoadFunction
参数,用我们指定的方法去加载图片数据。
function loadFunction(image,src) {
var xhr = new XMLHttpRequest();
xhr.responseType = "blob";
xhr.addEventListener("loadend", function() {
var data = this.response;
if (data) {
var img = image.getImage();
var url = URL.createObjectURL(data);
img.addEventListener("loadend", function() {
URL.revokeObjectURL(url);
});
img.src = url;
}
});
var split = src.split("?");
xhr.open("POST", split[0]);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send(split[1]);
}
new TileLayer({
source: new TileArcGISRest({
url: 'url',
params: {},
tileLoadFunction: loadFunction
})
})
new ImageLayer({
source: new ImageArcGISRest({
url: 'url',
params: {},
imageLoadFunction: loadFunction
})
})