以下方法描述了对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文不够好吧~~),朋友们可以互相讨论一下~~
分享到:
相关推荐
geoserver定义了多个协议,本例子运用wfs查询中的getFeature查询出一张表中的某条记录是否包含指定的点的集合,如果包含则返回该条记录的id。
利用openlayers加载geoserver wfs服务发布的矢量图层。
geoserver中wfs-t 编辑demo 包含添加 更新 删除 简单sample code
请问在openlayers中如何删除Layer中的marker 3 在层中加了一个标记怎么永久的存到地图上 3 OpenLayers 如何设死地图边界 3 谁写过openlayers解析xml 3 openlayer.popup 3 OpenLayers 怎么做字段标注 4 字段标注不是...
一段简单代码描述了用geoserver wfs服务获取图层数据并返回geojson数据
geoserver配置及openlayers应用
Java+OpenLayers3+GeoServer 二次开发应用
使用openLayers调用geoServer发布的地图数据,并实现放大、缩小、移动、测距、测面积、弹出信息等功能; 需要修改geoServer路径,我的是安装在本地的; 还有部分功能未完成;
利用自己发布的geoserver发布的wfs,自己写的openlayers去访问,需要代理,此处是代理的文件
此代码主要是编写了通过geoServer发布数据服务,postGis作为空间数据的数据库,通过openlayer完成几个数据的增加,修改,删除,查询,包括属性查询,并且提供元数据测试。
该资源适合初级同学对geosever图层进行编辑的功能,可以下载使用,该资源能满足openlayers对geoserver图层的查询、编辑、新增,删除等操作
Geoserver与OpenLayers配置
geoserver+postgis+openlayers 空间要素的增删改功能,具体还可参考https://blog.csdn.net/rrrrroy_Ha/article/details/90904465
GeoServer可解析的shp全国省市县空间数据,直接使用postgis导入postgresSQL就可以通过GeoServer绘制地图
次程序是openlayers和geoserver的一个demo程序,可以实现在地图文件上编辑,修改,新增 区域,并保存,可以在地图区域上,标点,画多边形区域
geoserver与OpenLayers配置
百度文库中下载过来的,很值得帮助,对开发有很大的作用。。。。。。
1,geoserver:地图服务器, 2,map_shp:地图shp 数据 (全国省界+县道) 3,GeoserverToolDemo: a绘点 b点击地图街道选中要素 c框选要素。
openlayer3加载geoserver发布的WFS服务,并通过openlayers中的line string实现人/车辆移动的轨迹信息