zoukankan      html  css  js  c++  java
  • cesium1.63.1api版本贴地贴模型量算工具效果(附源码下载)

    前言

    cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材。
    不少订阅者向我反馈之前的那篇(https://xiaozhuanlan.com/topic/8210364597 ) 量算工具的cesiumAPI版本太低,不能适用新版本。所以,推出新版本的量算工具效果,对应版本是cesium1.63.1API的。

    内容概览

    1.cesium1.63.1API版本贴地量算工具效果
    2.源代码demo下载

    效果图如下:

    实现思路:测距以及测面都是利用到cesium鼠标操作监听事件:鼠标左键Cesium.ScreenSpaceEventType.LEFT_CLICK、鼠标移动Cesium.ScreenSpaceEventType.MOUSE_MOVE、鼠标右键Cesium.ScreenSpaceEventType.RIGHT_CLICK。鼠标左键事件,获取点击地图的每个坐标点;鼠标移动事件,动态扑捉鼠标移动状态,下一个坐标点位置;鼠标右键意味着地图量算结束状态。另外,量算面积的计算,结合turf.js来计算。

    • 距离量算的监听事件函数,里面涉及到细节函数,自行看对应的源码demo:
    this.handler.setInputAction(function (evt) { //单机开始绘制
    var cartesian = that.getCatesian3FromPX(evt.position, that.viewer, [that.polyline, that.floatLable]);
    if (!cartesian) return;
    if (that.positions.length == 0) {
    var label = that.createLabel(cartesian, "起点");
    that.labels.push(label);
    that.floatLable = that.createLabel(cartesian, "");
    that.floatLable.show = false;
    that.positions.push(cartesian);
    that.positions.push(cartesian.clone());
    that.lastCartesian = cartesian;
    } else {
    that.floatLable.show = false;
    that.positions.push(cartesian);
    if (!that.lastCartesian) return;
    var distance = that.getLength(cartesian, that.lastCartesian);
    that.allDistance += distance;
    var text = that.formatLength(distance);
    var label = that.createLabel(cartesian, text);
    that.labels.push(label);
    }
    that.lastCartesian = cartesian;
    }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
    this.handler.setInputAction(function (evt) {
    if (that.positions.length < 1) return;
    that.floatLable.show = true;
    var cartesian = that.getCatesian3FromPX(evt.endPosition, that.viewer, [that.polyline, that.floatLable]);
    if (!cartesian) return;
    if (that.positions.length == 2) {
    if (!Cesium.defined(that.polyline)) {
    that.polyline = that.createLine();
    }
    }
    if (that.polyline) {
    that.positions.pop();
    that.positions.push(cartesian);
    if (!that.lastCartesian) return;
    var distance = that.getLength(cartesian, that.lastCartesian);
    that.floatLable.show = true;
    that.floatLable.label.text = that.formatLength(distance);
    that.floatLable.position.setValue(cartesian);
    }
    }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
    this.handler.setInputAction(function (evt) {
    if (!that.polyline) return;
    that.floatLable.show = false;
    that.viewer.scene.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
    that.viewer.trackedEntity = undefined;
     
    var cartesian = that.getCatesian3FromPX(evt.position, that.viewer, [that.polyline, that.floatLable]);
    var distanceLast = that.getLength(cartesian, that.lastCartesian);
    that.allDistance += distanceLast;
    var allDistance = that.formatLength(that.allDistance);
     
     
    var label = that.createLabel(cartesian, "");
    if (!cartesian) return;
    that.labels.push(label);
    that.labels[that.labels.length - 1].label.text = "总长:" + allDistance;
    if (that.handler) {
    that.handler.destroy();
    that.handler = null;
    }
    if (that.tsLabel) {
    that.viewer.entities.remove(that.tsLabel);
    }
    if (that.ts_handler) {
    that.ts_handler.destroy();
    that.ts_handler = null;
    }
    }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);
    • 面积量算的监听事件函数,里面涉及到细节函数,自行看对应的源码demo:

    更多详情见下面链接文章

    小专栏此文章

    文章提供源码,对本专栏感兴趣的话,可以关注一波

  • 相关阅读:
    钱多多软件制作04
    团队项目01应用场景
    HDU 4411 arrest
    HDU 4406 GPA
    HDU 3315 My Brute
    HDU 3667 Transportation
    HDU 2676 Matrix
    欧拉回路三水题 POJ 1041 POJ 2230 POJ 1386
    SPOJ 371 BOXES
    POJ 3422 Kaka's Matrix Travels
  • 原文地址:https://www.cnblogs.com/giserhome/p/12184740.html
Copyright © 2011-2022 走看看