本人在做WMS服务聚合的时候,遇到了一个问题,整个过程是这样的:
1.先利用ArcServer发布了一个地图的WMS服务,
2.然后利用超图提供的 客户端聚合范例-WMS 这个DEMO,把ArcGIS的WMS地址输入到地址中,
3.然后点击下一步,在显示图层名字中,中文名字的图层都出现了乱码现象。
查看了一下相关的页面代码和js,最后发现了估计是超图提供的js方法中的SuperMap.Utility.getXmlHttpRequest();有问题。
超图提供的源代码如下:
/**
* 获取元数据信息
*/
function getCapabilities(){
hideElement("divWMSLayerSettings");
var url = document.getElementById("txtWMSAddress").value;
var msg = "正在获取元数据信息";
msg += url;
document.getElementById("divMsg").innerHTML = msg ;
showElement("divMsg");
var url = document.getElementById("txtWMSAddress").value;
if( url && url.trim() != "" ) {
if(url.indexOf("?") != -1 ){
url += "&";
}else{
url += "?";
}
url += "SERVICE=WMS&VERSION=1.1.1&REQUEST=GetCapabilities";
//获取服务的元数据
var xhr = SuperMap.Utility.getXmlHttpRequest();
url = getContextPath() + "ajaxhandler?url=" + escape(url);
xhr.open("GET", url, true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=gb2312");
var handler = onGetCapabilitiesComplete;
var errorHandler = onGetCapabilitiesError;
xhr.onreadystatechange = function () {
if(xhr.readyState==4){
if(xhr.status==200){
var xmldoc;
if (window.ActiveXObject) {
xmldoc = new ActiveXObject("microsoft.XMLDOM");
} else if (document.implementation&&document.implementation.createDocument) {
xmldoc = document.implementation.createDocument("","doc",null);
}
xmldoc.async = false;
if(window.ActiveXObject) {
xmldoc.loadXML(xhr.responseText);
} else {
var parser = new DOMParser();
xmldoc = parser.parseFromString(xhr.responseText, "text/xml");
}
handler(xhr.responseText);
}else{
errorHandler();
}
}
}
xhr.send(null);
}else{
alert("WMS服务地址不能为空");
onPre();
}
};
后来,我自己添加了一个getXMLHttpRequest的方法,如下
function getXMLHttpRequest(){
var xhr = false;
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest();
}
if(window.ActiveXObject){
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
return xhr;
}
然后把原来代码中,第20行的:var xhr = SuperMap.Utility.getXmlHttpRequest(); 改为 var xhr = getXMLHttpRequest();
发现遇到是中文名字的图层就不会乱码了。如果大家也遇到类似的问题,不妨像我这样做,试试看哦!