您的位置:首页 > 运维架构

关于OpenLayers的WFS地名点查询中文问题的解决

2011-07-07 16:07 477 查看
1. 做个响应按钮:
<input type="submit" value="查询" id="query" onclick="query()"/>
2. 写JS代码:
(1) get方式请求:
function query(){
var str="碧桂园小区翠林环玉苑46栋03号";
new OpenLayers.Request.GET( {
url : "http://localhost:8080/geoserver/ows?service=WFS&request=GetFeature",
params: {
typeName: "cite:tz_zd_WGS84",
filter:"<Filter><PropertyIsEqualTo><PropertyName>TDZL</PropertyName><Value>"+encodeURI(encodeURI(str))+"</Value></PropertyIsEqualTo></Filter>"
},
callback : handler
});
}
function handler(req){
var GML = req.responseXML;
alert(GML.getElementsByTagName("cite:TDZL")[0].childNodes[0].nodeValue);
}
无法解决中文传输的问题

(2)post方式请求:
function query(){
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'>"
+ "<ogc:Filter>"
+ "<ogc:PropertyIsEqualTo>"
+ "<ogc:PropertyName>TDZL</ogc:PropertyName>"
+ "<ogc:Literal>碧桂园小区翠林环玉苑46栋03号</ogc:Literal>"
+ "</ogc:PropertyIsEqualTo>"
+ "</ogc:Filter>"
+ "</wfs:Query>"
+ "</wfs:GetFeature>";

var request = OpenLayers.Request.POST( {
url : "http://localhost:8080/geoserver/wfs?",
data : xmlPara,
callback : handler
});
}
function handler(req){
var GML = req.responseXML;
alert(GML.getElementsByTagName("cite:TDZL")[0].childNodes[0].nodeValue);
}
这时服务器端就可以传回“碧桂园小区翠林环玉苑46栋03号”,表示查询成功。
3. 一般我们用到模糊查询会更多一点,这里只需要做一些改动
var str = txt.value; //这里接受一个输入框的信息
....
+ "<ogc:Filter>"
+ "<ogc:PropertyIsLike wildCard='*' singleChar='.' escape='!'>"
+ "<ogc:PropertyName>TDZL</ogc:PropertyName>"
+ "<ogc:Literal>*"+str+"*</ogc:Literal>"
+ "</ogc:PropertyIsLike>"
+ "</ogc:Filter>"
....
这里的“*”表示前后都有数据,这样可以做到更人性化了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: