cesium面积计算_cesium-长度测量和面积测量

本文介绍如何使用Cesium进行空间直线距离和面积的测量。通过修复网上找到的现有代码,实现了在三维场景中点击测量的功能,包括测量多边形面积并显示结果。同时提供测量直线距离的实现方法,所有测量结果以米和平方公里为单位显示。
摘要由CSDN通过智能技术生成

(更新)多谢网友的提醒,面积测量的小问题已经修改,经测试可正常使用

网上找的大神的实现方法有点问题,实现有一些bug,作为cesium新手一个,弃之不忍,只好硬着头皮修改了,不过还好问题不大,再次mark一下,下次就可以直接用了

4a97d3ed4a06?tdsourcetag=s_pcqq_aiomsg

image.png

import Cesium from "cesium/Cesium";

import widgets from "cesium/Widgets/widgets.css";

export default {

//测量空间直线距离

/******************************************* */

measureLineSpace(viewer, handler) {

// 取消双击事件-追踪该位置

viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);

handler = new Cesium.ScreenSpaceEventHandler(viewer.scene._imageryLayerCollection);

var positions = [];

var poly = null;

// var tooltip = document.getElementById("toolTip");

var distance = 0;

var cartesian = null;

var floatingPoint;

// tooltip.style.display = "block";

handler.setInputAction(function (movement) {

// tooltip.style.left = movement.endPosition.x + 3 + "px";

// tooltip.style.top = movement.endPosition.y - 25 + "px";

// tooltip.innerHTML = '

单击开始,右击结束

';

// cartesian = viewer.scene.pickPosition(movement.endPosition);

let ray = viewer.camera.getPickRay(movement.endPosition);

cartesian = viewer.scene.globe.pick(ray, viewer.scene);

//cartesian = viewer.scene.camera.pickEllipsoid(movement.endPosition, viewer.scene.globe.ellipsoid);

if (positions.length >= 2) {

if (!Cesium.defined(poly)) {

poly = new PolyLinePrimitive(positions);

} else {

positions.pop();

// cartesian.y += (1 + Math.random());

positions.push(cartesian);

}

distance = getSpaceDistance(positions);

// console.log("distance: " + distance);

// tooltip.innerHTML='

'+distance+'米

';

}

}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);

handler.setInputAction(function (movement) {

// tooltip.style.display = "none";

// cartesian = viewer.scene.camera.pickEllipsoid(movement.position, viewer.scene.globe.ellipsoid);

// cartesian = viewer.scene.pickPosition(movement.position);

let ray = viewer.camera.getPickRay(movement.position);

cartesian = viewer.scene.globe.pick(ray, viewer.scene);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值