function addGltf(url, lng, lat, height, heading , pitch , roll, scale , id) { // var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(Cesium.Cartesian3.fromDegrees(lng, lat, height)); var model = viewer.scene.primitives.add(Cesium.Model.fromGltf({ url: url, //如果为bgltf则为.bgltf // modelMatrix: modelMatrix, scale: scale, //放大倍数 heightReference:Cesium.HeightReference.CLAMP_TO_GROUND, id : id, shadows : Cesium.ShadowMode.ENABLED, distanceDisplayCondition:new Cesium.DistanceDisplayCondition(0.0, 5000.0), color:Cesium.Color.fromAlpha(Cesium.Color.WHITE, 1), colorBlendMode:Cesium.ColorBlendMode.HIGHLIGHT })); var params= { tx: lng, //模型中心X轴坐标(经度,单位:十进制度) ty: lat, //模型中心Y轴坐标(纬度,单位:十进制度) tz: height, //模型中心Z轴坐标(高程,单位:米) rx: heading, //X轴(经度)方向旋转角度(单位:度) ry: pitch, //Y轴(纬度)方向旋转角度(单位:度) rz: roll , //Z轴(高程)方向旋转角度(单位:度) scale: scale }; model.type = "model"; model.tx = lng; model.ty = lat; model.tz = height; model.rx = heading; model.ry = pitch; model.rz = roll; update3dtilesMaxtrix(model,params); } //根据id获取 对象 function getprimitiveModel(id){ var primitives = viewer.scene.primitives; for (var i = 0; i < primitives.length; i++) { var primitive = primitives.get(i); if (typeof(primitive._id)!=='undefiend' && primitive._id == id) { return primitive; } } } function delprimitiveModel(id){ var primitives = viewer.scene.primitives; for (var i = 0; i < primitives.length; i++) { var primitive = primitives.get(i); if (typeof(primitive._id)!=='undefiend' && primitive._id == id) { viewer.scene.primitives.remove(primitive); } } } function getentityModel(id){ var entities = viewer.entities; return entities.getById(id); } function delentityModel(id){ var entities = viewer.entities; return entities.removeById(id); } function get3DTile(tilesetid,title){ if(base3dtilesPrimitives.length==0){ return undefined; }else{ var primitive = undefined; for(let i in base3dtilesPrimitives){ if(tilesetid==base3dtilesPrimitives[i]._id){ primitive = base3dtilesPrimitives[i]; } } var objs = undefined; for(let i in primitive.root.children){ // if(primitive.root.children[i].children[0]._content.batchTable._properties.名称 == title){ if(primitive.root.children[i]._header.content.url == title){ objs = primitive.root.children[i]; } } return objs instanceof Cesium.Cesium3DTile?objs:undefined; } } function get3DTileSet(id){ if(base3dtilesPrimitives.length==0){ return undefined; }else{ var primitive = undefined; for(let i in base3dtilesPrimitives){ if(id==base3dtilesPrimitives[i]._id){ primitive = base3dtilesPrimitives[i]; } } return primitive instanceof Cesium.Cesium3DTileset?primitive:undefined; } } //更新模型 function update3dtilesMaxtrix(model,params) { model.scale=params.scale; //旋转 var mx = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(params.rx)); var my = Cesium.Matrix3.fromRotationY(Cesium.Math.toRadians(params.ry)); var mz = Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(params.rz)); var rotationX = Cesium.Matrix4.fromRotationTranslation(mx); var rotationY = Cesium.Matrix4.fromRotationTranslation(my); var rotationZ = Cesium.Matrix4.fromRotationTranslation(mz); //平移 var position = Cesium.Cartesian3.fromDegrees(params.tx, params.ty, params.tz); var m = Cesium.Transforms.eastNorthUpToFixedFrame(position); //旋转、平移矩阵相乘 Cesium.Matrix4.multiply(m, rotationX, m); Cesium.Matrix4.multiply(m, rotationY, m); Cesium.Matrix4.multiply(m, rotationZ, m); //赋值给model model.modelMatrix = m; } function update3dtilesMaxtrix2(model,params) { //平移 var position = Cesium.Cartesian3.fromDegrees(params.tx, params.ty, params.tz); var m = Cesium.Transforms.eastNorthUpToFixedFrame(position); //赋值给model model.modelMatrix = m; }