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

效果图

直接上代码说明方法

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-任意多边形开挖(附源码下载) - 小专栏​xiaozhuanlan.com

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

cesium多边形描边_Cesium专栏-地形开挖2-任意多边形开挖(附源码下载)相关推荐

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

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

  2. cesium加载百度地图_Cesium专栏-百度地图加载(附源码下载)

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

  3. cesium 经纬度绘制点_cesium结合geoserver利用WFS服务实现图层新增(附源码下载)

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

  4. cesium 3dtiles 加载本地数据_cesium结合geoserver实现地图空间查询(附源码下载)

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

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

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

  6. geoserver三维_cesium结合geoserver实现地图空间查询(附源码下载)

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

  7. Cesium专栏-空间分析之地形等高线(附源码下载)

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

  8. cesium获取模型高度_Cesium专栏-空间分析之剖面分析(附源码下载)

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

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

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

最新文章

  1. (CodeForces 548B 暴力) Mike and Fun
  2. 如何识别未使用的CSS定义[关闭]
  3. windows平台下 c++获取 系统版本 网卡 内存 CPU 硬盘 显卡信息
  4. C++ 哪些函数不能声明成虚函数
  5. 如何将本地项目上传至git中进行管理的解决办法
  6. yii2 / 在这里有个叫BaseDataProvider的老爹
  7. kail linux稳定版本,Kali Linux 2020.3 稳定版已发布 更新后新功能概览
  8. 用css控制背景图片的位置,大小
  9. UNIX linux vi命令
  10. phpstudy配置ssl
  11. html 背景图片比例,CSS实现响应式全屏背景图+用CSS3实现全屏按比例缩放背景图片...
  12. Android 的录音分享特性
  13. 6-4 批量求和(*) (20分)
  14. 用poi将word表格转excel
  15. Nova 最新高度集成的SoC NT98530用于开发4K@60的IPC产品_AI算法承载硬件_开发实例
  16. R语言使用order函数对dataframe数据进行排序、基于多个字段(变量)进行升序排序(ASCENDING)
  17. 为您的创业公司推荐5款类Slack开源协作工具
  18. Boost库安装与使用
  19. mysql事务转账_模拟数据库事务实现转账
  20. Error: Can't place multiple pins assigned to pin location……解决办法

热门文章

  1. vue cli 添加html,vue-cli创建的项目,配置多页面的实现方法
  2. 苹果系统怎么降低版本_1903、1809...到底怎么看系统版本?
  3. java初反射_初始 java 反射机制 (一)
  4. mysql 5.7.16默认密码_(转)Ubuntu16安装mysql5.7未提示输入密码,安装后修改mysql默认密码...
  5. python 导入包的路径_关于Python包导入的知识点你知道吗?
  6. 防火墙 linux 端口,Linux配置防火墙端口 8080端口
  7. maven 批量docker_Spring Boot 整合 docker
  8. java 判断网络类型_Android 网络类型判断(2g、3g、wifi)及IP地址获取
  9. matlab optimvar
  10. CSDN博文中完美地去掉图片水印、调整图片位置和大小