SuperMap iClient3D for Cesium请求geojson数据构造水面符号

作者:xkf

前言

大多数时候我们水面符号都是在iDesktop中构建然后前端使用的,但是有的项目上因为需要展现洪水的涨跌,导致水面的高度以及位置会出现变化,这种情况下不适用在桌面做好的水面,需要在前端根据水面数据实时构建水面,那么怎么构建呢?

1. 发布数据

首先需要通过后端接口或者是tomcat之类的将数据处理为一个接口,让前端可以正常进行请求,我这里就将数据直接放在SuperMap iServer下.如图:
在这里插入图片描述
接口地址为: http://172.16.15.203:8090/iserver/heliu.geojson,返回内容如下:
在这里插入图片描述

2. 前端获取接口数据并构建面坐标数组

主要代码如下:

$.ajax({
   type: "get",
     url: "http://172.16.15.203:8090/iserver/heliu.geojson",
     // data: queryData,
     success: function (result) {
         var resultObj = JSON.parse(result);
         console.log(resultObj);
         let tmpArr = []
         let positions = resultObj.features[0].geometry.coordinates[0][0]
         for (let i = 0; i < positions.length; i++) {
             for (let j = 0; j < positions[i].length; j++) {
                 if (j == 2) {
                     positions[i][j] = 5000
                 } tmpArr.push(positions[i][j])
             }
         } console.log(tmpArr) // if (resultObj.featureCount> 0) {
         onQueryComplete(tmpArr);
         // }
     },
     error: function (msg) {
         console.log(msg);
     },
 });
3. 通过primitive构建水面符号

主要代码如下:

let polygon = new Cesium.PolygonGeometry({
     polygonHierarchy: new Cesium.PolygonHierarchy(
         Cesium.Cartesian3.fromDegreesArrayHeights(features)
     ),
 });
 let geometry = Cesium.PolygonGeometry.createGeometry(polygon);
 // instances.push(new Cesium.GeometryInstance({
 // geometry: geometry,
 // }));
 let tmp = viewer.scene.primitives.add(
     new Cesium.Primitive({
         geometryInstances: new Cesium.GeometryInstance({
             geometry: geometry,
         }),
         asynchronous: false,
         appearance: new Cesium.EllipsoidSurfaceAppearance({
             material: new Cesium.Material({

                 fabric: {
                     type: "Water",
                     uniforms: {
                         baseWaterColor: new Cesium.Color(64 / 255.0, 157 / 255.0, 253 / 255.0, 0.5), // 水面颜色
                         normalMap: Cesium.buildModuleUrl('Assets/Textures/waterNormals.jpg'),
                         diffuse: new Cesium.Color(64 / 255.0, 157 / 255.0, 253 / 255.0, 0.5),
                         frequency: 100, // 起伏程度
                         animationSpeed: 0.001, // 流动速度
                         amplitude: 5,
                         specularIntensity: 0.1, // 反射太阳光的强度 
                     }
                 }
             })
         }),
     })
 );

最终效果如图:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值