Openlayers 3 处理来自WMS服务器的异常响应
我尝试使用以下代码从wms服务器获取地图图像Openlayers 3 处理来自WMS服务器的异常响应,openlayers-3,Openlayers 3,我尝试使用以下代码从wms服务器获取地图图像 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Playing with fis broker berlin</title> <link rel="stylesheet" href="../../libs/ol3/css/ol.css"/> <link
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Playing with fis broker berlin</title>
<link rel="stylesheet" href="../../libs/ol3/css/ol.css"/>
<link rel="stylesheet" href="../../css/samples.css"/>
</head>
<body>
<div id="map" class="map"></div>
<script src="../../libs/ol3/js/ol.js"></script>
<script>
var imageSource = new ol.source.ImageWMS({
url: 'http://fbinter.stadt-berlin.de/fb/wms/senstadt/k_dtk50',
params: {
'LAYERS': '0',
'REQUEST': 'GetMap',
'STYLES': ['default'],
'SRS': 'EPSG:4326',
'BBOX': [13.079, 52.3284, 13.7701, 52.6877],
'WIDTH': '256',
'HEIGT': '256',
'FORMAT': 'jpeg'
}
})
imageSource.on('imageloaderror', function (event) {
var imageState = event.target.getState()
var request = event.image.n
console.log('imageloaderror, state = ' + imageState)
console.log('request: ' + request)
})
var imageLayer = new ol.layer.Image({
opacity: 0,
source: imageSource
})
var view = new ol.View({
center: [13.4297269, 52.4594867],
zoom: 10
})
var map = new ol.Map({
target: 'map',
layers: [imageLayer],
view: view
})
</script>
</body>
</html>
与fis经纪人柏林合作
var imageSource=新的ol.source.ImageWMS({
网址:'http://fbinter.stadt-berlin.de/fb/wms/senstadt/k_dtk50',
参数:{
“层”:“0”,
“请求”:“GetMap”,
“样式”:[“默认设置”],
‘SRS’:‘EPSG:4326’,
‘BBOX’:[13.079,52.3284,13.7701,52.6877],
“宽度”:“256”,
“HEIGT”:“256”,
“格式”:“jpeg”
}
})
imageSource.on('imageloaderror',函数(事件){
var imageState=event.target.getState()
var request=event.image.n
console.log('imageloaderror,state='+imageState)
console.log('请求:'+请求)
})
var imageLayer=新ol.layer.Image({
不透明度:0,
来源:imageSource
})
变量视图=新的ol.view({
中间:[13.4297269,52.4594867],
缩放:10
})
var map=新ol.map({
目标:“地图”,
图层:[imageLayer],
视图:视图
})
ol3无法显示图像,因为wms发回的是xml异常报告,而不是jpeg数据
不允许使用crs:EPSG:3857。
在java控制台上,我们看到消息
资源被解释为图像,但使用MIME类型text/xml传输
我理解,图像源设置不正确。这需要我进一步调查但我的问题是:
如何通过ol脚本捕获来自wms服务器的消息crs is not allowed:EPSG:3857和任何其他错误消息 您需要使用XHR加载图像并获取异常文本,请参阅此线程以获得一些启示:
谢谢bartvde,但我不想自己做xhr,因为这应该由ol完成,而且已经完成了。但是如果wms服务器出现错误,我想提出这个问题。虽然我通过imageloaderror发现了钩子,从而意识到了一个错误,但我错过了对消息资源的访问,该消息资源被解释为Image,但使用MIME类型text/xml传输……OpenLayers不会通过XHR请求该图像。获取错误文本的唯一方法是通过XHR执行请求。或者,如果WMS支持此功能,则应切换到图像中的异常。
imageLoadFunction: function(image, src) {
progress('start');
var img = image.getImage();
if (typeof window.btoa == 'function') {
var xhr = new XMLHttpRequest();
xhr.open('GET', src, true);
xhr.responseType = 'arraybuffer';
xhr.onload = function(e) {
if (this.status == 200) {
var uInt8Array = new Uint8Array(this.response);
var i = uInt8Array.length;
var binaryString = new Array(i);
while (i--) {
binaryString[i] = String.fromCharCode(uInt8Array[i]);
}
var data = binaryString.join('');
var type = xhr.getResponseHeader('content-type');
if (type.indexOf('image') === 0) {
img.src = 'data:' + type + ';base64,' + window.btoa(data);
} else {
error($.parseJSON(data));
}
} else {
error(this.statusText);
}
progress('end');
};
xhr.send();
} else {
img.onload = function() {
progress('end');
};
img.onerror = function() {
progress('end');
error();
};
img.src = src;
}
}
})