OpenLayers+Geoserver点要素,获取查询结果
在Geoserver中用SLD配置点要素的样式用图片表现时,订阅map的单击事件,往往会发生点击渲染图片无效,只有在单击点要素的时候才能触发事件。解决方案如下:(假设SLD配置文件中图片大小设为12px。) (1)订阅MAP的单击事件: map.events.register('click',map,function (e) { ???? // 应注意构造BOX的两点的关系,我这里采用EPSG:4326--》左下角为大,右上角为小 ?????// 得到当前点的坐标,生成box ????? // 请求的图层,可以多图层,以逗号分隔,第一个排在最上面,后面的依次往下排列 ????? // 多图层时会先检测最上面的图层,无附合条件的再依次往下检测? ????? // 一般我们是获得FID再进行相关查询,有以下两种方法获得: ????? // (1)可以通过propertyName:"the_geom",然后在setHTML中通过features[feat].FID获得 ????? // (2)也可以通过获得全部属性,然后处理获得FID ??????//propertyName: "FID", ????? // 记得采用GML2输出方式,才能使用OpenLayers.Format.GML().read()进行处理 function setHTML(response){ //获得要素结果集 ??? g =? new OpenLayers.Format.GML(); //遍历要素集 ????for(var feat in features) { ?????? // 获得FID属性 ????? // 访问属性数据:features[feat].attributes.id -- id 为自定义的属性名 ??????// 判断是哪一层的要素 ??????? // 通过FID请求非空间属性信息 ??????? //这里可以通过nfid进行属性数据查询,我们项目中用Sqlserver存储要素属性数据,通过fid关联 ??????? // 当然也可以通过上面说的features[feat].attributes.xxx-获得存储在要素中的属性数据 } ?注:此方法通过WFS::GetFeature方法进行要素查询,也可以用WMS::GetFeatureInfo进行,Geoserver中默认用wfs::GetFeatureInfo方法获得. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |