最近同事OpenLayer调用Arcgis的WFS要素服务遇到一些问题,总结了下

 

首先第一个跨域问题:在调试脚本老是包没有权限,通过查看google和Openlayer资料,最终确定是跨域的问题。

解决方式:

openLayer已经提供了一种解决方式。就是在../examples/proxy.cgi文件,我们打开这个文件可以看到就是一个python文件。

clipboard

看看里面的内要主要的工作就是做个代理转发。既然是个转发文件,我们就应该清楚这个文件必须部署在Web容器里面,让其做转发支持,

由于是python脚本,所以Web容器应该支持python脚本。

Ok,知道这些后,我们先让IIS通过CGI的方式python脚本先:

 

第一步:安装Python脚本(装了Arcgis默认都安装了)

第二步:让IIS通过CGI的方式来支持python脚本。在IIS管理内容中 单击ISAPI和CGI限制 

路径选择 Python文件夹下 的python.exe %s %s; (我机器是C:\Python27\ArcGISx6410.1\python.exe,后面%s%s代表字符串)

clipboard[1]

第三步  >处理程序映射->添加脚本映射->请求路径:*.cgi

clipboard[2]

这样IIS就能识别proxy.cgi文件了,如果想执行*.py,那么将*.py也加上。

clipboard[3]

第四步,天剑应用程序池,名称为python,选择无托管代码

clipboard[4]

Ok,经过四个步骤,那么我们的IIS现在是通过CGI的方式支持PYTHON了,我们可以通过以下步骤进行测试。

在Web目录下新建个index.py文件,里面打印个helloword做测试。然后通过浏览器进行浏览看是否会出结果。

 

接下来我们来考虑OpenLayer调用WFS:

1、将OPenLayer部署在IIS中(注意路径不要带&等符号,IIS解析路径的时候会有问题)

2、修改Example目录下的proxy.cgi,修改第一行  #!/usr/bin/env python为#! C:/Python27/ArcGISx6410.1/python.exe /python.exe -u(默认用的是linux下的路径python) ,然后修改数组allowedHosts   在其中加入WFS服务的地址。(运行跨域的网站地址,很好理解)

3、在你的openlayer 初始化调用地图的Init函数中添加   OpenLayers.ProxyHost= "proxy.cgi?url=";如果有的话就不需要(这里的proxy.cgi?对应的你部署proxy.cgi的路径,如果在当前目录就是proxy.cgi。如果是其他目录需要指定相对路径)

OK,现在你可以通过IIS测试下Openlayer目录下\examples中的wfs-protocol.html文件了。(注意必须通过Web的方式浏览)

 

 

 

最后, 调用WFS的时候注意事项, 还有记得用Openlayer调用的时候添加WFS版本号。ArcGIS当前默认支持的1.0.0和1.1.0

以下是我的代用代码,跟调用Geoserver还是有点不同。

 

调用代码