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页面中OpenLayers的init部分加上如下语句:
OpenLayers.ProxyHost = ‘/mybin/proxy.py?url=’。
OK。大功告成。同仁们不妨一试。