cesium-examples/map/3d/static/Cesium/Apps/Sandcastle/gallery/Montreal Point Cloud.html

326 lines
10 KiB
HTML
Raw Normal View History

2019-09-06 09:23:05 +08:00
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
<meta name="description" content="Point cloud of the city of Montreal, Canada captured in 2015 with a resolution of 20 cm. Tiled and hosted by Cesium ion.">
<meta name="cesium-sandcastle-labels" content="ion Assets">
<title>Montreal Point Cloud</title>
<script type="text/javascript" src="../Sandcastle-header.js"></script>
<script type="text/javascript" src="../../../ThirdParty/requirejs-2.1.20/require.js"></script>
<script type="text/javascript">
require.config({
baseUrl : '../../../Source',
waitSeconds : 60
});
</script>
</head>
<body class="sandcastle-loading" data-sandcastle-bucket="bucket-requirejs.html">
<style>
@import url(../templates/bucket.css);
#toolbar {
background: rgba(42, 42, 42, 0.8);
padding: 4px;
border-radius: 4px;
}
#toolbar input {
vertical-align: middle;
padding-top: 2px;
padding-bottom: 2px;
}
#toolbar .header {
font-weight: bold;
}
</style>
<div id="cesiumContainer" class="fullSize"></div>
<div id="loadingOverlay"><h1>Loading...</h1></div>
<div id="toolbar">
<table><tbody>
<tr><td class="header">Classification Types</td></tr>
<tr>
<td>Ground</td>
<td><input type="checkbox" data-bind="checked: ground"></td>
</tr>
<tr>
<td>Low Vegetation</td>
<td><input type="checkbox" data-bind="checked: low_vegetation"></td>
</tr>
<tr>
<td>Medium Vegetation</td>
<td><input type="checkbox" data-bind="checked: medium_vegetation"></td>
</tr>
<tr>
<td>High Vegetation</td>
<td><input type="checkbox" data-bind="checked: high_vegetation"></td>
</tr>
<tr>
<td>Buildings</td>
<td><input type="checkbox" data-bind="checked: buildings"></td>
</tr>
<tr>
<td>Other/Unclassified</td>
<td><input type="checkbox" data-bind="checked: other"></td>
</tr>
</tbody></table>
</div>
<script id="cesium_sandcastle_script">
function startup(Cesium) {
'use strict';
//Sandcastle_Begin
var viewer = new Cesium.Viewer('cesiumContainer', {
terrainProvider: Cesium.createWorldTerrain()
});
// A ~10 billion point 3D Tileset of the city of Montreal, Canada captured in 2015 with a resolution of 20 cm. Tiled and hosted by Cesium ion.
var tileset = viewer.scene.primitives.add(
new Cesium.Cesium3DTileset({
url: Cesium.IonResource.fromAssetId(28945),
pointCloudShading: {
attenuation: true,
maximumAttenuation: 2
}
})
);
// Fly to a nice overview of the city.
viewer.camera.flyTo({
destination : new Cesium.Cartesian3(1223285.2286828577, -4319476.080312792, 4562579.020145769),
orientation : {
direction : new Cesium.Cartesian3(0.63053223097472, 0.47519958296727743, -0.6136892226931869),
up : new Cesium.Cartesian3(0.7699959023135587, -0.4824455703743441, 0.41755548379407276)
},
easingFunction: Cesium.EasingFunction.QUADRATIC_IN_OUT
});
// Add stored views around Montreal. You can add to this list by capturing camera.position, camera.direction and camera.up.
Sandcastle.addToolbarMenu([{
text : 'Overview',
onselect : function() {
viewer.camera.flyTo({
destination : new Cesium.Cartesian3(1268112.9336926902, -4347432.089579957, 4539129.813606778),
orientation : {
direction : new Cesium.Cartesian3(-0.23288147105081208, 0.9376599248561527, -0.25799241415197466),
up : new Cesium.Cartesian3(-0.015748156073159988, 0.2616156268422992, 0.9650436567182887)
},
easingFunction: Cesium.EasingFunction.QUADRATIC_IN_OUT
});
}
}, {
text : 'Highway',
onselect : function() {
viewer.camera.flyTo({
destination : new Cesium.Cartesian3(1266560.143870489, -4278126.842199712, 4542690.264566619),
orientation : {
direction : new Cesium.Cartesian3(-0.3402460635871598, -0.46669052711538217, -0.8163532128400116),
up : new Cesium.Cartesian3(0.08964012922691329, -0.8802940231336787, 0.46588311846138497)
},
easingFunction: Cesium.EasingFunction.QUADRATIC_IN_OUT
});
}
},
{
text : 'Olympic Stadium',
onselect : function() {
viewer.camera.flyTo({
destination : new Cesium.Cartesian3(1267081.619536883, -4290744.917138439, 4530941.041519919),
orientation : {
direction : new Cesium.Cartesian3(-0.735813047510908, 0.6294547560338262, 0.24973159435503312),
up : new Cesium.Cartesian3(-0.09796934684423217, -0.4638476756625683, 0.88048131204549)
},
easingFunction: Cesium.EasingFunction.QUADRATIC_IN_OUT
});
}
},
{
text : 'Biosphere Museum',
onselect : function() {
viewer.camera.flyTo({
destination : new Cesium.Cartesian3(1269319.8408991008, -4293301.826913256, 4527724.561372451),
orientation : {
direction : new Cesium.Cartesian3(-0.742505030107832, -0.3413204607149223, -0.5763563336703441),
up : new Cesium.Cartesian3(-0.04655102331027917, -0.8320643756800384, 0.5527222421370013)
},
easingFunction: Cesium.EasingFunction.QUADRATIC_IN_OUT
});
}
},
{
text : 'St. Joseph\'s Oratory of Mount Royal',
onselect : function() {
viewer.camera.flyTo({
destination : new Cesium.Cartesian3(1263148.6745904868, -4297262.506644816, 4525958.844284831),
orientation : {
direction : new Cesium.Cartesian3(0.6550952540993403, 0.7551122393690295, 0.025606913355780074),
up : new Cesium.Cartesian3(0.46670450470847263, -0.4310758971098583, 0.7722437932516845)
},
easingFunction: Cesium.EasingFunction.QUADRATIC_IN_OUT
});
}
}
]);
// Set up checkboxes for toggling the various classification settings.
var viewModel = {
ground: true,
other: true,
buildings: true,
low_vegetation: true,
medium_vegetation: true,
high_vegetation: true
};
// Assign colors to each classification type.
var pointStyles = {
'unclassified' : {
color: "color('#808080')",
show : true
},
'not_awarded' : {
color: "color('#FFDEAD')",
show : true
},
'ground' : {
color: "color('#FFDEAD')",
show : true
},
'low_vegetation' : {
color: "color('#63FF7E')",
show : true
},
'medium_vegetation' : {
color: "color('#63FF7E')",
show : true
},
'high_vegetation' : {
color: "color('#22B33A')",
show : true
},
'buildings' : {
color: "color('#efefef')",
show : true
},
'low_point' : {
color: "color('#808080')",
show : true
},
'reserved_city_diffusion' : {
color: "color('#808080')",
show : true
}
};
var classificationDictionary = {
'not_awarded' : 1,
'ground' : 2,
'low_vegetation' : 3,
'medium_vegetation' : 4,
'high_vegetation' : 5,
'buildings' : 6,
'low_point' : 7,
'reserved_city_diffusion' : 8,
'unclassified' : -1
};
// This is a helper function to re-apply the styles each time the UI/checkboxes are updated.
function applyStyle(tileset, styles) {
var styleObject = {};
var styleKeys = Object.keys(styles);
styleObject.color = {
conditions: []
};
styleObject.show = {
conditions: []
};
var finalCondition;
for (var i = 0; i < styleKeys.length; ++i) {
var key = styleKeys[i];
var id = classificationDictionary[key];
var colorCondition = ['${Classification} === ' + id, styles[key].color];
var showCondition = ['${Classification} === ' + id, styles[key].show];
if (id === -1) {
colorCondition[0] = true;
showCondition[0] = true;
finalCondition = {
colorCondition: colorCondition,
showCondition: showCondition
};
} else {
styleObject.color.conditions.push(colorCondition);
styleObject.show.conditions.push(showCondition);
}
}
if (Cesium.defined(finalCondition)) {
styleObject.color.conditions.push(finalCondition.colorCondition);
styleObject.show.conditions.push(finalCondition.showCondition);
}
tileset.style = new Cesium.Cesium3DTileStyle(styleObject);
}
// Apply an initial style.
applyStyle(tileset, pointStyles);
Cesium.knockout.track(viewModel);
var toolbar = document.getElementById('toolbar');
Cesium.knockout.applyBindings(viewModel, toolbar);
// Set up the checkboxes.
Cesium.knockout.getObservable(viewModel, 'ground').subscribe(function(show) {
pointStyles.ground.show = show;
pointStyles.not_awarded.show = show;
applyStyle(tileset, pointStyles);
});
Cesium.knockout.getObservable(viewModel, 'low_vegetation').subscribe(function(show) {
pointStyles.low_vegetation.show = show;
applyStyle(tileset, pointStyles);
});
Cesium.knockout.getObservable(viewModel, 'medium_vegetation').subscribe(function(show) {
pointStyles.medium_vegetation.show = show;
applyStyle(tileset, pointStyles);
});
Cesium.knockout.getObservable(viewModel, 'high_vegetation').subscribe(function(show) {
pointStyles.high_vegetation.show = show;
applyStyle(tileset, pointStyles);
});
Cesium.knockout.getObservable(viewModel, 'buildings').subscribe(function(show) {
pointStyles.buildings.show = show;
applyStyle(tileset, pointStyles);
});
Cesium.knockout.getObservable(viewModel, 'other').subscribe(function(show) {
pointStyles.low_point.show = show;
pointStyles.reserved_city_diffusion.show = show;
pointStyles.unclassified.show = show;
applyStyle(tileset, pointStyles);
});
//Sandcastle_End
Sandcastle.finishedLoading();
}
if (typeof Cesium !== 'undefined') {
startup(Cesium);
} else if (typeof require === 'function') {
require(['Cesium'], startup);
}
</script>
</body>
</html>