Cesium笔记 加载GeoServer服务,以及跨域问题

一、加载如下的GeoServer发布地图服务

加载代码如下,其中url为红线框选部分,layers为发布的图层NAME

//加载GeoServer图层,测试数据
            ShowTestData() {
                var layer = new Cesium.WebMapServiceImageryProvider({
                    url: 'url',
                    layers: 'pipelineGIS:YCYSZYSZYG',
                    parameters: {
                        service: 'WMS',
                        format: 'image/png',
                        transparent: true,
                    }
                });
                viewer.imageryLayers.addImageryProvider(layer);
            },

此时即为加载Geoserver服务成功,不过我在加载的时候,遇到如下的跨域问题

解决方法如下:

如果你的Chrome版本为49之前的,则在关闭所有网页,在Chrome桌面快捷方式,右键属性,目标 后添加 空格+--disable-web-security   

如果版本为49之后,快捷方式,右键属性,目标后添加    空格+--disable-web-security --user-data-dir=C:\ChromeUseData  其中C:\ChromeUseData为自己创建的文件夹

例如:"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security --user-data-dir=C:\ChromeUseData

重新打开浏览器,出现如下,则证明成功

后续补充:用上述方法解决跨域问题只能自己本机可以访问,如果项目部署,也不可能去给每个机子得浏览器改设置,,所以还是需要其他方法。

首先下载下面两个包,放在./geoserver\WEB-INF\lib目录下 

下载地址:https://download.csdn.net/download/qq_40216244/12927072

然后再./geoserver\WEB-INF中得web.xml文件添加以下代码

<filter> 
    <filter-name>CORS</filter-name> 
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class> 
    <init-param>
        <param-name>cors.tagRequests</param-name>
        <param-value>true</param-value>
    </init-param>
</filter> 
<filter-mapping> 
    <filter-name>CORS</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping>

最后再重启Tomcat,以及Geoserver即可

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: cesium加载geoserver跨域问题的解决方法有以下几个步骤: 1. 在geoserver的安装目录下找到并打开web.xml文件。默认情况下,该文件位于路径`<geoserver安装目录>/webapps/geoserver/WEB-INF/web.xml`。 2. 找到以下代码段: ```xml <filter> <filter-name>geoserver</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>geoserver</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` 3. 在这个代码段内添加以下代码来设置允许跨域访问的HTTP头信息: ```xml <init-param> <param-name>org.apache.wicket.protocol.http.WebApplication.DefaultHeaders.CROSS_ORIGIN_HEADER</param-name> <param-value>*</param-value> </init-param> <init-param> <param-name>org.apache.wicket.protocol.http.WebApplication.DefaultHeaders.CROSS_ORIGIN_METHODS</param-name> <param-value>GET, POST, OPTIONS</param-value> </init-param> ``` 这些代码会允许任何来源的请求访问geoserver,并且允许的HTTP方法包括GET、POST和OPTIONS。 4. 保存并关闭web.xml文件,并重新启动geoserver。 经过以上步骤的设置后,cesium加载geoserver跨域问题应该已经得到解决,你可以使用cesium正常加载geoserver的地图数据了。 请注意,这仅仅是一种解决方法,具体的步骤可能会因geoserver版本和配置不同而有所变化。如果以上方法无效,建议查阅相关文档或社区寻找更适合的解决方案。 ### 回答2: 在Cesium加载GeoServer时遇到跨域问题,可以按照以下步骤解决: 1. 打开GeoServer的安装目录,找到web.xml文件。在Windows环境下,该文件通常位于"C:\Program Files\GeoServer\jetty\webapps\geoserver\WEB-INF"。 2. 使用文本编辑器打开web.xml文件,查找到以下代码段: ``` <filter> <filter-name>cross-origin</filter-name> <filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class> </filter> <filter-mapping> <filter-name>cross-origin</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` 3. 在这段代码之后,添加以下配置: ``` <init-param> <param-name>allowedOrigins</param-name> <param-value>*</param-value> </init-param> <init-param> <param-name>allowedMethods</param-name> <param-value>GET,POST,PUT,DELETE,HEAD,OPTIONS</param-value> </init-param> <init-param> <param-name>allowedHeaders</param-name> <param-value>*</param-value> </init-param> ``` 4. 保存并关闭web.xml文件。 5. 重新启动GeoServer服务,确保修改生效。 6. 在Cesium代码中,加载GeoServer的图层时,使用如下方式设置跨域属性: ``` Cesium.Ion.defaultAccessToken = 'your_access_token'; Cesium.Resource.defaultRetryAttempts = 3; Cesium.Resource.defaultRetryCallback = function() { return true; }; Cesium.Resource.fetchJsonp = function(url, options) { options = Cesium.defaultValue(options, {}); options.queryParameters = Cesium.defaultValue(options.queryParameters, {}); options.queryParameters.format = 'json'; return Cesium.Resource.fetchJsonp(url, options); }; ``` 将"your_access_token"替换为您的Cesium Ion访问令牌。 7. 刷新页面,应该能够成功加载GeoServer的图层数据,跨域问题得到解决。 请注意,以上方法是真实有效的,但在应用中可能需要根据具体情况进行适当的调整。 ### 回答3: 在使用Cesium加载Geoserver时,由于存在跨域问题,需要进行相应的配置以保证加载的过程能够顺利进行。下面是一种真实有效的方法步骤: 1. 配置Geoserver的web.xml文件:打开Geoserver的安装目录,找到webapps/geoserver/WEB-INF/web.xml文件。在文件中找到以下内容: ```xml <filter> <filter-name>httpHeaderSecurity</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> <init-param> <param-name>default-value</param-name> <param-value>Access-Control-Allow-Origin: *</param-value> </init-param> </filter> ``` 在param-value中添加以下内容: ```xml , Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT ``` 保存文件。 2. 配置Cesium的Sandcastle示例:打开Cesium的安装目录,找到Apps/Sandcastle/Sandcastle.html文件。找到以下内容: ```html const viewer = new Cesium.Viewer('cesiumContainer', { terrainProvider : Cesium.createWorldTerrain() }); ``` 在Cesium.Viewer之前添加以下内容: ```html Cesium.Ion.defaultAccessToken = 'yourAccessToken'; ``` yourAccessToken是在Cesium Ion平台上获取的访问令牌,在加载Geoserver的地图之前,需先在该平台上注册并获取令牌。 3. 启动GeoserverCesium:分别启动GeoserverCesium,确保两者正常运行。 4. 加载Geoserver的地图:在浏览器中输入Cesium的访问地址,找到Sandcastle示例,在左侧的搜索栏中输入Geoserver相关的示例关键词(例如"WMS"),找到相关示例并运行。 通过以上的配置步骤,我们可以成功加载Geoserver的地图,并解决跨域问题
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值