倾斜摄影模型分层单体化
以蓝田新城osgb模型为例
一、将osgb模型转换为3Dtiles数据
(软件地址(osg2cesiumApp):https://github.com/fanvanzh/3dtiles/blob/master/README.md )
二、获取模型位置高程,在cesium中加载此模型,查看贴地状态
var ellipsoid = viewer.scene.globe.ellipsoid; //得到当前三维场景的椭球体
var terrainProvider = viewer.scene.terrainProvider;
var CesiumEventHandler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
CesiumEventHandler.setInputAction(function (movement) {
var cartesian = viewer.camera.pickEllipsoid(movement.position, ellipsoid);
if (cartesian) {
var cartographic = Cesium.Cartographic.fromCartesian(cartesian); //将笛卡尔坐标转换为地理坐标
var longitudeDegree = Cesium.Math.toDegrees(cartographic.longitude);
var latitudeDegree = Cesium.Math.toDegrees(cartographic.latitude);
//x为longtitude,y为latitude,terrain是地形privider
var positions = [
Cesium.Cartographic.fromDegrees(longitudeDegree, latitudeDegree),
];
var promise = Cesium.sampleTerrainMostDetailed(terrainProvider, positions);
Cesium.when(promise, function (updatedPositions) {
var terrainHeight = updatedPositions[0].height;
console.log(terrainHeight);
});
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
// 加载 3D tiles
function load3DTiles(viewer, url) {
var tileset = viewer.scene.primitives.add(
new Cesium.Cesium3DTileset({
url: url,
ellipsoid: viewer.scene.globe.ellipsoid,
// clampToGround: true,
heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
height: 447.4957209101552
})
);
viewer.zoomTo(tileset);
三、下载模型所在位置影像图,绘制模型平面轮廓,在同一位置复制多个叠加面,创建顶面和底面两个属性字段,计算高程起点及建筑高度,对数据进行修改叠加
四、导入cesiumLab,使用shp文件生成矢量楼块3Dtiiles文件,设置参数如下
五、将矢量3dtiles作为classification type分类瓦片数据加载,分类对象设置为仅3dTiles
{
文献参考:
动态3D贴片交互:https://www.cesium.com/blog/2018/11/05/dynamic-3d-tiles-annotations/
Cesium3DTileset :https://cesium.com/docs/cesiumjs-ref-doc/Cesium3DTileset.html
classificationType :https://cesium.com/docs/cesiumjs-ref-doc/ClassificationType.html?classFilter=classificationType
}
function loadClassificationTileset(viewer, url) {
var classificationTileset = viewer.scene.primitives.add(
new Cesium.Cesium3DTileset({
id: "LTXCbuilding",
url: url,
classificationType: Cesium.ClassificationType.CESIUM_3D_TILE
})
);
classificationTileset.style = new Cesium.Cesium3DTileStyle({
color: 'rgba(255, 0, 0, 0.01)'
});
}
6、添加交互
var selectedFeature = {
"feature": undefined,
"Color": new Cesium.Color()
};
var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function (movement) {
var pickedFeature = viewer.scene.pick(movement.endPosition);
if (Cesium.defined(selectedFeature.feature)) {
selectedFeature.feature.color = Cesium.Color.WHITE.withAlpha(0.01);
selectedFeature.feature = undefined;
}
if (pickedFeature && pickedFeature !== selectedFeature.feature) {
selectedFeature.feature = pickedFeature;
Cesium.Color.clone(pickedFeature.color, selectedFeature.Color);
pickedFeature.color = Cesium.Color.YELLOW.withAlpha(0.5);
}
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE); // MOUSE_MOVE