cesium-examples/map/examples/20_landtemperature.html

246 lines
8.8 KiB
HTML
Raw Permalink Normal View History

<!--
Land Temperature Tendency(2006~2017)
Dynamic ImagerLayers Demo
-->
<!DOCTYPE html>
<head>
<title>LandSurfaceTemperature</title>
<link href="../Build/Cesium/Widgets/widgets.css" rel="stylesheet">
<link href="../Build/Cesium/Widgets/Animation/Animation.css" rel="stylesheet">
<link href="../Build/Cesium/Widgets/Animation/lighter.css" rel="stylesheet">
<script type="text/javascript" src="./js/require.min.js" data-main="./js/main"></script>
<script type="text/javascript" src="./js/require.min.js" data-main="./js/main"></script>
<script type="text/javascript" src="./images/LandSurfaceTemperature/data.js" data-main="./js/main"></script>
<style>
html, body, #cesiumContainer {
width: 100%; height: 100%; margin: 0; padding: 0; overflow: hidden;
}
#tempStatis{
margin: 1px;
padding: 0px 0px;
position: absolute;
left: 0px;
top: 0px;
width:800px;
height:300px;
background-color:rgba(38, 38, 38, 0.75)
}
#toolbar {
margin: 1px;
padding: 0px 0px;
position: absolute;
left: 0px;
top: 0px;
width:400px;
height:50px;
background-color:rgba(38, 38, 38, 0.75);
color:#ffffff;
}
#toolbar input {
vertical-align: middle;
padding-top: 2px;
padding-bottom: 2px;
}
</style>
</head>
<body>
<div id="tempStatis" style="z-index:100">
</div>
<div id="cesiumContainer"></div>
<div id="toolbar" style="z-index:100">
<table>
<tbody>
<tr>
<td>Frame Rate</td>
<td>
<input type="range" min="1" max="60" step="1" data-bind="value: days, valueUpdate: 'input'">
<input type="text" size="5" data-bind="value: days">
</td>
</tr>
</tbody>
</table>
</div>
<script>
var monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
var clock;
var viewModel = {
days: 0
};
var defaultDays = 7;
function onload(Cesium,CesiumHeatmap,echarts) {
///////////////////////////////
Cesium.knockout.track(viewModel);
var toolbar = document.getElementById('toolbar');
Cesium.knockout.applyBindings(viewModel, toolbar);
function subscribeLayerParameter(name) {
Cesium.knockout.getObservable(viewModel, name).subscribe(
function(newValue) {
if(clock){
clock.multiplier = 1*60*60*24*newValue;
}
}
);
}
subscribeLayerParameter('days');
viewModel.days = defaultDays;
///////////////////////////////
var startDay = new Date("1 2,2006");
var endDay = new Date("12 30,2016");
var startTime = Cesium.JulianDate.fromDate(startDay);
var stopTime = Cesium.JulianDate.fromDate(endDay);
clock = new Cesium.Clock({
startTime : startTime,
currentTime : startTime,
Number:1,
stopTime : stopTime,
clockRange : Cesium.ClockRange.LOOP_STOP,
clockStep : Cesium.ClockStep.SYSTEM_CLOCK_MULTIPLIER,
multiplier:1*60*60*24*defaultDays
});
clock.shouldAnimate = true;
vmClock = new Cesium.ClockViewModel(clock);
var viewer = new Cesium.Viewer('cesiumContainer',{
animation:true,
timeline:true,
skyBox : false,
skyAtmosphere : false,
baseLayerPicker : false,
clockViewModel:vmClock,
imageryProvider :new Cesium.SingleTileImageryProvider({
url : './images/globe.jpg'
})
});
var timeline = viewer.timeline;
timeline.zoomTo(startTime,stopTime);
clock = viewer.clock;
///////////////////////////
var dateArray = [];
for(var i = 2006;i<2017;i++){
for (var j=1;j<13;j++){
dateArray.push(i.toString() + "." + j.toString());
}
}
var tempArray = [
0.708,1.235,0.99,0.712,0.431,0.917,0.635,0.985,0.769,1.03,0.832,1.348,1.995,1.03,1.167,1.476,1.164,0.793,0.813,0.843,0.83,1.073,0.969,0.872,0.262,0.383,1.59,0.939,0.69,0.619,0.767,0.68,0.691,1.134,1.092,0.737,1.104,0.895,0.757,0.991,0.755,0.678,0.828,0.749,1.047,0.866,0.896,0.662,1.149,1.191,1.415,1.309,1.055,0.88,0.803,0.86,0.764,1.184,1.362,0.647,0.7,0.549,0.7,2,1.141,0.633,0.852,1.076,1.096,0.806,1.09,0.69,1.029,0.573,0.435,0.699,1.329,1.231,0.972,0.661,0.803,0.905,1.162,1.025,0.45,1.093,1.023,0.939,0.692,0.84,1.041,0.588,0.836,1.034,0.987,1.295,1.071,1.144,0.3,1.057,1.237,1.213,0.812,0.458,0.967,0.976,1.057,0.575,1.193,1.296,1.463,1.428,0.965,0.965,0.977,0.637,0.839,0.869,1.494,1.287,1.789,1.618,2.186,2.137,1.805,1.253,0.846,0.89,1.375,1.008,1.002,1.089,1.261];
var option = {
xAxis : [
{
type : 'category',
boundaryGap : false,
data : dateArray
}
],
yAxis : [
{
type : 'value',
axisLabel : {
formatter: '{value}'
}
}
],
series : [
{
name:'当前',
type:'scatter',
symbolSize: 6,
data:[["2006.1",0.708]]
},
{
name:'温差',
type:'line',
data:tempArray,
markLine : {
data : [
{type : 'average', name: '平均值'}
]
}
}
]
};
var canvas=document.getElementById("tempStatis");
var myChart = echarts.init(canvas);
myChart.setOption(option);
///////////////////////////
/////////////////////////////////////////////////
var imageryLayers = viewer.imageryLayers;
var p0 = new Cesium.SingleTileImageryProvider({
url : './images/LandSurfaceTemperature/2006.1.jpg'
});
var p1 = new Cesium.SingleTileImageryProvider({
url : './images/LandSurfaceTemperature/2006.2.jpg'
});
var layer0 = imageryLayers.addImageryProvider(p0);
var layer1 = imageryLayers.addImageryProvider(p1);
layer1.alpha = 0;
////////////////////////////////////////////////
viewer.animation.viewModel.timeFormatter = function(date, viewModel) {
var gregorianDate = Cesium.JulianDate.clone(clock.currentTime);
var currentTime = Cesium.JulianDate.toGregorianDate(gregorianDate);
var millisecond = Math.round(currentTime.millisecond);
return Cesium.sprintf("%02d:%02d:%02d.%03d", currentTime.hour, currentTime.minute, currentTime.second, millisecond);
};
var currentMonth = 1;
viewer.animation.viewModel.dateFormatter = function(date, viewModel) {
var gregorianDate = Cesium.JulianDate.clone(clock.currentTime);
var currentTime = Cesium.JulianDate.toGregorianDate(gregorianDate);
var nY = currentTime.year;
var nM = currentTime.month;
var nD = currentTime.day;
if(layer0.alpha >= 0 ) {
var alpha = nD / 30;
layer0.alpha = 1 - alpha;
layer1.alpha = alpha;
}
if(currentMonth != nM) {
updateLayers(nY,nM);
currentMonth = nM;
}
var strIndex = nY + "." + nM;
var value = tempArray[(nY-2006) * 12 + nM - 1];
myChart.addData([
[
0, // 系列索引
[strIndex,value], // 新增数据
false, // 新增数据是否从队列头部插入
false
]
]);
return monthNames[currentTime.month - 1] + ' ' + currentTime.day + ' ' + currentTime.year;
};
function updateLayers(nY,nM) {
var urlNew = "./images/LandSurfaceTemperature/" + nY + "." + nM + ".jpg";
var pNew = new Cesium.SingleTileImageryProvider({
url :urlNew
});
var layerNew = imageryLayers.addImageryProvider(pNew);
imageryLayers.remove(layer0);
layer0 = layer1;
layer0.alpha = 1;
layer1 = layerNew;
layer1.alpha = 0;
}
}
</script>
</body>