cesium绘制线面并测量

绘制点面线图形左键点击绘制,鼠标移动绘制,右键结束

  **html**
  <li><a href="#" id="measurement_dis_line">距离(线段)</a></li>
  <li><a href="#" id="measurement_hei_line">高度(线段)</a></li>
  <li><a href="#" id="measurement_area_circle">面积(圆形)</a></li>
  <li><a href="#" id="measurement_area_rectangle">面积(矩形)</a></li>
  <li><a href="#" id="measurement_area_polygon">面积(多边形)</a></li>
  <li><a href="#" id="measurement_clear">清除</a></li>
**js**
var map_measurement = viewer.entities.add(new Cesium.Entity({ id: "map_measurement" }));
var handler;

$("#measurement_dis_line").click(function () {
    if (Cesium.defined(handler)) {
        handler.destroy();
        handler = undefined;
    }
    handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);
    var DrawPoints = [];
    var DrawPoint;
    var distance = 0;
    //双击鼠标左键清除默认事件
    viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);

    //鼠标左键
    handler.setInputAction(function (event) {
        var ray = viewer.camera.getPickRay(event.position);
        var earthPosition = viewer.scene.globe.pick(ray, viewer.scene);
        if (Cesium.defined(earthPosition)) {
            if (DrawPoints.length == 0) {
                DrawPoint = createPoint(earthPosition);
                DrawPoints.push(earthPosition);
                var dynamicPositions = new Cesium.CallbackProperty(function () {
                    return DrawPoints;
                }, false);
                drawShape_measurement("line", dynamicPositions, earthPosition);//绘制动态图
            }
            DrawPoints.push(earthPosition);
            createPoint(DrawPoints[DrawPoints.length - 2]);
            drawmeasurement(DrawPoints[DrawPoints.length - 2], (distance + "米"));
        }
    }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
    //鼠标移动
    handler.setInputAction(function (event) {
        if (Cesium.defined(DrawPoint)) {
            var ray = viewer.camera.getPickRay(event.endPosition);
            var newPosition = viewer.scene.globe.pick(ray, viewer.scene);
            if (Cesium.defined(newPosition)) {
                DrawPoints.pop();
                DrawPoints.push(newPosition);
            }
            distance = getSpaceDistance(DrawPoints);
        }
    }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);

    handler.setInputAction(function (event) {
        handler.destroy();
        handler = undefined;
        createPoint(DrawPoints[DrawPoints.length - 1]);
        drawmeasurement(DrawPoints[DrawPoints.length - 1], (distance + "米"));
    }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);
});
//获取高度必须是点击模型。pickPosition拾取的是模型的高度。
$("#measurement_hei_line").click(function () {
    if (Cesium.defined(handler)) {
        handler.destroy();
        handler = undefined;
    }
    handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);
    var DrawPoints = [];
    var DrawPoint;
    var distance = 0;
    //双击鼠标左键清除默认事件
    viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);

    //鼠标左键
    handler.setInputAction(function (event) {
        var scene = viewer.scene;
        var pickedObject = scene.pick(event.position); //判断是否拾取到模型
        if (scene.pickPositionSupported && Cesium.defined(pickedObject)) {
            var earthPosition = viewer.scene.pickPosition(event.position);
            if (Cesium.defined(earthPosition)) {
                if (DrawPoints.length == 0) {
                    DrawPoint = createPoint(earthPosition);
                    DrawPoints.push(earthPosition);
                    var dynamicPositions = new Cesium.CallbackProperty(function () {
                        return DrawPoints;
                    }, false);
                    drawShape_measurement("line", dynamicPositions, earthPosition);//绘制动态图
                }
                DrawPoints.push(earthPosition);
                createPoint(DrawPoints[DrawPoints.length - 2]);
                drawmeasurement(DrawPoints[DrawPoints.length - 2], (distance + "米"));
            }
        }
    }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
    //鼠标移动
    handler.setInputAction(function (event) {
        if (Cesium.defined(DrawPoint)) {
            var scene = viewer.scene;
            var pickedObject = scene.pick(event.endPosition); //判断是否拾取到模型
            if (scene.pickPositionSupported && Cesium.defined(pickedObject)) {
                var newPosition = viewer.scene.pickPosition(event.endPosition);
                if (Cesium.defined(newPosition)) {
                    DrawPoints.pop();
                    DrawPoints.push(newPosition);
                }
                distance = getheight(DrawPoints);
            }
        }
    }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);

    handler.setInputAction(function (event) {
        handler.destroy();
        handler = undefined;
        createPoint(DrawPoints[DrawPoints.length - 1]);
        drawmeasurement(DrawPoints[DrawPoints.length - 1], (distance + "米"));
    }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);
});
$("#measurement_area_circle").click(function () {
    if (Cesium.defined(handler)) {
        handler.destroy();
        handler = undefined;
    }
    handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);
    var DrawPoints = [];
    var DrawPoint;
    var distance = 0;
    var nowentity;
    //双击鼠标左键清除默认事件
    viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenS
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Cs.js是一个开源的WebGL框架,支持绘制点、线和面等3D图形。它提供了一个简单的封装负责管理WebGL渲染流程和带有简单工具库的API。其中,cesium绘制线面封装是其重要的功能之一。 cesium绘制线面封装可以在3D场景中绘制不同的几何形状。它使用CeisumJS的基础结构,通过提供必要的参数,可以生成一个形状对象。这个形状对象可以在场景中随意移动、放大、旋转或者删除。除此之外,绘制点、线和面可以使用不同的样式和颜色。 通过cesium绘制线面封装,用户可以创建简单的图形形状或是更加复杂的3D模型。例如,用户可以绘制一个球体、立方体、圆形或者多边形等形状。这些形状可以是实心的、空心的或者半透明的,且可以根据需要进行颜色和纹理的调整。 总的来说,cesium绘制线面封装简化了3D场景的创建和管理流程。同时,它具有强大的可定制性,使得用户可以根据自己的需求和喜好制作精美的3D图形。 ### 回答2: Cesium是一种开放源代码的虚拟地球浏览器,它允许用户在浏览器中查看,操作和交互地理信息。Cesium提供了丰富的API,其中包括绘制多种类型的图形功能。Cesium绘制线面封装,即是通过Cesium提供的API对点线面进行封装和自定义样式。 首先,可以使用Cesium的Entity API创建点线面,这些基本实体包括点、直线、多段线、面以及它们的混合体,如多边形和多面体。通过设置不同的样式和属性,例如颜色、透明度、线宽、面纹理等,可以自定义图形样式。 其次,Cesium还提供了Primitive类型来提高绘制效率和性能。Primitive是Cesium中一种基于WebGL实现的渲染图元,它可以用来绘制所有类型的点线面图形。具体而言,可以使用GroundPrimitive类型绘制贴地图形,如粒子云、热力图等;使用ShadowVolume类型绘制视觉效果良好和高效的实时阴影。 最后,Cesium提供了与三维地球视图交互的接口,可以在地球上自由移动、旋转、缩放视图,并支持与用户输入交互。因此,Cesium绘制线面封装可以轻松实现图形可视化和交互性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值