SuperMap iClient3D for WebGL 之反向遮罩

2024-02-25 08:38

本文主要是介绍SuperMap iClient3D for WebGL 之反向遮罩,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:Taco

前言

        全球范围内如果要凸显某一个区域,往往都是通过使这个区域高亮显示。但是有时候由于地球的影像花花绿绿的,导致不能一眼就看到我们需要看到的部分。那么我们该如何在加载全球场景的时候一下子就能看到我们想要看的呢?不如我们把其他部分都给盖上!只显示我们需要的!

        那么通过什么能够实现这个功能呢?首先想到的就是entity,直接用实体把地球给盖上呗,然而在实现的过程中却发现,单个的实体并不能将全球盖上。单个实体的范围当设置跨过半球的时候,会出现变形,或者陷入地球中。既然单个的不行那就整两个!绘制两个实体面来将地球包裹上。

一,绘制实体面包裹地球

实现代码

viewer.entities.add({polygon: {// 获取指定属性(positions,holes(图形内需要挖空的区域))hierarchy: {//左下左上右上右下// 0,60,0,-60,180,-60,180,60,0,-60positions: [{x: 3197104.586923899,y: -0.5580000157243585,z: 5500477.1339386385}, {x: 3197104.586923899,y: -0.5580000157243585,z: -5500477.1339386385}, {x: -3197104.5869239476,y: -3.915323898915733,z: -5500477.1339386385}, {x: -3197104.5869239476,y: -3.915323898915733,z: 5500477.1339386385}, {x: 3197104.586923899,y: -0.5580000157243585,z: 5500477.1339386385}],},// 边框outline: false,// 边框颜色outlineColor: Cesium.Color.WHITE,// 边框尺寸outlineWidth: 2,// 填充的颜色,withAlpha透明度material: Cesium.Color.BLUE.withAlpha(0.5),// 是否被提供的材质填充fill: true,// 是否显示show: true,// 顺序,仅当`clampToGround`为true并且支持地形上的折线时才有效。zIndex: 10}});viewer.entities.add({polygon: {// 获取指定属性(positions,holes(图形内需要挖空的区域))hierarchy: {//左下左上右上右下// 0,60,0,-60,180,-60,180,60,0,-60positions: [{x: 3197104.586923899,y: 0.5580000157243585,z: 5500477.1339386385}, {x: 3197104.586923899,y: 0.5580000157243585,z: -5500477.1339386385}, {x: -3197104.5869239476,y: 3.915323898915733,z: -5500477.1339386385}, {x: -3197104.5869239476,y: 3.915323898915733,z: 5500477.1339386385}, {x: 3197104.586923899,y: 0.5580000157243585,z: 5500477.1339386385}],},// 边框outline: false,// 边框颜色outlineColor: Cesium.Color.RED,// 边框尺寸outlineWidth: 200,// 填充的颜色,withAlpha透明度material: Cesium.Color.BLUE.withAlpha(0.5),// 是否被提供的材质填充fill: true,// 是否显示show: true,// 顺序,仅当`clampToGround`为true并且支持地形上的折线时才有效。zIndex: 10}});

                        

 

这样我们就得到了一个蓝色的球体将地球包裹住。有人会说为什么你使用两个面来包裹,明明一个实体球也能把地球包上的。这是因为我们还要挖洞啊。要突出展示出我们需要的部分。

二,掏出需要的部分

        将面中间掏空需要使用的是实体的holes,需要将坐标传入进来就可以实现将面的内部掏空。但是由于我们没有直接可以使用的面数据,需要在iserver中请求已经发布好的数据服务,再到前端调用绘制。我们这里提前发布了一个青岛的矢量面作为矢量面数据。

	var queryObj = {"getFeatureMode": "SQL","datasetNames": ["demo:青岛市"],"maxFeatures": 1000,"queryParameter": {attributeFilter: "SMID >0"}};var queryObjJSON = JSON.stringify(queryObj);console.log(queryObjJSON);$.ajax({type: 'GET',url: "http://localhost:8090/iserver/services/data-demo/rest/data/featureResults/355a3692952d45809f95e46252a89322_241f63d221864e1caca0b775fbce56fc.rjson",data: queryObjJSON,success: function(data) {var resultObj = JSON.parse(data);console.log(resultObj);for (var i = 0; i < resultObj.featureUriList.length; i++) {$.ajax({type: 'GET',url: resultObj.featureUriList[i] + ".rjson?hasGeometry=true",data: queryObjJSON,success: function(data) {var resultObj = JSON.parse(data);//console.log("resultObj", resultObj)addClapFeature(resultObj);}});}}});

最后使用holes去挖空之前的实体面

var hole = Cesium.Cartesian3.fromDegreesArray(lonLatArr); viewer.entities.add({polygon: {// 获取指定属性(positions,holes(图形内需要挖空的区域))hierarchy: {//左下左上右上右下// 0,60,0,-60,180,-60,180,60,0,-60positions: [],holes: [{
//传入的值positions: hole}]},}});

   三,效果演示

      

 

 

这篇关于SuperMap iClient3D for WebGL 之反向遮罩的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/744949

相关文章

遮罩,在指定元素上进行遮罩

废话不多说,直接上代码: ps:依赖 jquer.js 1.首先,定义一个 Overlay.js  代码如下: /*遮罩 Overlay js 对象*/function Overlay(options){//{targetId:'',viewHtml:'',viewWidth:'',viewHeight:''}try{this.state=false;//遮罩状态 true 激活,f

SuperMap iManger 单个镜像更新流程

1. 下载镜像 docker pull registry.cn-beijing.aliyuncs.com/supermap/common-dashboard-api:11.1.1-240802-amd64 label 没区分架构,在 x64 环境 pull arm64 镜像 通过 --platform=arm64 参数可以实现 docker pull mariadb:10.5.26

Linux如何做ssh反向代理

SSH反向代理是一种通过SSH协议实现的安全远程访问方式,它允许客户端通过SSH连接到一台具有公网IP的代理服务器,然后这台代理服务器再将请求转发给内部网络中的目标主机。以下是实现SSH反向代理的步骤: 一、准备工作 确保服务器配置: 内网服务器(目标主机)和外网服务器(代理服务器)都安装了SSH服务,并且能够通过SSH进行互相访问。内网服务器上的服务(如Web服务、数据库服务等)需要在本地

Nginx反向代理功能及动静分离实现

一:Nginx支持正向代理和反向代理 1.正向代理 正向代理,指的是通过代理服务器 代理浏览器/客户端去重定向请求访问到目标服务器 的一种代理服务。 正向代理服务的特点是代理服务器 代理的对象是浏览器/客户端,也就是对于目标服务器 来说浏览器/客户端是隐藏的。 正向代理是客户端指定让代理去访问哪个服务,代表客户端的利益。 2.反向代理 反向代理,指的是浏览器/客户端并不知道自己要

Kubernetes 1.25 containerd 环境部署 SuperMap iManager

超图官网目提供的Kubernetes 版本为 1.20 版本,容器运行时为 docker 本次部署使用已有的 Kubernetes 1.25 版本集群,容器运行时为 containerd Kubernetes ,containerd 部署请自行了解,本次不做介绍,下面介绍在此环境上如何部署 iManager 11i 并创建云套件 1. 环境介绍 虚拟机 CPU 内存 操作系统 Ku

解决TMP_InputField 在WebGL(抖音)上不能唤起虚拟键盘,不能使用手机内置输入法的问题

整整花费了一天时间测试和解决。试验了多个方法,花了不少美刀,最终才发现抖音这个官方文档,哭了: https://partner.open-douyin.com/docs/resource/zh-CN/mini-game/develop/guide/game-engine/rd-to-SCgame/open-capacity/capability-adaptation/sc_webgl_keyboa

GDB 反向调试

使用调试器时最常用的功能就是step, next, continue,这几个调试命令都是“往下执行”的, 但是很多时候会有这种需求:你在调试的过程中多跳过了几步而错过中间过程,这时候不得不重头调试一遍,非常麻烦。而GDB从7.0版本开始支持反向调试功能,也就是允许你倒退着运行程序,或者说撤销程序执行的步骤从而会到以前的状态。   直观地来看,加入你正在使用GDB7.0以上版本的调试器并且运行在

代理服务器介绍,正向代理(校园网,vpn,http隧道技术),反向代理(公司服务器,frp服务),NAT和代理服务器的相同/不同点

目录 代理服务器 介绍 类型  正向代理 引入 介绍  vpn http隧道技术 反向代理 引入 隧道技术 介绍 frp服务 NAT和代理服务器 相同点 不同点 NAT 代理服务器 代理服务器 介绍 一种中间服务器,充当客户端(如个人计算机或移动设备)与目标服务器(如网站服务器)之间的中介 它接受客户端的请求,然后将这些请求转发给目标服务器,再把

[置顶]Nginx反向代理部署指南

一.反向代理   我们都知道,80端口是web服务的默认端口,其他主机访问web服务器也是默认和80端口进行web交互,而一台服务器也只有一个80端口,这是约定俗成的标准. 我们来看下面两个场景:  1.服务器的80端口被占用了,我们想实现服务器的其他端口(比如port:2368)web服务.  2.我们想在一台服务器上实现多个站点的web服务. 要解决这个问题,需要用到反向代理,下面的

superMap mapboxgl初始化地图时,地图旋转api与设置地图中心api,同时进行无法完成实现效果

superMap mapboxgl初始化地图是,地图旋转api与设置地图中心api,同时进行无法完成实现效果 map = new mapboxgl.Map({center: [113.29840006822727, 23.395243424972175]})map.on("load", () => {map.rotateTo(-75)map.easeTo({center: [lng, lat]