1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > OL4通过ajax加载geoserver中WMS的GetFeatureInfo实现点击查询(解决跨域问题)

OL4通过ajax加载geoserver中WMS的GetFeatureInfo实现点击查询(解决跨域问题)

时间:2018-11-03 14:52:42

相关推荐

OL4通过ajax加载geoserver中WMS的GetFeatureInfo实现点击查询(解决跨域问题)

有时候我们不想加载WFS服务来获取要素的属性信息,我们就想加载WMS或者WMTS获取属性信息,geoserver客户端给我提供一种实现是返回html,这种方式受限太大,如果能返回json格式的数据那多好!这样我们就可以自己定义展示的效果了,在这里我首先想到的是通过点击事件配合Ajax 来加载WMS的GetFeatureInfo,但是发现总是提示跨域问题,明明我都已经配置了跨域,怎么还会报这个错呢?后来通过jsonp格式解决,但是又开始报Uncaught ReferenceError: parseResponse is not defined,差个各种资料最后通过format_options参数解决问题,具体东西见下文:

一、WMS的GetFeatureInfo介绍

1、功能

获取点击对象的属性信息,类似于WFS的 GetFeature,但是在输入和输出格式上受限,官方还是推荐WFS

2、主要的参数

详细见WMS详细介绍

3、关于输出格式(这里我们输出的json格式)

但是要解决跨域的问题需要用到jsonp,那么返回信息的格式不能用application/json而要用text/javascript

详细参考官网点击这里查询格式说明

二、完整demo示例:

<!DOCTYPE html><html><head><meta charset="utf-8" /><title></title><link href="../script/ol4/ol.css" rel="stylesheet" /><script src="../script/ol4/ol.js"></script><script src="../../Scripts/jquery-3.3.1.min.js"></script><style>#map {width:100%;height:100%;}</style></head><body><div id="map"></div><script type="text/javascript">$(function () {var bounds = [89.1716461181641, 6.08244466781616,135.314254760742, 53.7941207885742];var format = 'image/png';var view = new ol.View({projection: "EPSG:4326",center: [117, 39],zoom: 4})var WMSsource = new ol.source.ImageWMS({ratio: 1,url: 'http://localhost:8888/geoserver/cite/wms',params: {'FORMAT': format,'VERSION': '1.1.1',"LAYERS": 'cite:bou2_4p',"exceptions": 'application/vnd.ogc.se_inimage',}});var WMSLayer = new ol.layer.Image({source: WMSsource});var map = new ol.Map({target: "map",layers: [WMSLayer],view: view});map.on("click", function (evt) {var viewResolution = view.getResolution();var urls = WMSsource.getGetFeatureInfoUrl(evt.coordinate, viewResolution, view.getProjection(),{ 'INFO_FORMAT': 'text/javascript', 'FEATURE_COUNT': 50 ,format_options: 'callback: getJson'});console.log(urls);$.ajax({type: "POST",url:urls,dataType: 'jsonp',jsonpCallback: 'getJson',success: function (data) {console.log(data.features);}});});});</script></body></html>

三、效果图

四、踩坑

1、要通过jsonp来解决跨域问题,url参数INFO_FORMAT为text/javascript即为’INFO_FORMAT’: ‘text/javascript’

2、Ajax要设置jsonpCallback参数即:jsonpCallback: ‘getJson’

3、url参数中要设置:callback 即为’callback: getJson’ 其中getJson是函数名,可以随便起,但是要和jsonpCallback函数保持一致

更多采坑可见点我查看更多踩坑

参考:

1、文章1

2、文章2

3、文章3

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。