- Mars3D三维可视化平台 是火星科技(opens new window)研发的一款基于 WebGL 技术实现的三维客户端开发平台,基于Cesium(opens new window)优化提升与B/S架构设计
- mars3D官方开发教程
- Cesium中文网
-
mars3D调用原生Cesium
const Cesium = Mars3d.Cesium;
滚轮缩放—矢量图同步缩放级别
style 中是否支持 scaleByDistance
NearFarScalar 对象,用于设置球在缩放时 Label 也同步缩放。其中第 4 个参数,为 0 时,远距离是看不见的。此参数非常重要;
/*Billboard之间的距离在15000-20000之间的时候,Billboard的Scale比例按照1->0.3之间的插值来缩放*/
scaleByDistance: new Cesium.NearFarScalar(15000, 1, 20000, 0.3),
车辆模型移动追踪效果
参考案例
- 无人机飞行轨迹
-
//更新被追踪车辆位置
updateTrackingVehicleMarker(carGraphic, data) {
if (carGraphic.attr.time < data.time) {
carGraphic.attr.time = data.time;
let newPosition = new mars3d.LatLngPoint(Number(data.lon), Number(data.lat), 1);
// 控制追踪车辆到新的坐标
carGraphic.addDynamicPosition(newPosition,1);
/* 追踪效果 trackedEntity*/
this.map.trackedEntity = carGraphic.entity;
this.map.flyToPoint(carGraphic.positionShow, {
radius: 200, // 距离目标点的距离
heading: 40,
pitch: -50,
duration:0
})
}
},
可视化范围 getExtent()
let extent = this.map.getExtent();
let leftTop = [extent.xmin,extent.ymax];
let rightTop = [extent.xmax,extent.ymax];
let rightDown = [extent.xmax,extent.ymin];
let leftDown = [extent.xmin,extent.ymin];
判断graphic是否在可视范围内
// 获取当前车辆的经度和维度,用于判断是否再当前屏幕范围内
let lon = data.lon;
let lat = data.lat;
// 找到了车辆,但没在屏幕范围,就移除车辆
if(lon > extent.xmax || lon < extent.xmin || lat > extent.ymax || lat < extent.ymin) {
carGraphic.remove();
return;
}
webgl渲染失败后,刷新页面
// webgl渲染失败后,刷新页面
map.on(mars3d.EventType.renderError, async () => {
alert("程序内存消耗过大,请重启浏览器")
window.location.reload()
})