IIS环境下OpenLayers使用WFS服务跨域访问问题之解决方案

 
请注明转载,版权所有 zhuhuazha@gmail.com.
OpenLayers以其优越的性能、广泛的支持和近乎完美的地图展现和处理能力而拥有无数的FANS。但它毕竟是一个纯JS库,利用ajax方法完成地图要素和信息的动态加载,因此它本身也免不了ajaxjavascript的一些限制,比如跨域访问问题。浏览器了为安全起见,是不允许js执行跨域访问的,在openlayers官方Wiki中提到使用wfsGeoRSS这两个服务是会遇到跨域访问的问题的。
比如如下的鼠标单击事件添加wfs查询:
map.events.register('click', map, function (e) {
    //获取当前鼠标位置
    clickPos = map.getLonLatFromPixel(e.xy);
    leftPos = map.getLonLatFromPixel( new OpenLayers.Pixel(e.xy.x-gTolerance, e.xy.y-gTolerance) );
    rightPos = map.getLonLatFromPixel( new OpenLayers.Pixel(e.xy.x+gTolerance, e.xy.y+gTolerance) );
    bounds = new OpenLayers.Bounds();
    bounds.extend( leftPos );
    bounds.extend( rightPos );
    //构建GetFeature参数
    var params = {
REQUEST: "GetFeature",
        BBOX: bounds.toBBOX(),                                                       maxFeatures:'10',
        srsName: 'EPSG:4326',
        service: 'WFS',
        version: '1.0.0',
        //PropertyName: properName,
        typeName:gLayerNames
};
        //执行查询
        OpenLayers.loadURL("http://192.168.0.161:8080/geoserver/wfs", params, this, setHTML, setHTML);  //161是另一台机器用来做地图服务
        OpenLayers.Event.stop(e);
});
       在 IE或者 firefox里面执行时, 会因为跨域的问题报错:拒绝访问或者缺少对象。     

       OpenLayers为我们提供了一个参考解决方案。在examples目录里面,有个proxy.cgi文件,然后在init函数中添加如下如句:

OpenLayers.ProxyHost = ‘/cgi-bin/proxy.cgi?’

    但网上不论中文还是英文,都随处可见基于Apache的解决方法,但IIS下解决方案始终未能搜到。今天,为此作一试验,成功解决该问题,方法相对也比较简便,在此一述,以飨后来人。

       首先安装Python, 比如我安装到C:/Python24,安装完毕后,设置环境变量:Path,添加路径到Path之后。

       其次,在IIS网站上添加py应用支持。在网站属性,主目录,配置,选项,应用程序映射,添加。可执行文件选择c:/python24/python.exe %s %s 注意后面的两个%S,%s是指字符串。扩展名写上.py。这样iis就支持运行py程序了。

       然后,拷贝proxy.cgi程序到网站目录下,随意放哪个文件夹下,我放在wwwroot/mybin。将Proxy.cgi改名为proxy.py(很重要噢)。更改proxy.py第一行

#!/usr/bin/env python为#!C:/Python24/python.exe -u,原来的是linux下的,修改的则为windowsg上的。


       最后,在html页面中OpenLayersinit部分加上如下语句:

OpenLayers.ProxyHost = ‘/mybin/proxy.py?url=’

    OK。大功告成。同仁们不妨一试。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值