Skip to content

水面

水面的保存和压平相同,都是使用 GeojsonDatasource 的 togeojson()的方式直接转换为 json 格式数据上传保存,加载需要引用插件 Water.js

HTML
<script type="text/javascript" src="Build/Plugins/Water/Water.js"></script>

水面重载

水面数据获取接口查询场景水面信息,参数 jsonType 为 5;

当然如果其他水面坐标数据,只要符合水面的坐标格式,都可以通过构建水面对象来加载。

JavaScript
// 水面数据
var oGeoJson = result.data;
//result.data前面获取的水面数据json
var promise = LSGlobe.GeoJsonDataSource.load(oGeoJson, {});
promise.then(function(dataSource) {
    //将数据再次加载到初始化存储水面的对象中
    waterDataSource = dataSource;
    //添加到球中
    viewer.dataSources.add(dataSource);

    var entities = waterDataSource.entities._entities._array;
    for (var i = 0; i < entities.length; i++) {
        var entity = entities[i];
        var WaterId = entity.id;
        var WaterName = entity.name;
        if (entity.polygon) {
            entity.polygon.outline = false;
            var wateritem = new LSGlobe.Water(viewer.scene);
            wateritem.waterPolygon = new LSGlobe.PolygonGeometry({
                // 参数为世界坐标集合
                polygonHierarchy: new LSGlobe.PolygonHierarchy(entity.polygon.hierarchy._value.positions),
                perPositionHeight: true
            });
            // 水面属性
            var oProperties = entity.properties.getValue();
            // 水面id
            wateritem.id = WaterId;
            // 水面波宽
            wateritem.waveWidth = oProperties.waveWidth;
            // 水面流向
            wateritem.flowDirection = oProperties.flowDirection;
            // 水面流速
            wateritem.flowSpeed = oProperties.flowSpeed;
            // 水面颜色
            wateritem._waterColor = LSGlobe.Color.fromCssColorString(oProperties._waterColor).withAlpha(oProperties.alpha / 100);
            // 水面名称
            wateritem.name = WaterName;
            // 水面描述
            wateritem.des = oProperties.des;
            // 水面透明度
            wateritem.alpha = oProperties.alpha;
            // 水面是否显示
            wateritem.isVisible = entity.show;
            // 将水面对象添加到场景中
            viewer.scene.waterCollection._water.push(wateritem);
        }
    }
}).otherwise(function(error) {
    console.log(error);
});

水面显示隐藏

JavaScript
// 通过遍历viewer.scene.waterCollection._water,设置wateritem.isVisible = true;//true:显示,false:隐藏
oWater.isVisible = true;//true:显示,false:隐藏

水面飞行

可以拿到水面坐标数据后利用视角定位中的 flyToBoundingSphere 进行定位

JavaScript
// 获取水面entity对象,主要是拿到水面的坐标数据
var entity = waterDataSource.entities.getById(waterid);
// 构建水面的包围球
const boundingSphere = LSGlobe.BoundingSphere.fromPoints(entity.polygon.hierarchy.getValue().positions);
// 飞行到水面
viewer.camera.flyToBoundingSphere(boundingSphere, {
    offset: new LSGlobe.HeadingPitchRange(0, -LSGlobe.Math.PI_OVER_TWO, 0)
});

水面删除

JavaScript

waterDataSource.entities.removeById(id);
// 通过遍历viewer.scene.waterCollection._water,设置wateritem.isVisible = true;//true:显示,false:隐藏
oWater.destroy();

水面存储

水面存储是以 json 格式保存的,直接赋值给 场景提交数据.water属性上,然后随场景保存接口一并提交保存

JavaScript
oSubSceneData.water = waterDataSource.toGeoJson()

在线示例

在线示例

Released under the MIT License.