本人在做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();
发现遇到是中文名字的图层就不会乱码了。如果大家也遇到类似的问题,不妨像我这样做,试试看哦!