cesium加载WFS服务(GeoServer发布)

本文介绍如何利用GeoServer和Cesium实现自定义图层的渲染,通过WFS服务获取GeoJson数据,并使用AJAX加载到Cesium环境中进行渲染。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:

     为了便于前端渲染数据,自定义图层渲染。

思路:

     获取地图服务中的要素进行渲染。

工具:

    GeoServer2.6.4,cesium,

思路有了就开始找资料写代码,cesium有接口可以加载WMS服务,但是加载的WMS服务获取到的是切片,不可能将获取到的要素进行渲染。于是想通过WFS服务来渲染数据,但是cesium没有提供可用的接口,通过google,找到了一个比较靠谱的思路:geoserver的地图服务支持很多格式,其中就可以显示GeoJson数据,然后通过AJAX获取geoserver服务中的GeoJson数据,在通过cesiumGeoJsonDataSource进行数据的加载,然后渲染就好说了。

    这里假设geoserverWFS服务已经发布好了。

1、获取服务地址

  GeoServerLayerPreview图层列表中的目标图层后面,再select on中选择GeoJson,如下图所示。

这个时候页面中会以GeoJson格式显示该图层的数据,然后地址栏中的链接就是我们需要的地址,如下图所示。

2、实用AJAX获取GeoJson数据

复制代码

    var viewer = newCesium.Viewer('cesiumContainer');

   $.ajax({

           url:"http://localhost:8082/geoserver/mytest/ows?service=WFS&request=GetFeature&typeName=mytest:river4&outputFormat=application/json",

           cache: false,

           async: true,

           success: function(data) {

                 var datasource=Cesium.GeoJsonDataSource.load(data);

               viewer.dataSources.add(datasource);

           },

           error: function(data) {

                console.log("error");

           }

   });

复制代码

 这样数据就被加载到cesium中了,然后使用 dataSource.entities.values,就可以对图层进行渲染了,代码如下:

复制代码

       var entities = dataSource.entities.values;for (var i = 0; i < entities.length; i++) {

           var entity = entities[i];

           var polylineVolume = {

                           positions:entity.polyline._positions,

                           shape:computeCircle(50.0),

                           material:Cesium.Color.RED

                        }

           entity.polylineVolume=polylineVolume;

           entity.polyline=null;

       }

复制代码

PS:这里还要解决跨域问题,否则ajax获取不到GeoJson数据,解决方法:http://pan.baidu.com/s/1cpGg1o

效果图:

### 如何在 Cesium加载 GeoServer 发布的 SHIP 数据 为了在 Cesium加载GeoServer 发布的 SHIP (Shapefile) 数据,需遵循特定流程来配置和集成这些地理空间数据。 #### 配置 GeoServer发布 SHIP 数据 确保已通过 GeoServer 的 Web 管理界面设置好工作区(WorkSpace),并创建了用于存储 Shapefile 文件的数据存储(Store)[^1]。完成此操作后,定义图层(Layer),使 SHIP 数据可通过 WFS(Web Feature Service) 或 WMS(Web Map Service) 协议访问。 #### 使用 Cesium 加载来自 GeoServer 的 SHIP 数据 对于基于矢量特性的 SHIP 数据而言,推荐采用 WFS-T (Transactional) 来获取要素集合;而如果仅需要图像形式的地图服务,则可以利用 WMS 请求方式。 ##### 方法一:WMS 图像叠加 当选择 WMS 方式时,可以通过 `Cesium.WebMapServiceImageryProvider` 类轻松实现地图瓦片显示: ```javascript var viewer = new Cesium.Viewer('cesiumContainer'); viewer.imageryLayers.addImageryProvider( new Cesium.WebMapServiceImageryProvider({ url : 'http://localhost:8080/geoserver/wms', layers : 'workspace_name:layer_name', // 替换 workspace 和 layer 名字 parameters : { transparent : true, format : 'image/png' } }) ); ``` ##### 方法二:WFS 要素查询与渲染 针对更复杂的交互需求或精确的空间分析场景下,建议运用 WFS 接口请求原始几何对象,并借助于 `Cesium.GeoJsonDataSource` 解析呈现: ```javascript fetch(`http://localhost:8080/geoserver/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=workspace_name%3Alayer_name&srsname=EPSG%3A4326`) .then(response => response.text()) .then(text => { var dataSource = new Cesium.GeoJsonDataSource(); return Cesium.GeoJsonDataSource.load(text, { stroke: Cesium.Color.HOTPINK, fill: Cesium.Color.PINK.withAlpha(0.5), strokeWidth: 3 }); }) .then(function(dataSource){ viewer.dataSources.add(dataSource); }); ``` 上述两种方法均能有效支持在 Cesium 应用程序内展示由 GeoServer 托管的服务资源。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值