看了下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);