记录GIS相关技术成长的点滴

0%

笔记【一】:MapBox 加载 ArcGIS 的WMS 服务跨域问题解决

1. 环境:

  • ArcGIS Server 10.2
  • MapBox-GL v 1.7
2. 问题描述:

在使用ArcGIS 发布一个WMS 服务,同时用OpenLayers,LeafLet以及MapBox 加载,在OpenLayers和LeafLet 中均可正常加载,但在MapBox 中加载出现跨域请求现象

跨域报错

3.产生原因:

通过查找文档以及Mapbox的GitHub 的issues 找到相关解释:原Issue

issue

读下来的大致意思是:mapbox 加载WMS是需要读取 image里的数据,但只有服务器允许跨域的情况下我们才可以这么做。而LeafLet 不需要读取数据,所以可以直接加载。

那么知道产生原因,问题就好解决了。

4. 解决方案
  1. 下载 cors-filter-1.7.jar 以及 java-property-utils-1.9.jar 这两个jar 包用于设置Tomcat的跨域。

  2. 找到ArcGIS 安装目录下的<安装目录>\framework\runtime\tomcat\lib 将下载的jar 拷贝到该目录下新加jar

  3. 修改tomcat配置<安装目录>\framework\runtime\tomcat\conf\web.xm

  4. 找到<filter> 同级的末尾追加如下XML代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <filter>
    <filter-name>CORS</filter-name>
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
    <init-param>
    <param-name>cors.allowOrigin</param-name>
    <param-value>*</param-value>
    </init-param>
    <init-param>
    <param-name>cors.supportedMethods</param-name>
    <param-value>GET, POST, HEAD, PUT, DELETE</param-value>
    </init-param>
    <init-param>
    <param-name>cors.supportedHeaders</param-name>
    <param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified</param-value>
    </init-param>
    <init-param>
    <param-name>cors.exposedHeaders</param-name>
    <param-value>Set-Cookie</param-value>
    </init-param>
    <init-param>
    <param-name>cors.supportsCredentials</param-name>
    <param-value>true</param-value>
    </init-param>
    </filter>

    <filter-mapping>
    <filter-name>CORS</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
  5. 找到window的服务,重启ArcGIS Server 服务重启服务

  6. 再次使用Mapbox 请求验证问题,已经可以正常请求到WMS服务。效果.png