cesium实现给三维建筑物贴图

本文介绍了一种在Cesium中通过将图片转换为三维模型,模拟建筑贴图效果的方法。由于Cesium.js本身不直接支持建筑模型贴图,作者通过设置图片的长宽高、经纬度和旋转角度,创建了一个假的贴图效果。然而,当建筑物数量庞大时,显示所有贴图会导致性能问题,目前作者正在寻求优化解决方案。
摘要由CSDN通过智能技术生成

 代码太多直接贴上来看吧……就是cesium.js并没有直接给三维建筑模型贴图的方法,但是有把图片变成三维模型的方法,利用这个方法,给图片设置长宽高,定义经纬度和图片旋转角度,做出一个图片贴在模型上的假效果,其实这并不是贴图,而是一个图片图层,我这里是利用cesium的滚轮事件来触发贴图的,但是现在由于建筑物特别多,显示所有贴图会超级卡、电脑会崩溃。正在解决中……以下是代码,效果图以后帖

Cesium.Ion.defaultAccessToken = "官网申请的token"

var viewer = new Cesium.Viewer('cesiumContainer', {
    imageryProvider: new Cesium.ArcGisMapServerImageryProvider({
        // url: 'http://t0.tianditu.gov.cn/img_w/wmts?tk=申请的key'
        url: 'https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer'
    }),
    animation: false,
    timeline: false,  //时间线
    fullscreenButton: true,  //全屏模式
    infoBox: false,  //要素信息框
    homeButton: false, //显示主页
    geocoder: false, //搜索位置
    sceneModePicker: true,//模式切换
    selectionIndicator: true, //展示三维的指示器
    navigationHelpButton: false, //帮助按钮
    navigationInstructionsInitiallyVisible: false
});
viewer.extend(Cesium.viewerCesiumNavigationMixin, {});  //添加指南针控件
//经度、纬度、建筑物视角高度
var initialPosition = new Cesium.Cartesian3.fromDegrees(117.146985,39.1039, 500);
// var initialPosition = new Cesium.Cartesian3.fromDegrees(117.122208999746, 39.1504710002357, 20);

var initialOrientation = new Cesium.HeadingPitchRoll.fromDegrees(7.1077496389876024807, -31.987223091598949050, 0.025883251314950971306);
var homeCameraView = {
    destination: initialPosition,
    orientation: {
        heading: initialOrientation.heading,//围绕负z轴的旋转
        pitch: initialOrientation.pitch,//围绕负y轴的旋转
        roll: initialOrientation.roll//围绕正x轴的旋转
    }
};
viewer.scene.camera.setView(homeCameraView);  //将相机设定在特定的位置和方向

var layer= new Cesium.WebMapTileServiceImageryProvider({
    url: 'http://t0.tianditu.gov.cn/img_w/wmts?tk=申请的key',
    layer:'img',
    style:'default',
    tileMatrixSetID:'w',
    format:'tiles',
    maximumLevel: 18

});
viewer.imageryLayers.addImageryProvider(layer);

var layer1 = new Cesium.WebMapTileServiceImageryProvider({
    url: 'http://t0.tianditu.gov.cn/cia_w/wmts?tk=申请的key',
    layer: 'cia',
    style: 'default',
    tileMatrixSetID: 'w',
    format: 'tiles',
    maximumLevel: 18
});
viewer.imageryLayers.addImageryProvider(layer1);



//根据建筑物数值加载不同颜色
function setColor(leq) {
    if (leq < 30) {
        return Cesium.Color.fromCssColorString('#267300');
    } else if (leq >= 30 && leq < 35) {
        return Cesium.Color.fromCssColorString('#5E8C00');
    }
    else if (leq >= 35 && leq < 40) {
        return Cesium.Color.fromCssColorString('#A8A800');
    } else if (leq >= 40 && leq < 45) {
        return Cesium.Color.fromCssColorString('#C48300');
    } else if (leq >= 45 && leq < 50) {
        return Cesium.Color.fromCssColorString('#E04B00');
    } else if (leq >= 50 && leq < 55) {
        return Cesium.Color.fromCssColorString('#FF0000');
    } else if (leq >= 55 && leq < 60) {
        return Cesium.Color.fromCssColorString('#D41923');
    } else if (leq >= 60 && leq < 65) {
        return Cesium.Color.fromCssColorString('#A82236');
    } else if (le
Cesium是一种用于三维虚拟地球和地理空间数据可视化的开源JavaScript库。要实现建筑物的单体化,也就是分栋分层,可以利用Cesium的强大功能。 首先,我们需要获取建筑物的相关数据,包括建筑物的位置、高度、楼层信息等。这些数据可以通过各种途径获得,例如由卫星影像获得建筑物的形状和位置,由地理信息系统获得楼层信息等。 接下来,我们可以使用Cesium的实体对象来表示建筑物的每个分块。可以为每一栋建筑物创建一个实体对象,然后根据楼层信息,为每层创建额外的实体对象。实体对象可以设置其位置、尺寸、颜色等属性来呈现建筑物的外观。 然后,将这些实体对象添加到Cesium的场景中。Cesium的场景是一个三维世界,我们可以将建筑物的实体对象放置在其中的适当位置。在场景中,我们可以调整建筑物的视角、缩放等来观察建筑物的外观。 除了基本的建筑物形状外,我们还可以使用Cesium的高级功能来增添建筑物的细节和交互性。例如,可以为建筑物添加纹理、贴图或其他表面属性,以增加其真实感。同时,我们还可以使用Cesium的交互式功能,例如单击建筑物实体对象时显示详细信息窗口等。 总的来说,利用Cesium库,我们可以以三维的方式实现建筑物的单体化,即通过将建筑物分块并添加到Cesium的场景中来呈现建筑物的外观。这种方法可以提供更直观、交互性更强的建筑物展示方式,有助于对建筑物的理解和规划。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值