Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJiNWFjZDJiMy1hYzk3LTQ2YWUtYWVjYi01MDk1OGVlZGI0NTgiLCJpZCI6MTEwNzEsInNjb3BlcyI6WyJhc3IiLCJnYyJdLCJpYXQiOjE1NTgwMjE1Mjh9.lF6TGAJrX3qMGBt5egdAA7SJYNnaYX17mhURwGg_Kbg'; ////////////////////////////////////////////////////////////////////////// // Creating the Viewer ////////////////////////////////////////////////////////////////////////// var viewer = new Cesium.Viewer('cesiumContainer', { scene3DOnly: true, selectionIndicator: false, timeline: false, animation: false, shadow: false, // // Set default basemap imageryProvider : Cesium.ArcGisMapServerImageryProvider({ url : 'https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer' }), baseLayerPicker: true }); viewer.clock.shouldAnimate = false; viewer.scene.globe.enableLighting = false; viewer.clock.startTime = Cesium.JulianDate.fromIso8601("2019-09-20T13:00:00Z"); viewer.clock.stopTime = Cesium.JulianDate.fromIso8601("2019-09-20T13:20:00Z"); viewer.clock.currentTime = Cesium.JulianDate.fromIso8601("2019-09-20T13:00:00Z"); document.getElementById("legend").style.display = "none"; //defining legends hidden by default ////////////////////////////////////////////////////////////////////////// // Configuring the camera ////////////////////////////////////////////////////////////////////////// // // Create an initial camera view var initialPosition = Cesium.Cartesian3.fromDegrees(-73.993092, 40.655215, 600); var initialOrientation = new Cesium.HeadingPitchRoll.fromDegrees(354, -20, 0); var homeCameraView = { destination : initialPosition, orientation : { heading : initialOrientation.heading, pitch : initialOrientation.pitch, roll : initialOrientation.roll } }; // // Set the initial view viewer.scene.camera.setView(homeCameraView); // set home button to initial view viewer.homeButton.viewModel.command.beforeExecute.addEventListener(function (e) { e.cancel = true; viewer.scene.camera.flyTo(homeCameraView); }); viewer.camera.changed.addEventListener(function() { var deg = Math.round( Cesium.Math.toDegrees(viewer.camera.heading)) console.log('Heading:', deg) var deg = Math.round( Cesium.Math.toDegrees(viewer.camera.pitch)) console.log('Pitch:', deg) var deg = Math.round( Cesium.Math.toDegrees(viewer.camera.roll)) console.log('Roll:', deg) }); ////////////////////////////////////////////////////////////////////////// // Loading GeoJSON with polygon outline - strokewidth is an issue with windows ////////////////////////////////////////////////////////////////////////// // var jsonOptions = { // stroke: Cesium.Color.DARKRED, //fill: Cesium.Color.WHITESMOKE.withAlpha(0), // strokeWidth: 5 // }; // var gowanusboundary = Cesium.GeoJsonDataSource.load('./Source/Data/Gowanus.geojson',jsonOptions); // viewer.dataSources.add(gowanusboundary); ////////////////////////////////////////////////////////////////////////// // Load 3D Tileset ////////////////////////////////////////////////////////////////////////// var currentgowanus = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({url: './Source/Data/Bldg/Current_Gowanus/tileset.json'})); var bau2050gowanus = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({url: './Source/Data/Bldg/BAU2050_Gowanus/tileset.json'})); var bp2050gowanus = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({url: './Source/Data/Bldg/BP2050_Gowanus/tileset.json'})); var bp2050gowanusv1 = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({url: './Source/Data/Bldg/BP2050_Gowanus_v1/tileset.json'})); currentgowanus.show = true; bau2050gowanus.show = false; bp2050gowanus.show = false; bp2050gowanusv1.show = false; //currentgowanus.style = new Cesium.Cesium3DTileStyle({ //color : 'color("white")'}); //bau2050gowanus.style = new Cesium.Cesium3DTileStyle({ //color : 'color("BLACK")'}); var selectscenario = document.getElementById('selectscenario'); function setscenario() { var selectedscenario = selectscenario.options[selectscenario.selectedIndex].value; if (selectedscenario === 'current') {currentgowanus.show = true; bau2050gowanus.show = false; bp2050gowanus.show = false; bp2050gowanusv1.show = false;} else if (selectedscenario === 'bau') {currentgowanus.show = false; bau2050gowanus.show = true; bp2050gowanus.show = false; bp2050gowanusv1.show = false;} else if (selectedscenario === 'bp') {currentgowanus.show = false; bau2050gowanus.show = false; bp2050gowanus.show = true; bp2050gowanusv1.show = false;} else if (selectedscenario === 'bp1') {currentgowanus.show = false; bau2050gowanus.show = false; bp2050gowanus.show = false; bp2050gowanusv1.show = true;} } selectscenario.addEventListener('change', setscenario); ////////////////////////////////////////////////////////////////////////// // Style 3D Tileset ////////////////////////////////////////////////////////////////////////// var defaultstyle = new Cesium.Cesium3DTileStyle({ color : "color('WHITE')", show: true }); var energydemandstyle = new Cesium.Cesium3DTileStyle({ color : { conditions : [ ["(${Specific_space_heating_demand} === 0)", "color('#000000')"], ["(${Specific_space_heating_demand} > 0) && (${Specific_space_heating_demand} < 60)", "color('#33ACFF')"], ["(${Specific_space_heating_demand} >= 60) && (${Specific_space_heating_demand} < 120)", "color('#2AFF00')"], ["(${Specific_space_heating_demand} >= 120) && (${Specific_space_heating_demand} < 170)", "color('#FFFF00')"], ["(${Specific_space_heating_demand} >= 170) && (${Specific_space_heating_demand} < 230)", "color('#FFA200')"], ["(${Specific_space_heating_demand} >= 230)", "color('#FF0000')"] ] }, show: true }); var colorstyle1 = document.getElementById('3dbuildings'); var colorstyle2 = document.getElementById('heatdemand'); function set3DColorStyle() { if (colorstyle1.checked) { currentgowanus.style = defaultstyle; bau2050gowanus.style = defaultstyle; bp2050gowanus.style = defaultstyle; bp2050gowanusv1.style = defaultstyle; document.getElementById("legend").style.display = "none"; } else if (colorstyle2.checked) { currentgowanus.style = energydemandstyle; bau2050gowanus.style = energydemandstyle; bp2050gowanus.style = energydemandstyle; bp2050gowanusv1.style = energydemandstyle; document.getElementById("legend").style.display = "block"; } } colorstyle1.addEventListener('change', set3DColorStyle); colorstyle2.addEventListener('change', set3DColorStyle); ////////////////////////////////////////////////////////////////////////// // Custom mouse interaction for highlighting and selecting ////////////////////////////////////////////////////////////////////////// //Style the overlay var nameOverlay = document.createElement('div'); viewer.container.appendChild(nameOverlay); nameOverlay.className = 'backdrop'; nameOverlay.style.display = 'none'; nameOverlay.style.position = 'absolute'; nameOverlay.style.bottom = '0'; nameOverlay.style.left = '0'; nameOverlay.style['pointer-events'] = 'none'; nameOverlay.style.padding = '4px'; nameOverlay.style.backgroundColor = 'black'; nameOverlay.style.fontFamily = 'Fira Sans, sans-serif'; //Selecting a Building var Pickers_3DTile_Activated = true; // Information about the currently highlighted feature function active3DTilePicker() { var highlighted = { feature: undefined, originalColor: new Cesium.Color() }; // Information about the currently selected feature var selected = { feature: undefined, originalColor: new Cesium.Color() }; // An entity object which will hold info about the currently selected feature for infobox display var selectedEntity = new Cesium.Entity(); // Get default left click handler for when a feature is not picked on left click var clickHandler = viewer.screenSpaceEventHandler.getInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK); // Color a feature yellow on hover. viewer.screenSpaceEventHandler.setInputAction(function onMouseMove(movement) { if (Pickers_3DTile_Activated) { // If a feature was previously highlighted, undo the highlight if (Cesium.defined(highlighted.feature)) { highlighted.feature.color = highlighted.originalColor; highlighted.feature = undefined; } // Pick a new feature var picked3DtileFeature = viewer.scene.pick(movement.endPosition); if (!Cesium.defined(picked3DtileFeature)) { nameOverlay.style.display = 'none'; return; } // A feature was picked, so show it's overlay content nameOverlay.style.display = 'block'; nameOverlay.style.bottom = viewer.canvas.clientHeight - movement.endPosition.y + 'px'; nameOverlay.style.left = movement.endPosition.x + 'px'; var name = picked3DtileFeature.getProperty('PrimaryUsageZoneType'); if (!Cesium.defined(name)) { name = picked3DtileFeature.getProperty('PrimaryUsageZoneType'); } nameOverlay.textContent = name; // Highlight the feature if it's not already selected. if (picked3DtileFeature !== selected.feature) { highlighted.feature = picked3DtileFeature; Cesium.Color.clone(picked3DtileFeature.color, highlighted.originalColor); picked3DtileFeature.color = Cesium.Color.GREY; } } }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); // Color a feature on selection and show metadata in the InfoBox. viewer.screenSpaceEventHandler.setInputAction(function onLeftClick(movement) { if (Pickers_3DTile_Activated) { // If a feature was previously selected, undo the highlight if (Cesium.defined(selected.feature)) { selected.feature.color = selected.originalColor; selected.feature = undefined; $("#chart").html(""); var options = null; } // Pick a new feature var picked3DtileFeature = viewer.scene.pick(movement.position); if (!Cesium.defined(picked3DtileFeature)) { clickHandler(movement); return; } // Select the feature if it's not already selected if (selected.feature === picked3DtileFeature) { return; } selected.feature = picked3DtileFeature; // Save the selected feature's original color if (picked3DtileFeature === highlighted.feature) { Cesium.Color.clone(highlighted.originalColor, selected.originalColor); highlighted.feature = undefined; } else { Cesium.Color.clone(picked3DtileFeature.color, selected.originalColor); } // Highlight newly selected feature picked3DtileFeature.color = Cesium.Color.AQUA; // Set feature infobox description var featureName = "Net Zero Gowanus 3D Viewer"; selectedEntity.name = featureName; selectedEntity.description = 'Loading
'; viewer.selectedEntity = selectedEntity; selectedEntity.description = 'Building ID | ' + picked3DtileFeature.getProperty('GMLId') + ' |
---|---|
Year of Construction | ' + picked3DtileFeature.getProperty('Year of construction') + ' |
PLUTO Code | ' + picked3DtileFeature.getProperty('ALKIS code') + ' |
Primary Building Usage | ' + picked3DtileFeature.getProperty('PrimaryUsageZoneType') + ' |
Building Footprint | ' + picked3DtileFeature.getProperty('Footprint area') + ' ' + 'm²' + ' |
Building Volume | ' + picked3DtileFeature.getProperty('Gross volume') + ' ' + 'm³' + ' |
Mean U-value | ' + picked3DtileFeature.getProperty('Mean Uvalue') + ' ' + 'W/m²·K' +' |
Sp. Domestic Hot Water Demand | ' + picked3DtileFeature.getProperty('Specific domestic hot water demand') + ' ' + 'kWh/m²·a' + ' |
Sp. Heating Demand | ' + picked3DtileFeature.getProperty('Specific_space_heating_demand') + ' ' + 'kWh/m²·a' + ' |