利用Geoserver的wfs BBOX范围查询及Openlayers解析GML,添加Marker收藏

本文介绍了如何利用Geoserver的WFS服务进行BBOX范围查询,并通过OpenLayers在地图上显示查询结果。重点讨论了1.0.0版本的WFS查询过滤器格式,以及使用Ajax发送请求到Geoserver的过程。同时展示了如何使用OpenLayers的GML解析器读取响应数据,并创建Marker展示在地图上。
以下方法描述了对Geoserver进行范围查询,并将查询结果在用OpenLayers在地图上画出的实现方法。

首先wfs查询分为1.0.0和1.1.0两个版本,这两个版本的查询filter格式是不一样的,我是以1.0的格式写的,各位朋友可以研究一下1.1写法。

另外向Geoserver服务器发送请求,这里用到了prototype,在这里的prototype只是简单的发送了一个ajax请求。

比如要进行一个简单的范围查询,这里需要两个点来确定一下矩形,如:116.374614,39.949336和116.391498,39.955299

还要指定一个图层,比如:MyGis下的type图层,还有就是确定要返回的字段,如:NAME和TYPE,

整个的查询xml字符串如下:

<wfs:GetFeature service='WFS' version='1.0.0' outputFormat='GML2'

xmlns:topp='http://www.openplans.org/topp' xmlns:wfs='http://www.opengis.net/wfs'

xmlns:ogc='http://www.opengis.net/ogc' xmlns:gml='http://www.opengis.net/gml'

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-basic.xsd'>

<wfs:Query typeName='MyGis:type'>

<wfs:PropertyName>MyGis:NAME</wfs:PropertyName>

<wfs:PropertyName>MyGis:TYPE</wfs:PropertyName>

<ogc:Filter><ogc:BBOX><ogc:PropertyName>the_geom</ogc:PropertyName>

<gml:Box srsName='http://www.opengis.net/gml/srs/epsg.xml#4326'>

<gml:coordinates>116.374614,39.949336 116.391498,39.955299</gml:coordinates>

</gml:Box></ogc:BBOX></ogc:Filter>

</wfs:Query></wfs:GetFeature>

Geoserver wfs查询的地址为:http://localhost:8080/geoserver/wfs

于是用Ajax.Request,发送一个ajax请求,代码如下:

var myAjax = new Ajax.Request(

GIS_SERVER_URL,

{contentType: "application/xml", method: 'post', postBody: xmlPara, onComplete: showResponse}

);

以上参数中: GIS_SERVER_URL为Geoserver wfs查询的地址,xmlPara为查询的xml字符串,showResponse为查询返回后的处理函数,

showResponse函数如下:

function showResponse(req){

//openlayers的GML解析器

var gmlParse = new OpenLayers.Format.GML();

var features = gmlParse.read(req.responseText);

var icon = new OpenLayers.Icon('images/pp.gif');

var feature, lonlat, marker;

for(var feat in features){

feature = features[feat];

lonlat = new OpenLayers.LonLat(feature.geometry.x,feature.geometry.y);

marker = new OpenLayers.Marker(lonlat,icon.clone());

//此处注册了鼠标的点击事件,可以在mousedown中做些事情

marker.events.register("mousedown", marker, mousedown);

//markers为OpenLayers.Layer.Markers 画点的层

markers.addMarker(marker);

}

}

以上便完成wfs查询并用openlayers标画结果的任务。

另外wfs的GetFeature还有许多查询功能,在Geoserver的样例查询中,有一些例子,比如主键查询,Between查询,更全面的功能就要看OGC WFS的白皮书了,filter可以实现如sql语句中的功能,不过白皮书中的讲解也不是很详细(可能是自己E文不够好吧~~),朋友们可以互相讨论一下~~
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值