本人在做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();
發現遇到是中文名字的圖層就不會亂碼了。如果大家也遇到類似的問題,不妨像我這樣做,試試看哦!