• cesium 实战记录(六)地图通用工具方法的封装


    目录

    1、放大

    2、缩小

    3、回归初始位置

    4、全屏

    5、前一视图和后一视图


    地图通用工具:包括放大、缩小、二三维切换、回归初始位置、前一视图、后一视图等等

    老规矩看下效果:...

    这有啥好看的,直接看封装的方法 js的大体样子吧,如下:

    1、放大

    1. /**
    2. * 放大
    3. * @param viewer
    4. */
    5. const zoomIn = (viewer)=>{
    6. let position = viewer.camera.position;
    7. let cameraHeight = viewer.scene.globe.ellipsoid.cartesianToCartographic(position).height;
    8. // 每次放大 10 倍,参数可改
    9. let moveRate = cameraHeight / 10.0;
    10. viewer.camera.moveForward(moveRate);
    11. }

    2、缩小

    1. /**
    2. * 缩小
    3. * @param viewer
    4. */
    5. const zoomOut =(viewer)=>{
    6. let position = viewer.camera.position;
    7. let cameraHeight = viewer.scene.globe.ellipsoid.cartesianToCartographic(position).height;
    8. // 每次缩小 10 倍,参数可改
    9. let moveRate = cameraHeight / 10.0;
    10. viewer.camera.moveBackward(moveRate);
    11. }

    3、回归初始位置

    1. //3D初始位置
    2. const originLocation3D ={
    3. destination: Cesium.Cartesian3.fromDegrees(117.28, 31.86, 100000.0)
    4. }
    5. /**
    6. * 回到初始位置
    7. * @param viewer
    8. */
    9. const goHome = (viewer)=>{
    10. viewer.camera.flyTo(originLocation3D,{
    11. duration:1000
    12. })
    13. }

    4、全屏

    1. /**
    2. * 全屏
    3. * @param viewer
    4. * @param domId
    5. */
    6. const fullScreen = (viewer,domId)=>{
    7. // Cesium.Fullscreen.requestFullscreen(document.getElementById('domId'));
    8. //或 按需
    9. Cesium.Fullscreen.requestFullscreen(viewer.scene.canvas)
    10. }

    5、前一视图和后一视图

    1. let viewPosition=[];
    2. let viewIndex = -1;
    3. let addviewPositionFlag = false;
    4. let _is3D=true;
    5. /**
    6. * 初始化地图移动监听事件
    7. * @param viewer
    8. */
    9. const initWatchMoveEvent=(viewer)=>{
    10. viewer.camera.moveEnd.addEventListener(()=>{
    11. if(!addviewPositionFlag){
    12. if(_is3D){
    13. viewPosition.push({
    14. destination:new Cesium.Cartesian3(
    15. Number(viewer.camera.position.x),
    16. Number(viewer.camera.position.y),
    17. Number(viewer.camera.position.z)
    18. ),
    19. orientation:{
    20. heading : viewer.scene.camera.heading,
    21. pitch :viewer.scene.camera.pitch,
    22. roll :viewer.scene.camera.roll
    23. }
    24. })
    25. }else{
    26. let cp = viewer.camera.positionCartographic;
    27. viewPosition.push({
    28. destination:new Cesium.Cartesian3.fromDegrees(
    29. Cesium.Math.toDegrees(cp.longitude).toFixed(6),
    30. Cesium.Math.toDegrees(cp.latitude).toFixed(6),
    31. cp.height
    32. ),
    33. })
    34. }
    35. viewIndex++;
    36. }
    37. addviewPositionFlag=false;
    38. })
    39. }
    40. /**
    41. * 返回上一视图
    42. * @param viewer
    43. */
    44. const previousView =(viewer)=>{
    45. if (viewIndex != 0) {
    46. viewer.camera.flyTo(
    47. viewPosition[viewIndex-1]
    48. )
    49. addviewPositionFlag = true;
    50. viewIndex--;
    51. }
    52. }
    53. /**
    54. * 返回下一视图
    55. * @param viewer
    56. */
    57. const nextView =(viewer)=>{
    58. if (viewPosition.length == 0) {
    59. return;
    60. }
    61. if (viewIndex != viewPosition.length - 1) {
    62. viewer.camera.flyTo(
    63. viewPosition[viewIndex + 1]
    64. )
    65. addviewPositionFlag = true;
    66. viewIndex++;
    67. }
    68. }
    69. /**
    70. * 重置
    71. */
    72. const _resetWatchEvent=()=>{
    73. viewPosition = [];
    74. viewIndex = -1;
    75. addviewPositionFlag = false;
    76. }

    页面调用:

    初始化viewer 后 首先调用

    1. //监听移动事件
    2. ​​​​​​​initWatchMoveEvent(viewer);

    tips:我这方法适用于进入地图一开始就设置了初始位置的(即默认不是整个球的),如果你没设置初始位置,则需要部分修改,否则会移动2次以上才会生效

     

  • 相关阅读:
    基于java+springmvc+mybatis+vue+mysql的家教平台系统
    【微服务架构】链路追踪Skywalking入门与实践
    JWT详细讲解(保姆级教程)
    Golang中读写CSV文件的全面指南
    第一课数组、链表、栈、队列
    【精讲】vue中的key原理(内含案例)、案例:采用watch与计算属性过滤列表(筛选用户信息)、实现筛选,升序,降序,原顺序等功能
    软件设计模式系列之九——桥接模式
    windows系统装成Ubuntu或linux后,无线/有线网卡无法连接或找不到适配器
    mavenj解决依赖冲突
    不用开窗标号
  • 原文地址:https://blog.csdn.net/KK_bluebule/article/details/126321390