cesium官方例子笔记修正(2)

看了下cesium官方中文例子,很多调不通,有点不能忍了,故记下来。以备下次用时不东找西找。在cesium沙盒中运行的。

直接罗列代码

 

Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJjOWM3MzYxZS0xNDg5LTRhYzgtOTE3ZS1hMTgyNmFmNzY5ZDIiLCJpZCI6MTYwNTYsInNjb3BlcyI6WyJhc3IiLCJnYyJdLCJpYXQiOjE1Njk0NzMxMjl9.QT-UwdXK6VZyYMhtznEEIru0AEQEzMPxDlxQw96mTlA';

var viewer = new Cesium.Viewer('cesiumContainer',{
    terrainProvider : Cesium.createWorldTerrain({
        requestWaterMask : true,
        requestVertexNormals : true
    }),
    scene3DOnly : true,
    //selectionIndicator : false,
    //baseLayerPicker : false
}  );
//打开深度测试,那么在地形以下的对象不可见
viewer.scene.globe.depthTestAgainstTerrain = true;
//开启全球光照
//viewer.scene.globe.enableLighting = true;
//创建相机初始位置和朝向
var initialPosition = new Cesium.Cartesian3.fromDegrees(-73.998,40.674,0);
var initialOrientation = new Cesium.HeadingPitchRoll.fromDegrees(7.1,-31.987,0);
var homeCameraView = {
    destination : initialPosition,
    orientation : {
        heading : initialOrientation.heading,
        pitch : initialOrientation.pitch,
        roll : initialOrientation.roll       
    }
};
//设置视图
//viewer.scene.camera.setView(homeCameraView);
//增加相机飞行动画参数
homeCameraView.duration = 2.0;
homeCameraView.maximumHeight = 2000;
homeCameraView.pitchAdjustHeight = 2000;
homeCameraView.endTransform = Cesium.Matrix4.IDENTITY;

//重新默认的home按钮
viewer.homeButton.viewModel.command.beforeExecute.addEventListener(function(e){
    e.cancel = true;
    viewer.scene.camera.flyTo(homeCameraView);
});


//设置时钟和时间线
//启动动画
viewer.clock.shouldAnimate = true;
viewer.clock.startTime = Cesium.JulianDate.fromIso8601("2017-07-11T16:00:00Z");
viewer.clock.stopTime = Cesium.JulianDate.fromIso8601("2017-07-11T16:20:00Z");
viewer.clock.currentTime = Cesium.JulianDate.fromIso8601("2017-07-11T16:00:00Z");
//设置加速率
viewer.clock.multiplier = 2;
viewer.clock.clockStep = Cesium.ClockStep.SYSTEM_CLOCK_MULTIPLIER;
//循环播放
viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP;
//设置时间的可见范围
viewer.timeline.zoomTo(viewer.clock.startTime, viewer.clock.stopTime);

var kmlOptions = {
    camera : viewer.scene.camera,
    canvas : viewer.scene.canvas,
    //是否贴地
   // clampToGround : true
};

//从KML的URL里加载POI点位
var geocachePromise = Cesium.KmlDataSource.load('http://localhost:8080/apps/SampleData/sampleGeocacheLocations.kml',kmlOptions);
//回调
geocachePromise.then(function(dataSource){
    //把所有的entities添加到viewer里显示
    viewer.dataSources.add(dataSource);
    //获得entity列表
    var geocacheEntites = dataSource.entities.values;
    for(var i = 0; i < geocacheEntites.length; i++)
    {
        var entity = geocacheEntites[i];
        if(Cesium.defined(entity.billboard))
        {
            //调整垂直方向的原点,保证图标里的针尖对着地表位置
            entity.billboard.verticalOrigin = Cesium.VerticalOrigin.BOTTOM;
            //去掉文字的显示
            entity.label = undefined;
            //设置可见距离
            entity.billboard.distanceDisplayCondition = new Cesium.DistanceDisplayCondition(10.0,20000.0);
            //计算经纬度(角度表示)
            var cartographicPosition = Cesium.Cartographic.fromCartesian(entity.position.getValue());
            var longitude = Cesium.Math.toDegrees(cartographicPosition.longitude);
            var latitude = Cesium.Math.toDegrees(cartographicPosition.latitude);
            
        }
    }
});

//行政区域多边形
var geojsonOptions = {
    clampToGround : true
};
//从geojson文件加载行政区多边形边界数据
var neighborhoodPromise = Cesium.GeoJsonDataSource.load('http://localhost:8080/apps/sampleData/sampleNeighborhoods.geojson',geojsonOptions);
var neighborhoods;

neighborhoodPromise.then(function(dataSource){
    viewer.dataSources.add(dataSource);
    neighborhoods = dataSource.entities;
    //获取enty列表遍历
    var neighthoodEntities = dataSource.entities.values;
    for(var i = 0; i < neighthoodEntities.length; i++)
    {
        var entity = neighthoodEntities[i];
        if(Cesium.defined(entity.polygon))
        {
            //设置样式代码
            entity.name = entity.properties.neighborhood;
            //设置一个随机半透明颜色
            entity.polygon.material = Cesium.Color.fromRandom({
                red : 0.1,
                maximumGreen : 0.5,
                minimumBlue : 0.5,
                alpha : 0.6
            });
            //设置让多边形贴地
            entity.polygon.heightReference = Cesium.heightReference.CLAMP_TO_GROUND;
            //获取多边形的positions列表,并计算它的中心点
            var polyPositions = entity.polygon.hierarchy.getValue(Cesium.JulianDate.now()).positions;
            var polyCenter = Cesium.BoundingSphere.fromPoints(polyPositions).center;
            polyCenter = Cesium.Ellipsoid.WGS84.scaleToGeodeticSurface(polyCenter);
            entity.position = polyCenter;
            //生成文字标注
            entity.label = {
                text : entity.name,
                showBackground : true,
                scale : 0.6,
                horizontalOrigin : Cesium.HorizontalOrigin.CENTER,
                verticalOrigin : Cesium.VerticalOrigin.BOTTOM,
                distanceDisplayCondition : new Cesium.DistanceDisplayCondition(10.0, 8000.0),
                disableDepthTestDistance : 100.0
            };
        }
    }
});
//从CZML中载入无人机轨迹
var dronePromise = Cesium.CzmlDataSource.load('http://localhost:8080/apps/sampleData/sampleFlight.czml');
var drone;
dronePromise.then(function(dataSource){
    viewer.dataSources.add(dataSource);
    //使用id获取在CZML数据中定义的无人机entity
    drone = dataSource.entities.getById('Aircraft/Aircraft1');
    //附加一些三维模型
    drone.model = {
        uri : 'http://localhost:8080/apps/sampleData/models/CesiumDrone.gltf',
        minimumPixelSize : 128,
        maximumScale : 1000,
        silhouetteColor : Cesium.Color.WHITE,
        silhouetteSize : 2
    };
    //基于无人机轨迹的位置点,自动计算朝向
    drone.orientation = new Cesium.VelocityOrientationProperty(drone.position);
    //光滑的飞行路径
    drone.position.setInterpolationOptions({
        interpolationDegree : 3,
        interpolationAlgorithm : Cesium.HermitePolynomialApproximation
    });
    //跟踪无人机
    viewer.trackedEntity = drone;
    //取消跟踪无人机
    viewer.trackedEntity = undefined;
    viewer.scene.camera.flyTo(homeCameraView);
});

//加载3dtiles建筑物模型

var tileset =viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
    url : 'http://localhost:8080/apps/sampleData/Cesium3DTiles/Tilesets/Tileset/tileset.json'
    //url : Cesium.IonResource.fromAssetId(3839)
}));
var defaultStyle = new Cesium.Cesium3DTileStyle({
    color : 'rgba(255,255,255,0.5)',
    show : true
});
tileset.style = defaultStyle;
//视点看向3dtile模型
viewer.zoomTo(tileset);

//鼠标移动事件
var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function(evt){
    console.log(evt.position);
    var feature = viewer.scene.pick(evt.position);
    if(feature instanceof Cesium.Cesium3DTileFeature){
        var propertyNames = feature.getPropertyNames();
        var length = propertyNames.length;
        for(var i = 0; i < length; i++) {
            //得到ID
            var propertyName = propertyNames[i];
            console.log(propertyName +":"+ feature.getProperty(propertyName));
            propertyName.billboard.scale = 2.0;
            }
        }
    },
    Cesium.ScreenSpaceEventType.LEFT_CLICK);

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值