加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

OpenLayers+Geoserver点要素,获取查询结果

发布时间:2020-12-12 14:34:05 所属栏目:MsSql教程 来源:网络整理
导读:在Geoserver中用SLD配置点要素的样式用图片表现时,订阅map的单击事件,往往会发生点击渲染图片无效,只有在单击点要素的时候才能触发事件。解决方案如下:(假设SLD配置文件中图片大小设为12px。) (1)订阅MAP的单击事件: map.events.register('click',m

在Geoserver中用SLD配置点要素的样式用图片表现时,订阅map的单击事件,往往会发生点击渲染图片无效,只有在单击点要素的时候才能触发事件。解决方案如下:(假设SLD配置文件中图片大小设为12px。)

(1)订阅MAP的单击事件:

map.events.register('click',map,function (e) {
???? // 以当前点击点的坐标作为中心,图片大小一半为"半径",构造一BOX,

???? // 应注意构造BOX的两点的关系,我这里采用EPSG:4326--》左下角为大,右上角为小

?????// 得到当前点的坐标,生成box
?????var lonlatMin = map.getLonLatFromPixel(new OpenLayers.Pixel(e.xy.x+6,e.xy.y-6));
?????var lonlatMax = map.getLonLatFromPixel(new OpenLayers.Pixel(e.xy.x-6,e.xy.y+6));
?????var strBBOX = lonlatMax.lon + "," +
?????????lonlatMax.lat + "," +
?????????lonlatMin.lon + "," +
?????????lonlatMin.lat + ",EPSG:4326";?? // 注意投影参数
?????window.alert(strBBOX);
var params = {
??????REQUEST: "GetFeature",
????? versiion: "1.1.0",

????? // 请求的图层,可以多图层,以逗号分隔,第一个排在最上面,后面的依次往下排列

????? // 多图层时会先检测最上面的图层,无附合条件的再依次往下检测?
??????typeName: "topp:jinggai",
????? // 不写特定的propertyName时,会获得全部的属性

????? // 一般我们是获得FID再进行相关查询,有以下两种方法获得:

????? // (1)可以通过propertyName:"the_geom",然后在setHTML中通过features[feat].FID获得

????? // (2)也可以通过获得全部属性,然后处理获得FID

??????//propertyName: "FID",

????? // 记得采用GML2输出方式,才能使用OpenLayers.Format.GML().read()进行处理
??????outputFormat: "GML2",
??????BBOX: strBBOX
};
OpenLayers.loadURL("http://localhost:8080/geoserver/wfs",params,this,setHTML,setHTML);
OpenLayers.Event.stop(e);
});

function setHTML(response){

//获得要素结果集

??? g =? new OpenLayers.Format.GML();
????features = g.read(response.responseText);

//遍历要素集

????for(var feat in features) {

?????? // 获得FID属性
?????? nfid = features[feat].fid;

????? // 访问属性数据:features[feat].attributes.id -- id 为自定义的属性名

??????// 判断是哪一层的要素
?????? if(nfid.indexOf("jinggai") != -1){

??????? // 通过FID请求非空间属性信息
??????? //RequestDevInfo(nfid);

??????? //这里可以通过nfid进行属性数据查询,我们项目中用Sqlserver存储要素属性数据,通过fid关联

??????? // 当然也可以通过上面说的features[feat].attributes.xxx-获得存储在要素中的属性数据
??????? showJinggaiInfo(nfid);
??????? break;
?????}

}

?注:此方法通过WFS::GetFeature方法进行要素查询,也可以用WMS::GetFeatureInfo进行,Geoserver中默认用wfs::GetFeatureInfo方法获得.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读