基于OpenLayers 的WFS模糊查询优化

本文介绍了一种通过指定featureName字段来优化WFS查询的方法,实现了快速获取地理信息系统中的特定要素,并展示了具体的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路:先通过指定一个featureName字段,在全表查询时,返回的数据就会比较小,这样会提高一些速度。返回数据中,我们取出featureid的值,再通过url进行GML格式的解析,从而得到查询后返回的全字段GML信息。

实现代码:

var filter = new OpenLayers.Filter.Logical({
				type: OpenLayers.Filter.Logical.AND,		
				filters: [
				 new OpenLayers.Filter.Spatial({
				 type: OpenLayers.Filter.Spatial.INTERSECTS, //INTERSECTS, //相交OK
				 value: gemetry,
				 projection: "EPSG:4326"
				 }),
				 new OpenLayers.Filter.Comparison({//比较操作符
				 type: OpenLayers.Filter.Comparison.LIKE,
				 property: "cite:TDZL",
				 value: "*"+str+"*"
				 })
				 ]
				});
				var filter_1_0 = new OpenLayers.Format.Filter.v1_0_0(); 
			var xml = new OpenLayers.Format.XML(); 
			var xmlPara = "<?xml version='1.0' encoding='UTF-8'?>"
				+ "<wfs:GetFeature service='WFS' version='1.0.0' "
				+ "xmlns:wfs='http://www.opengis.net/wfs' "
				+ "xmlns:gml='http://www.opengis.net/gml' "
				+ "xmlns:ogc='http://www.opengis.net/ogc' "
				+ "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' "
				+ "xsi:schemaLocation='http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/wfs.xsd'>"
				+ "<wfs:Query typeName='cite:tz_zd_WGS84' srsName='EPSG:4326' >"
                +"<wfs:PropertyName>cite:TDZL</wfs:PropertyName>"
				+ xml.write(filter_1_0.write(filter))
                + "</wfs:Query>"
				+ "</wfs:GetFeature>";

			var request = OpenLayers.Request.POST( {
					url : "http://localhost:8080/geoserver/wfs?",
					data : xmlPara,			
					callback : handler
				});
				
			}
			function handler(req){
			var xmlDoc = req.responseXML;
			str= text.value;
			theNodes = xmlDoc.getElementsByTagName("cite:TDZL");
			fid = xmlDoc.getElementsByTagName("cite:tz_zd_WGS84");
			if(theNodes[0]==null){alert("未查到信息")}  
			  for (i=0;i < theNodes.length; i++ ){  
			  var fullName=theNodes[i].childNodes[0].nodeValue;
					if (fullName.indexOf(str) > -1 ){				
						var x = fid[i].attributes;
						var gml = "http://localhost:8080/geoserver/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=cite:tz_zd_WGS84&featureid=" +x.getNamedItem("fid").nodeValue;
						OpenLayers.loadURL(gml,'', this, caller);
						selectArea = new OpenLayers.Layer.GML("GML",gml,{style:{fillColor: "green"}});
					    map.addLayer(selectArea);		
						
					}
					
				}
		    }
			function caller(data){
			 g =  new OpenLayers.Format.GML();
             features = g.read(data.responseText);
			var result;
			result ="<br>"
			result += "<ul><li><b>公司名: <\/b>"+features[0].attributes.QLR+"<\/li><\/ul>";
			result +="<ul><li><b>地名: <\/b>"+features[0].attributes.TDZL+"<\/li><\/ul>";
			result +="<ul><li><b>用地类型: <\/b>"+features[0].attributes.BZ+"<\/li><\/ul>";
			result +="<ul><li><b>面积: <\/b>"+features[0].attributes.SHAPE_Area+"<\/li><\/ul>";;
			document.getElementById("result").innerHTML =result;
			 point = features[0].geometry.getCentroid()
			 map.setCenter(new OpenLayers.LonLat(point.x, point.y),15);
		   }

这样,测试一个城市数据返回数据的时间控制在3秒内,符合实际需求。

 

 


转载于:https://www.cnblogs.com/zhang88lei/archive/2011/07/18/3244092.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值