水面
水面的保存和压平相同,都是使用 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()