Cesium系列6 - 解决调用geoserver服务跨域请求的问题

本文介绍了解决Cesium加载GeoServer WMS数据时出现的跨域问题的方法。提供了两种解决方案,一种是通过修改GeoServer所在Tomcat的web.xml文件实现,另一种是修改web-inf下的web.xml文件来达到相同目的。

一、cesium加载geoserver wms数据跨域报错,已成功解决,亲测可用

二、解决步骤:

解决方法一:修改geoserver所在tomcat的web.xml文件

解决方法二:修改geoserver所在web-inf/web.xml文件

二者选一种即可 ,原理一致,推荐选方法一

解决方法一步骤:

1.下载

链接:https://pan.baidu.com/s/15k3yTmtW5ojI4hPtNEhx1g 提取码:utbi 

2.找到里面的jar包cors-filter-2.4.jar和java-property-utils-1.9.1.jar复制在geoserver所在tomcat的根目录/lib/文件夹下

3.修改[tomcat]/conf/web.xml文件

将下述代码片段加入到在<filter>平级位置

<!-- cesium跨域解决方案1 步骤3--> 
 <filter>
	 <filter-name>CorsFilter</filter-name>
	 <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
	 <init-param>
	   <param-name>cors.allowed.methods</param-name>
	   <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
	 </init-param>
	 <init-param>
Cesium加载 GeoServer 发布的地形数据,通常需要将地形数据通过 GeoServer 发布为 WMS 或 WFS 服务,再在 Cesium 中通过相应的图层加载方式进行调用GeoServer 支持将栅格地形数据(如 GeoTIFF)发布为 WMS 图像服务Cesium 可以通过 `WebMapServiceImageryProvider` 来加载这些服务Cesium 提供了 `WebMapServiceImageryProvider` 类,用于加载符合 WMS 标准的服务。使用该类时,需要提供 GeoServer 的 WMS 服务地址,并指定图层名称及其他必要的参数,例如图像格式、透明度等。以下是一个示例代码: ```javascript const viewer = new Cesium.Viewer('cesiumContainer', { imageryProvider: new Cesium.WebMapServiceImageryProvider({ url: 'http://geoserver:8080/geoserver/wms', subdomains: ['s1', 's2'], customParameters: { service: 'WMS', version: '2.0.1', layers: 'workspace:terrain_layer_name', transparent: true, format: 'image/png' } }) }); ``` 该代码通过 `WebMapServiceImageryProvider` 加载GeoServer 的 WMS 地形图层,并将其作为影像图层叠加在 Cesium 的三维场景中。需要注意的是,GeoServer 发布的 WMS 服务必须支持透明通道(即 `transparent=true`)才能较好地融合到 Cesium 的地形上 [^1]。 如果地形数据是以 DEM(数字高程模型)形式存在,并希望在 Cesium 中作为真实地形进行渲染,可以考虑将 GeoServer 与外部地形服务(如 Cesium ion 或自建的 Terrain 服务)结合使用。GeoServer 本身不支持直接发布地形服务(如 TMS 或 Quantized Mesh 格式),因此需要借助其他工具(如 CesiumLab)进行地形切片和转换 [^1]。 此外,如果 GeoServer 通过 WFS 提供了地形的矢量数据(如等高线),可以在 Cesium 中使用 `GeoJsonDataSource` 或 `Cesium.loadGeoJson` 方法加载这些数据,并设置贴地显示效果 [^2]。 ### 示例:加载 WFS 提供的地形矢量数据 ```javascript viewer.dataSources.add(Cesium.GeoJsonDataSource.load('http://geoserver:8080/geoserver/wfs?service=WFS&version=2.0.1&request=GetFeature&typeNames=workspace:contour_lines&outputFormat=application/json', { stroke: Cesium.Color.RED, strokeWidth: 2, height: 0, clampToGround: true })); ``` 上述代码通过 WFS 服务获取等高线数据,并将其作为矢量图层加载Cesium 中,设置 `clampToGround: true` 以实现贴地效果 [^2]。 ### 注意事项 - GeoServer 的 WMS 服务适合加载影像图层,而地形高程数据若需真实渲染,建议使用专用地形服务格式(如 Cesium Terrain)。 - 若需对原始地形数据进行切片并发布为地形服务,可使用 CesiumLab 等工具进行处理 [^1]。 - Cesium 加载 GeoServer 的地形数据时,应注意问题(CORS),确保 GeoServer 配置允许来自 Cesium 页面的请求
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值