cesium_ca13.html 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="description" content="">
  6. <meta name="author" content="">
  7. <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
  8. <title>Potree Viewer</title>
  9. <link rel="stylesheet" type="text/css" href="../build/potree/potree.css">
  10. <link rel="stylesheet" type="text/css" href="../libs/jquery-ui/jquery-ui.min.css">
  11. <link rel="stylesheet" type="text/css" href="../libs/openlayers3/ol.css">
  12. <link rel="stylesheet" type="text/css" href="../libs/spectrum/spectrum.css">
  13. <link rel="stylesheet" type="text/css" href="../libs/jstree/themes/mixed/style.css">
  14. <link rel="stylesheet" type="text/css" href="../libs/Cesium/Widgets/CesiumWidget/CesiumWidget.css">
  15. </head>
  16. <body>
  17. <script src="../libs/jquery/jquery-3.1.1.min.js"></script>
  18. <script src="../libs/spectrum/spectrum.js"></script>
  19. <script src="../libs/jquery-ui/jquery-ui.min.js"></script>
  20. <script src="../libs/other/BinaryHeap.js"></script>
  21. <script src="../libs/tween/tween.min.js"></script>
  22. <script src="../libs/d3/d3.js"></script>
  23. <script src="../libs/proj4/proj4.js"></script>
  24. <script src="../libs/openlayers3/ol.js"></script>
  25. <script src="../libs/i18next/i18next.js"></script>
  26. <script src="../libs/jstree/jstree.js"></script>
  27. <script src="../build/potree/potree.js"></script>
  28. <script src="../libs/plasio/js/laslaz.js"></script>
  29. <script src="../libs/Cesium/Cesium.js"></script>
  30. <!-- INCLUDE ADDITIONAL DEPENDENCIES HERE -->
  31. <!-- INCLUDE SETTINGS HERE -->
  32. <div class="potree_container" style="position: absolute; width: 100%; height: 100%; left: 0px; top: 0px; ">
  33. <div id="potree_render_area" style="background-image: url('../build/potree/resources/images/background.jpg');">
  34. <div id="cesiumContainer" style="position: absolute; width: 100%; height: 100%; background-color:green"></div>
  35. </div>
  36. <div id="potree_sidebar_container"> </div>
  37. </div>
  38. <script type="module">
  39. import * as THREE from "../libs/three.js/build/three.module.js";
  40. window.cesiumViewer = new Cesium.Viewer('cesiumContainer', {
  41. useDefaultRenderLoop: false,
  42. animation: false,
  43. baseLayerPicker : false,
  44. fullscreenButton: false,
  45. geocoder: false,
  46. homeButton: false,
  47. infoBox: false,
  48. sceneModePicker: false,
  49. selectionIndicator: false,
  50. timeline: false,
  51. navigationHelpButton: false,
  52. imageryProvider : Cesium.createOpenStreetMapImageryProvider({url : 'https://a.tile.openstreetmap.org/'}),
  53. terrainShadows: Cesium.ShadowMode.DISABLED,
  54. });
  55. let cp = new Cesium.Cartesian3(4303414.154026048, 552161.235598733, 4660771.704035539);
  56. cesiumViewer.camera.setView({
  57. destination : cp,
  58. orientation: {
  59. heading : 10,
  60. pitch : -Cesium.Math.PI_OVER_TWO * 0.5,
  61. roll : 0.0
  62. }
  63. });
  64. window.potreeViewer = new Potree.Viewer(document.getElementById("potree_render_area"), {
  65. useDefaultRenderLoop: false
  66. });
  67. potreeViewer.setEDLEnabled(true);
  68. potreeViewer.setFOV(60);
  69. potreeViewer.setPointBudget(1_000_000);
  70. potreeViewer.setMinNodeSize(0);
  71. potreeViewer.loadSettingsFromURL();
  72. potreeViewer.setBackground(null);
  73. potreeViewer.loadGUI(() => {
  74. potreeViewer.setLanguage('en');
  75. $("#menu_appearance").next().show();
  76. $("#menu_tools").next().show();
  77. $("#menu_scene").next().show();
  78. potreeViewer.toggleSidebar();
  79. });
  80. Potree.loadPointCloud("http://5.9.65.151/mschuetz/potree/resources/pointclouds/opentopography/CA13_1.4/cloud.js", "CA13", function(e){
  81. let pointcloud = e.pointcloud;
  82. let scene = potreeViewer.scene;
  83. let material = pointcloud.material;
  84. scene.addPointCloud(pointcloud);
  85. material.size = 1;
  86. material.pointSizeType = Potree.PointSizeType.ADAPTIVE;
  87. potreeViewer.scene.view.setView(
  88. [689429.64, 3877023.77, 42878.97],
  89. [696072.86, 3916730.04, 82.04],
  90. );
  91. let pointcloudProjection = e.pointcloud.projection;
  92. let mapProjection = proj4.defs("WGS84");
  93. window.toMap = proj4(pointcloudProjection, mapProjection);
  94. window.toScene = proj4(mapProjection, pointcloudProjection);
  95. });
  96. function loop(timestamp){
  97. requestAnimationFrame(loop);
  98. potreeViewer.update(potreeViewer.clock.getDelta(), timestamp);
  99. potreeViewer.render();
  100. if(window.toMap !== undefined){
  101. {
  102. let camera = potreeViewer.scene.getActiveCamera();
  103. let pPos = new THREE.Vector3(0, 0, 0).applyMatrix4(camera.matrixWorld);
  104. let pRight = new THREE.Vector3(600, 0, 0).applyMatrix4(camera.matrixWorld);
  105. let pUp = new THREE.Vector3(0, 600, 0).applyMatrix4(camera.matrixWorld);
  106. let pTarget = potreeViewer.scene.view.getPivot();
  107. let toCes = (pos) => {
  108. let xy = [pos.x, pos.y];
  109. let height = pos.z;
  110. let deg = toMap.forward(xy);
  111. let cPos = Cesium.Cartesian3.fromDegrees(...deg, height);
  112. return cPos;
  113. };
  114. let cPos = toCes(pPos);
  115. let cUpTarget = toCes(pUp);
  116. let cTarget = toCes(pTarget);
  117. let cDir = Cesium.Cartesian3.subtract(cTarget, cPos, new Cesium.Cartesian3());
  118. let cUp = Cesium.Cartesian3.subtract(cUpTarget, cPos, new Cesium.Cartesian3());
  119. cDir = Cesium.Cartesian3.normalize(cDir, new Cesium.Cartesian3());
  120. cUp = Cesium.Cartesian3.normalize(cUp, new Cesium.Cartesian3());
  121. cesiumViewer.camera.setView({
  122. destination : cPos,
  123. orientation : {
  124. direction : cDir,
  125. up : cUp
  126. }
  127. });
  128. let aspect = potreeViewer.scene.getActiveCamera().aspect;
  129. if(aspect < 1){
  130. let fovy = Math.PI * (potreeViewer.scene.getActiveCamera().fov / 180);
  131. cesiumViewer.camera.frustum.fov = fovy;
  132. }else{
  133. let fovy = Math.PI * (potreeViewer.scene.getActiveCamera().fov / 180);
  134. let fovx = Math.atan(Math.tan(0.5 * fovy) * aspect) * 2
  135. cesiumViewer.camera.frustum.fov = fovx;
  136. }
  137. }
  138. cesiumViewer.render();
  139. }
  140. }
  141. requestAnimationFrame(loop);
  142. </script>
  143. </body>
  144. </html>