• cesium在地形上贴地添加各种entity


    目录

    添加带标签的点

     添加billboard

    添加corridor

     添加面polygon

     添加带图片的面polygon

     添加矩形

    添加glb模型

     被遮挡的线用其他颜色标注

    添加贴地线


    官方示例:Cesium Sandcastlehttps://sandcastle.cesium.com/?src=Clamp%20to%20Terrain.html&label=Tutorials

    添加带标签的点

    1. <template>
    2. <div style="height: 100vh">
    3. <div id="cesiumContainer" />
    4. </div>
    5. </template>
    6. <script>
    7. export default {
    8. name: "test",
    9. data() {
    10. return {};
    11. },
    12. mounted() {
    13. const viewer = new Cesium.Viewer("cesiumContainer", {
    14. terrainProvider: Cesium.createWorldTerrain(),
    15. });
    16. viewer.scene.globe.depthTestAgainstTerrain = true;
    17. const e = viewer.entities.add({
    18. position: Cesium.Cartesian3.fromDegrees(-122.1958, 46.1915),
    19. point: {
    20. color: Cesium.Color.SKYBLUE,
    21. pixelSize: 10,
    22. outlineColor: Cesium.Color.YELLOW,
    23. outlineWidth: 3,
    24. heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
    25. },
    26. label: {
    27. text: "紧贴地面",
    28. font: "14pt sans-serif",
    29. heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
    30. horizontalOrigin: Cesium.HorizontalOrigin.LEFT,
    31. verticalOrigin: Cesium.VerticalOrigin.BASELINE,
    32. fillColor: Cesium.Color.BLACK,
    33. showBackground: true,
    34. backgroundColor: new Cesium.Color(1, 1, 1, 0.7),
    35. backgroundPadding: new Cesium.Cartesian2(8, 4),
    36. disableDepthTestDistance: Number.POSITIVE_INFINITY, // draws the label in front of terrain
    37. },
    38. });
    39. viewer.trackedEntity = e;
    40. },
    41. };
    42. </script>

     添加billboard

    资源下载地址:https://sandcastle.cesium.com/images/facility.gif 

    1. <template>
    2. <div style="height: 100vh">
    3. <div id="cesiumContainer" />
    4. </div>
    5. </template>
    6. <script>
    7. export default {
    8. name: "test",
    9. data() {
    10. return {};
    11. },
    12. mounted() {
    13. const viewer = new Cesium.Viewer("cesiumContainer", {
    14. terrainProvider: Cesium.createWorldTerrain(),
    15. });
    16. viewer.scene.globe.depthTestAgainstTerrain = true;
    17. const e = viewer.entities.add({
    18. position: Cesium.Cartesian3.fromDegrees(-122.1958, 46.1915),
    19. billboard: {
    20. image: "facility.gif",
    21. heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
    22. },
    23. });
    24. viewer.trackedEntity = e;
    25. },
    26. };
    27. </script>

    添加corridor

    1. <template>
    2. <div style="height: 100vh">
    3. <div id="cesiumContainer" />
    4. </div>
    5. </template>
    6. <script>
    7. export default {
    8. name: "test",
    9. data() {
    10. return {};
    11. },
    12. mounted() {
    13. const viewer = new Cesium.Viewer("cesiumContainer", {
    14. terrainProvider: Cesium.createWorldTerrain(),
    15. });
    16. viewer.scene.globe.depthTestAgainstTerrain = true;
    17. const e = viewer.entities.add({
    18. corridor: {
    19. positions: Cesium.Cartesian3.fromDegreesArray([
    20. -122.19, 46.1914, -122.21, 46.21, -122.23, 46.21,
    21. ]),
    22. width: 2000.0,
    23. material: Cesium.Color.GREEN.withAlpha(0.5),
    24. },
    25. });
    26. viewer.zoomTo(e);
    27. },
    28. };
    29. </script>

     添加面polygon

    1. <template>
    2. <div style="height: 100vh">
    3. <div id="cesiumContainer" />
    4. </div>
    5. </template>
    6. <script>
    7. export default {
    8. name: "test",
    9. data() {
    10. return {};
    11. },
    12. mounted() {
    13. const viewer = new Cesium.Viewer("cesiumContainer", {
    14. terrainProvider: Cesium.createWorldTerrain(),
    15. });
    16. viewer.scene.globe.depthTestAgainstTerrain = true;
    17. const e = viewer.entities.add({
    18. polygon: {
    19. hierarchy: {
    20. positions: [
    21. new Cesium.Cartesian3(
    22. -2358138.847340281,
    23. -3744072.459541374,
    24. 4581158.5714175375
    25. ),
    26. new Cesium.Cartesian3(
    27. -2357231.4925370603,
    28. -3745103.7886602185,
    29. 4580702.9757762635
    30. ),
    31. new Cesium.Cartesian3(
    32. -2355912.902205431,
    33. -3744249.029778454,
    34. 4582402.154378103
    35. ),
    36. new Cesium.Cartesian3(
    37. -2357208.0209552636,
    38. -3743553.4420488174,
    39. 4581961.863286629
    40. ),
    41. ],
    42. },
    43. material: Cesium.Color.BLUE.withAlpha(0.5),
    44. },
    45. });
    46. viewer.zoomTo(e);
    47. },
    48. };
    49. </script>

     添加带图片的面polygon

     

    1. <template>
    2. <div style="height: 100vh">
    3. <div id="cesiumContainer" />
    4. </div>
    5. </template>
    6. <script>
    7. export default {
    8. name: "test",
    9. data() {
    10. return {};
    11. },
    12. mounted() {
    13. const viewer = new Cesium.Viewer("cesiumContainer", {
    14. terrainProvider: Cesium.createWorldTerrain(),
    15. });
    16. viewer.scene.globe.depthTestAgainstTerrain = true;
    17. const e = viewer.entities.add({
    18. polygon: {
    19. hierarchy: {
    20. positions: [
    21. new Cesium.Cartesian3(
    22. -2358138.847340281,
    23. -3744072.459541374,
    24. 4581158.5714175375
    25. ),
    26. new Cesium.Cartesian3(
    27. -2357231.4925370603,
    28. -3745103.7886602185,
    29. 4580702.9757762635
    30. ),
    31. new Cesium.Cartesian3(
    32. -2355912.902205431,
    33. -3744249.029778454,
    34. 4582402.154378103
    35. ),
    36. new Cesium.Cartesian3(
    37. -2357208.0209552636,
    38. -3743553.4420488174,
    39. 4581961.863286629
    40. ),
    41. ],
    42. },
    43. material: "Cesium_Logo_Color.jpg",
    44. classificationType: Cesium.ClassificationType.TERRAIN,
    45. stRotation: Cesium.Math.toRadians(45),
    46. },
    47. });
    48. viewer.zoomTo(e);
    49. },
    50. };
    51. </script>

     添加矩形

    1. <template>
    2. <div style="height: 100vh">
    3. <div id="cesiumContainer" />
    4. </div>
    5. </template>
    6. <script>
    7. export default {
    8. name: "test",
    9. data() {
    10. return {};
    11. },
    12. mounted() {
    13. const viewer = new Cesium.Viewer("cesiumContainer", {
    14. terrainProvider: Cesium.createWorldTerrain(),
    15. });
    16. viewer.scene.globe.depthTestAgainstTerrain = true;
    17. const e = viewer.entities.add({
    18. rectangle: {
    19. coordinates: Cesium.Rectangle.fromDegrees(-122.3, 46.0, -122.0, 46.3),
    20. material: Cesium.Color.RED.withAlpha(0.5),
    21. },
    22. });
    23. viewer.zoomTo(e);
    24. },
    25. };
    26. </script>

    添加glb模型

     

    1. <template>
    2. <div style="height: 100vh">
    3. <div id="cesiumContainer" />
    4. </div>
    5. </template>
    6. <script>
    7. export default {
    8. name: "test",
    9. data() {
    10. return {};
    11. },
    12. mounted() {
    13. const viewer = new Cesium.Viewer("cesiumContainer", {
    14. terrainProvider: Cesium.createWorldTerrain(),
    15. });
    16. viewer.scene.globe.depthTestAgainstTerrain = true;
    17. const e = viewer.entities.add({
    18. position: Cesium.Cartesian3.fromDegrees(-122.1958, 46.1915),
    19. model: {
    20. uri: "Cesium_Air.glb",
    21. heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
    22. minimumPixelSize: 128,
    23. maximumScale: 100,
    24. },
    25. });
    26. viewer.trackedEntity = e;
    27. },
    28. };
    29. </script>

     被遮挡的线用其他颜色标注

    1. <template>
    2. <div style="height: 100vh">
    3. <div id="cesiumContainer" />
    4. </div>
    5. </template>
    6. <script>
    7. export default {
    8. name: "test",
    9. data() {
    10. return {};
    11. },
    12. mounted() {
    13. const viewer = new Cesium.Viewer("cesiumContainer", {
    14. terrainProvider: Cesium.createWorldTerrain(),
    15. });
    16. viewer.scene.globe.depthTestAgainstTerrain = true;
    17. const length = 1000;
    18. const startLon = Cesium.Math.toRadians(86.953793);
    19. const endLon = Cesium.Math.toRadians(86.896497);
    20. const lat = Cesium.Math.toRadians(27.988257);
    21. const terrainSamplePositions = [];
    22. for (let i = 0; i < length; ++i) {
    23. const lon = Cesium.Math.lerp(endLon, startLon, i / (length - 1));
    24. const position = new Cesium.Cartographic(lon, lat);
    25. terrainSamplePositions.push(position);
    26. }
    27. Promise.resolve(
    28. Cesium.sampleTerrainMostDetailed(
    29. viewer.terrainProvider,
    30. terrainSamplePositions
    31. )
    32. ).then(function (samples) {
    33. let offset = 10.0;
    34. for (let i = 0; i < samples.length; ++i) {
    35. samples[i].height += offset;
    36. }
    37. viewer.entities.add({
    38. polyline: {
    39. positions:
    40. Cesium.Ellipsoid.WGS84.cartographicArrayToCartesianArray(samples),
    41. arcType: Cesium.ArcType.NONE,
    42. width: 5,
    43. material: new Cesium.PolylineOutlineMaterialProperty({
    44. color: Cesium.Color.ORANGE,
    45. outlineWidth: 2,
    46. outlineColor: Cesium.Color.BLACK,
    47. }),
    48. depthFailMaterial: new Cesium.PolylineOutlineMaterialProperty({
    49. color: Cesium.Color.RED,
    50. outlineWidth: 2,
    51. outlineColor: Cesium.Color.BLACK,
    52. }),
    53. },
    54. });
    55. const target = new Cesium.Cartesian3(
    56. 300770.50872389384,
    57. 5634912.131394585,
    58. 2978152.2865545116
    59. );
    60. offset = new Cesium.Cartesian3(
    61. 6344.974098678562,
    62. -793.3419798081741,
    63. 2499.9508860763162
    64. );
    65. viewer.camera.lookAt(target, offset);
    66. viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
    67. });
    68. },
    69. };
    70. </script>

    添加贴地线

    1. <template>
    2. <div style="height: 100vh">
    3. <div id="cesiumContainer" />
    4. </div>
    5. </template>
    6. <script>
    7. export default {
    8. name: "test",
    9. data() {
    10. return {};
    11. },
    12. mounted() {
    13. const viewer = new Cesium.Viewer("cesiumContainer", {
    14. terrainProvider: Cesium.createWorldTerrain(),
    15. });
    16. viewer.scene.globe.depthTestAgainstTerrain = true;
    17. viewer.entities.add({
    18. polyline: {
    19. positions: Cesium.Cartesian3.fromDegreesArray([
    20. 86.953793, 27.928257, 86.953793, 27.988257, 86.896497, 27.988257,
    21. ]),
    22. clampToGround: true,
    23. width: 5,
    24. material: new Cesium.PolylineOutlineMaterialProperty({
    25. color: Cesium.Color.ORANGE,
    26. outlineWidth: 2,
    27. outlineColor: Cesium.Color.BLACK,
    28. }),
    29. },
    30. });
    31. const target = new Cesium.Cartesian3(
    32. 300770.50872389384,
    33. 5634912.131394585,
    34. 2978152.2865545116
    35. );
    36. const offset = new Cesium.Cartesian3(
    37. 6344.974098678562,
    38. -793.3419798081741,
    39. 2499.9508860763162
    40. );
    41. viewer.camera.lookAt(target, offset);
    42. viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
    43. },
    44. };
    45. </script>

  • 相关阅读:
    offline 2 online | AWAC:基于 AWR 的 policy update + online 补充数据集
    用LightningChart .NET 数据可视化控件制作多线程应用程序
    前端面试题10.25
    SQL对数据进行去重
    报错解决:RuntimeError: expected scalar type Long but found Float
    5.1 return语句
    外包的水有多深?腾讯15k的外包测试岗能去吗?
    Stack Overflow 2022 开发者调查:行业走向何方?
    think-cell 数据表无法打开怎么办
    java基本数据类型
  • 原文地址:https://blog.csdn.net/qq_40323256/article/details/128008885