openlayers的popup实现

这篇博客详细介绍了如何在OpenLayers地图上实现在点击点后弹出信息框显示详细内容,涉及到的关键技术包括解决跨域问题。通过理解同源策略和跨域访问的方法,如JSONP、Proxy和CORS,博主最终选择了使用Proxy方式实现跨域。文中还分享了自定义地图坐标系(EPSG:111111)的设定,以及在Geoserver中配置和转化坐标系的方法。
摘要由CSDN通过智能技术生成

功能需求如下:

在一张地图上,我们希望点击相应的点之后,能够弹框显示该点的具体信息。

最终效果如下:(由于某些原因,有关信息不予显示)



首先,要完成该图的效果,要首先保证你了解了下面的相关知识:

1.如果你的openlayers工程和Geoserver部署在不同的服务器上,则,你需要解决跨域的问题。

无论你是通过WMS的GetFeatureInfo或者是通过WFS的GetFeature来实现,最终都是以Ajax的方式来发起请求。

下图是用firebug来捕捉点击事件,可以看出,X-Requested-With:XMLHttpRequest

所以该请求通过Ajax方式发起。

讲到这个地方,有必要温习一下几个知识点:同源策略,跨域访问。

注:参考 袭烽-《同源策略和跨域访问 》 该文章写的很好很全,建议读者抽空细读。

(1)何谓同源策略:(Same origin policy)
URL由协议、域名、端口和路径组成,如果两个URL的协议、域名和端口相同,则表示他们同源。
浏览器的同源策略,限制了来自不同源的"document"或脚本,对当前"document"读取或设置某些属性。 (白帽子讲web安全[1])
从一个域上加载的脚本不允许访问另外一个域的文档属性。

(2)跨域访问:
顾名思义,就是一个站点中的资源去访问另外一个不同域名站点上的资源。
这种情况很常见,比如说通过 style 标签加载外部样式表文件、通过 img 标签加载外部图片、
通过 script 标签加载外部脚本文件、通过 Webfont 加载字体文件等等。
默认情况下,脚本访问文档属性等数据采用的是同源策略。

2.具体如何实现跨域访问
注:参考 袭烽-《同源策略和跨域访问 》

(1) JSONP
JSONP技术实际和Ajax没有关系。我们知道<script>标签可以加载跨域的javascript脚本,并且被加载的脚本和当前文档属于同一个域。因此在文档中可以调用/访问脚本中的数据和函数。如果javascript脚本中的数据是动态生成的,那么只要在文档中动态创建<script>标签就可以实现和服务端的数据交互。
JSONP就是利用<script>标签的跨域能力实现跨域数据的访问,请求动态生成的JavaScript脚本同时带一个callback函数名作为参数。其中callback函数本地文档的JavaScript函数,服务器端动态生成的脚本会产生数据,并在代码中以产生的数据为参数调用callback函数。当这段脚本加载到本地文档时,callback函数就被调用。

(2) Proxy
使用代理方式跨域更加直接,因为SOP的限制是浏览器实现的。如果请求不是从浏览器发起的,就不存在跨域问题了。
使用本方法跨

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值