let tileset = new Cesium.Cesium3DTileset({
url: "http://.../3DTiles.json",
maximumScreenSpaceError: 1
})
viewer.scene.primitives.add(tileset);
tileset.readyPromise.then(function (tileset) {
//将视野缩放到模型范围内
viewer.zoomTo(tileset, new Cesium.HeadingPitchRange(0.5, -0.2, tileset.boundingSphere.radius * 1.0));
}).otherwise(function (e) {
throw e
})
如若想更改模型的位置,可以根据前后经纬度和高度计算变换矩形——平移矩阵
1.根据tileset的边界球体中心点的笛卡尔坐标得到经纬度坐标
2.根据经纬度和高度0,得到地面笛卡尔坐标
3.根据经纬度和需要的高度,得到偏移后的笛卡尔坐标
4.计算坐标变换,得到新的笛卡尔坐标
5.根据变换得到Matrix4变换矩阵
具体代码如下:
tileset.readyPromise.then(function (tileset) {
// 模型中心点
var surface = tileset.boundingSphere.center;
// 模型中心点的笛卡尔坐标
var cartographic = Cesium.Cartographic.fromCartesian(surface);
// 中心点的经纬度坐标
let lng = Cesium.Math.toDegrees(cartographic.longitude)
let lat = Cesium.Math.toDegrees(cartographic.latitude)
// 将经纬度坐标转为火星坐标
let newLatlng = coordinateTools.wgs84togcj02(lng,lat)
// 将火星坐标转为笛卡尔坐标
var offset = Cesium.Cartesian3.fromDegrees(newLatlng[0], newLatlng[1], 70);
// 计算原中心点偏移到火星坐标的偏移量
var translation = Cesium.Cartesian3.subtract(offset, surface, new Cesium.Cartesian3());
// 将模型进行偏移
tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
//修改模型的位置后,将模型添加到地图中
viewer.scene.primitives.add(tileset);
}).otherwise(function (e) {
throw e
})
网友评论