“任意多边形地形开挖” 是“地形开挖”的补充篇,在这节里,我们介绍关于如何使用任意多边形对地形进行开挖,同时,由于有不少小伙伴也咨询了关于“地形开挖”篇后序内容中的填充地形的效果,之前没放出来,是想让小伙伴有个思考的过程,现在放出来,也是提供一种解决方法。

效果图

直接上代码说明方法

1、使用鼠标交互事件,采集需要开挖的范围

注: 这里要特别注意一点,为了下面的计算 ClippingPlane 方便,采集点顺序最好是 逆时针,如果点集的组织是顺时针,需要首先逆序成逆时针,关于如果判断一个点集是否是顺时针或者是逆时针,可以用向量法求多边形面积的方式,如果为正,则为顺时针,否者为逆时针。或者使用JS插件计算,比如turf.js。

  • var points = [
  • new Cesium.Cartesian3(-1715292.6999753984, 4993153.157628936, 3566663.752912529),
  • new Cesium.Cartesian3(-1715285.8150713604, 4993167.072601330,3566647.6921528564),
  • new Cesium.Cartesian3(-1715286.5985765400, 4993181.309761941, 3566627.519787549),
  • new Cesium.Cartesian3(-1715299.0249209427, 4993191.177501195, 3566607.861264360),
  • new Cesium.Cartesian3(-1715349.5762367432, 4993176.675656664, 3566603.878289345),
  • new Cesium.Cartesian3(-1715375.5538853381, 4993159.990032478, 3566614.671147202),
  • new Cesium.Cartesian3(-1715370.1945772346, 4993141.041835706, 3566643.580587877),
  • new Cesium.Cartesian3(-1715359.7019716015, 4993131.063945592, 3566662.468046927),
  • new Cesium.Cartesian3(-1715321.9141253997, 4993137.762602262, 3566671.205164391)
  • ];

2、根据点集计算 ClippingPlane (这个计算方式来源于官网示例)

  • var pointsLength = points.length;
  • var clippingPlanes = []; // 存储ClippingPlane集合
  • for (var i = 0; i < pointsLength; ++i) {
  • var nextIndex = (i + 1) % pointsLength;
  • var midpoint = Cesium.Cartesian3.add(points[i], points[nextIndex], new Cesium.Cartesian3());
  • midpoint = Cesium.Cartesian3.multiplyByScalar(midpoint, 0.5, midpoint);
  •  
  • var up = Cesium.Cartesian3.normalize(midpoint, new Cesium.Cartesian3());
  • var right = Cesium.Cartesian3.subtract(points[nextIndex], midpoint, new Cesium.Cartesian3());
  • right = Cesium.Cartesian3.normalize(right, right);
  •  
  • var normal = Cesium.Cartesian3.cross(right, up, new Cesium.Cartesian3());
  • normal = Cesium.Cartesian3.normalize(normal, normal);
  •  
  • var originCenteredPlane = new Cesium.Plane(normal, 0.0);
  • var distance = Cesium.Plane.getPointDistance(originCenteredPlane, midpoint);
  •  
  • clippingPlanes.push(new Cesium.ClippingPlane(normal, distance));
  • }

3、赋值给globe的 clippingPlanes 属性

更多详情见下面链接文章

Cesium专栏-地形开挖2-任意多边形开挖(附源码下载)

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

Cesium专栏-地形开挖2-任意多边形开挖(附源码下载)的更多相关文章

  1. Cesium专栏-空间分析之坡度分析(附源码下载)

    Cesium Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精 ...

  2. Cesium专栏-样条插值(平滑路径、飞行动画,源码下载)

    Cesium Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精 ...

  3. cesium 之加载地形图 Terrain 篇(附源码下载)

    前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...

  4. leaflet结合turf.js实现多边形分割(附源码下载)

    前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...

  5. cesium 之地图切换展示效果篇(附源码下载)

    前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...

  6. Cesium专栏-填挖方分析(附源码下载)

    Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精度,渲染质量以 ...

  7. Cesium专栏-雷达遮罩动态扫描(附源码下载)

    Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精度,渲染质量以 ...

  8. cesium 雷达扫描(附源码下载)

    前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...

  9. cesium 实现风场图效果(附源码下载)

    前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...

随机推荐

  1. iptables简单命令

    IPTables是基于Netfilter基本架构实现的一个可扩展的数据报高级管理系统或核外配置工具,利用table.chain.rule三级来存储数据报的各种规则.Netfilter-iptables ...

  2. MySQL 高可用架构 之 MHA (Centos 7.5 MySQL 5.7.18 MHA 0.58)

    目录 简介 环境准备 秘钥互信 安装基础依赖包 安装MHA组件 安装 MHA Node组件 安装 MHA Manager 组件 建立 MySQL 一主三从 初始化 MySQL 启动MySQL 并简单配 ...

  3. 英语口语考试资料Volunteers

    Being a volunteer is great!        There are lots of volunteers around us now. And they don’t do it ...

  4. 解决 Docker Hadoop ssh "Connection to * closed".问题

    Docker 最近很火, 可以快速轻量级地虚拟出多个node,所以打算在Docker中跑Hadoop伪分布式应用. 其实要做出个简单的版本倒是不难,主要在 建立ssh无密码登录本机时,出现刚登录上去, ...

  5. [TimLinux] MySQL InnoDB的外键约束不支持set default引用选项

    1. 外键 MySQL的MyISAM是不支持外键的,InnoDB支持外键,外键是MySQL中的三大约束中的一类:主键约束(PRIMARY KEY),唯一性约束(UNIQUE),外键约束(FOREIGN ...

  6. 18.DjangoRestFramework学习一之restful规范、APIview、解析器组件、Postman等

    一 预备知识 预备知识:django的CBV和FBV CBV(class based view):多用,简单回顾一下 FBV(function based view): CBV模式的简单操作:来个登陆 ...

  7. 洛谷 题解 P1615 【西游记公司】

    我的程序只有1行... return scanf("%d:%d:%d\n%d:%d:%d\n%d", &a, &b, &c, &x, &y, ...

  8. 首次自动化测试,使用selenium+scapy

    痛苦而艰难 才写出这一点点,这是个登陆测试 main # -*- coding: utf-8 -*- from selenium import webdriver import login_tst i ...

  9. 模电&数电知识整理(不定期更新)

    模电总复习之爱课堂题目概念整理 Chapter 1 1) 设室温情况下某二极管的反偏电压绝对值为1V,则当其反偏电压值减少100mV时,反向电流的变化是基本不发生变化. 2) 二极管发生击穿后,在击穿 ...

  10. 一线大厂面试官最喜欢问的15道Java多线程面试题

    前言 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分.如果你想获得更多职位,那么你应该准备很多关于多线程的问题. 他们会问面试者很多令人混淆的Java线程问题.面试官只是想确信面试者 ...