An error occurred while loading the file. Please try again.
Projektarbeit.html 22.03 KiB
<!DOCTYPE html>
<html lang="en">
  <head>
    <!-- Use correct character set. -->
    <meta charset="utf-8" />
    <!-- Tell IE to use the latest, best version. -->
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <!-- Make the application on mobile take up the full browser screen and disable user scaling. -->
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"
    <title>Harder, Kühn, Schaaf </title>
    <script src="https://cesium.com/downloads/cesiumjs/releases/1.70/Build/Cesium/Cesium.js"></script>
	<style>
      @import url(https://cesium.com/downloads/cesiumjs/releases/1.70/Build/Cesium/Widgets/widgets.css);
      html,
      body,
      #cesiumContainer {
        width: 100%;
        height: 100%;
        margin: 0;
        padding: 0;
        overflow: hidden;
    </style>
 	<style>
      @import url(./Sandcastle/templates/bucket.css);
      #toolbar {
        background: rgba(42, 42, 42, 0.8);
        padding: 4px;
        border-radius: 4px;
      #toolbar .header {
        font-weight: bold;
        padding-top: 5px;
        padding-bottom: 5px;
    </style>
<!---------- 	Buttons der in der Cesiumanwendung      ------------->
	<div id="cesiumContainer" class="fullSize"></div>																																																				
    <div id="loadingOverlay"><h1>Loading...</h1></div>																	
    <div id="toolbar">																									
      <div class="header">Rechtsklick Funktion:</div>																		
      <div id="hoehe">																									
        <input type="radio" value="height" onclick="deletAnalysis"data-bind="checked: rightClickAction">Höhe anzeigen		
      </div>																											
	  <div class="header">Analysis:</div>																					
       <div id="vol">																									
        <input type="radio" value="Volumen"  onclick="printVol" data-bind="checked: rightClickAction">Volumen einfärben					
		</div> 																			
	   <div id="bestrahlung">																							
		<input type="radio" value="Bestr." onclick="printBest" data-bind="checked: rightClickAction">Bestrahlung einfärben	
	   </div> 																											
	   <div class="header">Anzeige</div>																				
		<div id="treeoff">																									
        <input type="radio" value="T.off" onclick="hideTree"  data-bind="checked: rightClickAction">Bäume ausblenden		
		</div>
		<div id="treeon">																									
        <input type="radio" value="T.on" onclick="showTree"  data-bind="checked: rightClickAction">Bäume einblenden	
		</div>
		<div id="vegoff">																									
        <input type="radio" value="V.off" onclick="hideV"  data-bind="checked: rightClickAction">Vegetation ausblenden		
		</div>
		<div id="vegon">																									
<input type="radio" value="V.on" onclick="showV" data-bind="checked: rightClickAction">Vegetation einblenden </div> <div class="header">Datengrundlage</div> <div id="showP"> <input type="radio" value="P.on" onclick="showPrag" data-bind="checked: rightClickAction">Pragfriedhof einblenden </div> <div id="showS"> <input type="radio" value="S.on" onclick="showStoe" data-bind="checked: rightClickAction">Stöckach einblenden </div> </div> </head> <body> <div id="cesiumContainer"></div> <script> Cesium.Ion.defaultAccessToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJiYjhkNDYyZi0zMjM5LTQwNTQtYjkwMC00MDJlZmZiMmI2ODAiLCJpZCI6MzIyNzYsInNjb3BlcyI6WyJhc3IiLCJnYyJdLCJpYXQiOjE1OTY3MTY2OTl9.wqpTd47sfznYCLvdoP9-aZPYAxIqyvhK7QowcoDhs20"; var viewer = new Cesium.Viewer('cesiumContainer'); //------------------------------------------------------------------------------------------------------------------------------// //----------------------Terrain-------------------------------------------------------------------------------------------------// var terrainProvider = new Cesium. createWorldTerrain({ url: Cesium.IonResource.fromAssetId(1), requestWaterMask : true, // required for water effects requestVertexNormals : true // required for terrain lighting }); viewer.terrainProvider = terrainProvider; viewer.scene.globe.enableLighting = true; // set lighting to true viewer.scene.globe.depthTestAgainstTerrain = true; //------------------------------------------------------------------------------------------------------------------------------// //----------------------3D-Tiles-------------------------------------------------------------------------------------------------// var portP = new Number ("1"); //Abfragevariable zur Steuerung der Sichtbarkeit Pragfriedhof var portS = new Number ("0"); //Abfragevariable zur Steuerung der Sichtbarkeit Stöckach //--------Import--------// var tileset = new Cesium.Cesium3DTileset({ url: "./Pragfriedhof/CityModel/tileset.json", show: true, }); var tileset2 = new Cesium.Cesium3DTileset({ url: "./Trees/CityModel/tileset.json", show: true, }); var tileset3 = new Cesium.Cesium3DTileset({ url: "./Stöckach/CityModel/tileset.json", }); var tileset4 = new Cesium.Cesium3DTileset({ url: "./Trees/Vegetation/tileset.json", }); // Blickrichtung anpassen auf importiertes Tileset // tileset.readyPromise .then(function (tileset) { viewer.scene.primitives.add(tileset); // Pragfriedhof anfügen viewer.scene.primitives.add(tileset2); // Bäume anfügen viewer.scene.primitives.add(tileset3); viewer.scene.primitives.add(tileset4); // Vegetation anfügen viewer.zoomTo( tileset, new Cesium.HeadingPitchRange( 0.0, -0.5, tileset.boundingSphere.radius * 2.0
) ) }) .otherwise(function (error) { console.log(error); }); tileset3.style = new Cesium.Cesium3DTileStyle({ show: false, }); tileset4.style = new Cesium.Cesium3DTileStyle({ show: false, color:'rgb(076,135,000)', }); //----Modell mit Gelände verschneiden---_// viewer.scene.globe.depthTestAgainstTerrain = true; //------------------------------------------------------------------------------------------------------------------// //---------------------------------------------Attributabfrage------------------------------------------------------// //-----------------------------------------------Sandcastle---------------------------------------------------------// // HTML overlay for showing feature name on mouseover 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"; // 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 ); // If silhouettes are supported, silhouette features in blue on mouse over and silhouette green on mouse click. // If silhouettes are not supported, change the feature color to yellow on mouse over and green on mouse click. if ( Cesium.PostProcessStageLibrary.isSilhouetteSupported(viewer.scene) ) { // Silhouettes are supported var silhouetteBlue = Cesium.PostProcessStageLibrary.createEdgeDetectionStage(); silhouetteBlue.uniforms.color = Cesium.Color.BLUE; silhouetteBlue.uniforms.length = 0.01; silhouetteBlue.selected = []; var silhouetteGreen = Cesium.PostProcessStageLibrary.createEdgeDetectionStage(); silhouetteGreen.uniforms.color = Cesium.Color.LIME; silhouetteGreen.uniforms.length = 0.01; silhouetteGreen.selected = [];
viewer.scene.postProcessStages.add( Cesium.PostProcessStageLibrary.createSilhouetteStage([ silhouetteBlue, silhouetteGreen, ]) ); // Silhouette a feature blue on hover. viewer.screenSpaceEventHandler.setInputAction(function onMouseMove( movement ) { // If a feature was previously highlighted, undo the highlight silhouetteBlue.selected = []; // Pick a new feature var pickedFeature = viewer.scene.pick(movement.endPosition); if (!Cesium.defined(pickedFeature)) { nameOverlay.style.display = "none"; return; } //---- A feature was picked, so show it's overlay content----// //------------------------------------------------------------// // Highlight the feature if it's not already selected. if (pickedFeature !== selected.feature) { silhouetteBlue.selected = [pickedFeature]; } }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); // Silhouette a feature on selection and show metadata in the InfoBox. viewer.screenSpaceEventHandler.setInputAction(function onLeftClick( movement ) { // If a feature was previously selected, undo the highlight silhouetteGreen.selected = []; // Pick a new feature var pickedFeature = viewer.scene.pick(movement.position); if (!Cesium.defined(pickedFeature)) { clickHandler(movement); return; } // Select the feature if it's not already selected if (silhouetteGreen.selected[0] === pickedFeature) { return; } // Save the selected feature's original color var highlightedFeature = silhouetteBlue.selected[0]; if (pickedFeature === highlightedFeature) { silhouetteBlue.selected = []; } // Highlight newly selected feature silhouetteGreen.selected = [pickedFeature]; // Set feature infobox description var featureName = pickedFeature.getProperty("name"); selectedEntity.name = featureName; selectedEntity.description = 'Loading <div class="cesium-infoBox-loading"></div>'; viewer.selectedEntity = selectedEntity; selectedEntity.description = '<table class="cesium-infoBox-defaultTable"><tbody>' + "<tr><th>gml_id</th><td>" + pickedFeature.getProperty("gml_id") +
"</td></tr>" + "<tr><th>Bestrahlungsstarke [W/qm]</th><td>" + pickedFeature.getProperty("Bestrahlungsstarke") + "</td></tr>" + "<tr><th>Volumen [qm]</th><td>" + pickedFeature.getProperty("Volumen") + "</tbody></table>"; }, Cesium.ScreenSpaceEventType.LEFT_CLICK); } else { // Silhouettes are not supported. Instead, change the feature color. // Information about the currently highlighted feature var highlighted = { feature: undefined, originalColor: new Cesium.Color(), }; // Color a feature yellow on hover. viewer.screenSpaceEventHandler.setInputAction(function onMouseMove( movement ) { // 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 pickedFeature = viewer.scene.pick(movement.endPosition); if (!Cesium.defined(pickedFeature)) { 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 = pickedFeature.getProperty("name"); if (!Cesium.defined(name)) { name = pickedFeature.getProperty("id"); } nameOverlay.textContent = name; // Highlight the feature if it's not already selected. if (pickedFeature !== selected.feature) { highlighted.feature = pickedFeature; Cesium.Color.clone( pickedFeature.color, highlighted.originalColor ); pickedFeature.color = Cesium.Color.YELLOW; } }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); // Color a feature on selection and show metadata in the InfoBox. viewer.screenSpaceEventHandler.setInputAction(function onLeftClick( movement ) { // If a feature was previously selected, undo the highlight if (Cesium.defined(selected.feature)) { selected.feature.color = selected.originalColor; selected.feature = undefined; } // Pick a new feature var pickedFeature = viewer.scene.pick(movement.position); if (!Cesium.defined(pickedFeature)) { clickHandler(movement); return; }
// Select the feature if it's not already selected if (selected.feature === pickedFeature) { return; } selected.feature = pickedFeature; // Save the selected feature's original color if (pickedFeature === highlighted.feature) { Cesium.Color.clone( highlighted.originalColor, selected.originalColor ); highlighted.feature = undefined; } else { Cesium.Color.clone(pickedFeature.color, selected.originalColor); } // Highlight newly selected feature pickedFeature.color = Cesium.Color.LIME; // Set feature infobox description var featureName = pickedFeature.getProperty("name"); selectedEntity.name = featureName; selectedEntity.description = 'Loading <div class="cesium-infoBox-loading"></div>'; viewer.selectedEntity = selectedEntity; selectedEntity.description = '<table class="cesium-infoBox-defaultTable"><tbody>' + "<tr><th>BIN</th><td>" + pickedFeature.getProperty("BIN") + "</td></tr>" + "<tr><th>DOITT ID</th><td>" + pickedFeature.getProperty("DOITT_ID") + "</td></tr>" + "<tr><th>SOURCE ID</th><td>" + pickedFeature.getProperty("SOURCE_ID") + "</td></tr>" + "<tr><th>Longitude</th><td>" + pickedFeature.getProperty("longitude") + "</td></tr>" + "<tr><th>Latitude</th><td>" + pickedFeature.getProperty("latitude") + "</td></tr>" + "<tr><th>Height</th><td>" + pickedFeature.getProperty("height") + "</td></tr>" + "<tr><th>Terrain Height (Ellipsoid)</th><td>" + pickedFeature.getProperty("TerrainHeight") + "</td></tr>" + "</tbody></table>"; }, Cesium.ScreenSpaceEventType.LEFT_CLICK); } //------------------------------------------------------------------------------------------------------------------------------// //----------------------------------------------Schaltfläche ------------------------------------------------------------------// //-------------------------------------Einfärben sowie Ein-/ und Ausblenden ----------------------------------------------------// var scene = viewer.scene; if (!scene.pickPositionSupported) { window.alert("This browser does not support pickPosition."); } var viewModel = { rightClickAction: "height", middleClickAction: "hide", }; Cesium.knockout.track(viewModel);
var toolbar = document.getElementById("toolbar"); Cesium.knockout.applyBindings(viewModel, toolbar); var annotations = scene.primitives.add(new Cesium.LabelCollection()); var handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas); handler.setInputAction(function (movement) { var feature = scene.pick(movement.position); if (!Cesium.defined(feature)) { return; } //---------------------------------Rechtsklick----------------------------------// var action = viewModel.rightClickAction; if (action === "height") { height(movement, feature); } else {} }, Cesium.ScreenSpaceEventType.RIGHT_CLICK); handler.setInputAction(function (movement) { var feature = scene.pick(movement.position); if (!Cesium.defined(feature)) { return; } //-------------------------------------Höhenmarker-------------------------------------// //-----------------------------------------------------------------------------------// }); function height(movement, feature) { if (scene.pickPositionSupported) { var cartesian = scene.pickPosition(movement.position); if (Cesium.defined(cartesian)) { var cartographic = Cesium.Cartographic.fromCartesian(cartesian); var height = cartographic.height.toFixed(2) + " m"; annotations.add({ position: cartesian, text: height, showBackground: true, font: "14px monospace", horizontalOrigin: Cesium.HorizontalOrigin.LEFT, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, disableDepthTestDistance: Number.POSITIVE_INFINITY, }); } } } //-----------------------------------Einfärbung------------------------------------// //--------------------------------------------------------------------------------// document.getElementById("hoehe").onclick = function deletAnalysis() { if(portP == "1"){ portS= "2", tileset.style = new Cesium.Cesium3DTileStyle({ color: { conditions: [ ["true", "rgb(232, 232, 232)"], ], }, });} if(portS== "1"){ portP= "2", tileset3.style = new Cesium.Cesium3DTileStyle({ color: { conditions: [ ["true", "rgb(232, 232, 232)"], ], }, });}
} document.getElementById("vol").onclick = function printVol() { if(portP== "1"){ portS= "2", tileset.style = new Cesium.Cesium3DTileStyle({ color: { conditions: [ ["Number(${Volumen})>= 30000", "rgb(000,000,255)"], ["Number(${Volumen})>= 18000", "rgb(51,51,255)"], ["Number(${Volumen})>= 10000", "rgb(121,205,205)"], ["Number(${Volumen})>= 6000", "rgb(084,255,159)"], ["Number(${Volumen})>= 5000", "rgb(000,139,069)"], ["Number(${Volumen})>= 3000", "rgb(127,255,000)"], ["Number(${Volumen})>= 1000", "rgb(202,255,112)"], ["Number(${Volumen})>= 500", "rgb(255,246,143)"], ["Number(${Volumen})>= 0" , "rgb(205,190,112)"], ["true", "rgb(127, 59, 8)"], ], }, });} if(portS== "1"){ portP= "2", tileset3.style = new Cesium.Cesium3DTileStyle({ color: { conditions: [ ["Number(${Volumen})>= 30000", "rgb(000,000,255)"], ["Number(${Volumen})>= 18000", "rgb(51,51,255)"], ["Number(${Volumen})>= 10000", "rgb(121,205,205)"], ["Number(${Volumen})>= 6000", "rgb(084,255,159)"], ["Number(${Volumen})>= 5000", "rgb(000,139,069)"], ["Number(${Volumen})>= 3000", "rgb(127,255,000)"], ["Number(${Volumen})>= 1000", "rgb(202,255,112)"], ["Number(${Volumen})>= 500", "rgb(255,246,143)"], ["Number(${Volumen})>= 0" , "rgb(205,190,112)"], ["true", "rgb(127, 59, 8)"], ], }, });} } document.getElementById("bestrahlung").onclick = function printInc() { if(portP== "1"){ portS= "2", tileset.style = new Cesium.Cesium3DTileStyle({ color: { conditions: [ ["Number(${Bestrahlungsstarke})>= 120", "rgb(139, 026, 026)"], ["Number(${Bestrahlungsstarke})>= 111", "rgb(255, 048, 048)"], ["Number(${Bestrahlungsstarke})>= 109", "rgb(205, 102, 029)"], ["Number(${Bestrahlungsstarke})>= 107", "rgb(255, 127, 036)"], ["Number(${Bestrahlungsstarke})>= 105", "rgb(139, 117, 000)"], ["Number(${Bestrahlungsstarke})>= 103" , "rgb(255, 255, 000)"], ["Number(${Bestrahlungsstarke})>= 90" , "rgb(205, 190, 112)"], ["Number(${Bestrahlungsstarke})>= 85" , "rgb(110, 139, 061)"], ["Number(${Bestrahlungsstarke})>= 80" ,"rgb(192, 255, 062)"], ["true", "rgb(127, 59, 8)"], ], }, }); } if(portS== "1"){ portP= "2", tileset3.style = new Cesium.Cesium3DTileStyle({ color: { conditions: [ ["Number(${Bestrahlungsstarke})>= 120", "rgb(139, 026, 026)"], ["Number(${Bestrahlungsstarke})>= 111", "rgb(255, 048, 048)"], ["Number(${Bestrahlungsstarke})>= 109", "rgb(205, 102, 029)"], ["Number(${Bestrahlungsstarke})>= 107", "rgb(255, 127, 036)"], ["Number(${Bestrahlungsstarke})>= 105", "rgb(139, 117, 000)"],
["Number(${Bestrahlungsstarke})>= 103" , "rgb(255, 255, 000)"], ["Number(${Bestrahlungsstarke})>= 90" , "rgb(205, 190, 112)"], ["Number(${Bestrahlungsstarke})>= 85" , "rgb(110, 139, 061)"], ["Number(${Bestrahlungsstarke})>= 0" ,"rgba(255, 255, 255, 0.2)"], ["true", "rgba(255, 255,255, 0.2)"], ], }, });} } //-------------- Vegetation sichtbar schalten --------------// document.getElementById("treeoff").onclick = function hideTrees() { tileset2.style = new Cesium.Cesium3DTileStyle({ show: false, }); } document.getElementById("treeon").onclick = function showTrees() { tileset2.style = new Cesium.Cesium3DTileStyle({ show: true, }); } document.getElementById("vegoff").onclick = function hideV() { tileset4.style = new Cesium.Cesium3DTileStyle({ show: false, color:'rgb(076,135,000)', }); } document.getElementById("vegon").onclick = function showV() { tileset4.style = new Cesium.Cesium3DTileStyle({ show: true, color:'rgb(076,135,000)', }); } //-------------- Datengrundlage umschalten --------------// document.getElementById("showP").onclick = function showPrag() { portS= "2", portP= "1", tileset3.style = new Cesium.Cesium3DTileStyle({ show: false, }); tileset.style = new Cesium.Cesium3DTileStyle({ show: true, }); } document.getElementById("showS").onclick = function showStoe() { portS= "1", portP= "2", tileset3.style = new Cesium.Cesium3DTileStyle({ show: true, }); tileset.style = new Cesium.Cesium3DTileStyle({ show: false, }); } function futurfunction () { //--------------------------Platzhalter-----------------------------// } function futurefunction2 () { //----------------------------Platzhalter-----------------------------// } </script> </body> </html>