现在的位置: 首页 > 综合 > 正文

关于超图WMS服务中getCapabilities的问题

2012年08月22日 ⁄ 综合 ⁄ 共 1840字 ⁄ 字号 评论关闭

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

 

抱歉!评论已关闭.