SuperMap iClient3D for WebGL平面场景实现绘制任意面进行GPU空间查询

文章目录


前言

写之前先说一下,以往咱们都是在球面场景中绘制一个规则的体对模型图层做GPU空间查询,可参考:https://www.supermapol.com/webgl/examples/webgl/editor.html#spatialQuery3D。最近遇到有些小伙伴问在平面场景中如何绘制任意面对模型进行GPU空间查询,其实核心就是如何把绘制出来的面拉成一个体并让接口能正确识别这个体,以下是实现方法。


一、加载模型缓存服务并获取需要操作的图层

javascript 复制代码
				//设置平面场景
				scene.mode = SuperMap3D.SceneMode.COLUMBUS_VIEW;
				//加载三维缓存服务
                var promise = scene.open("http://localhost:8090/iserver/services/3D-WorkSpace/rest/realspace");

				//获取需要进行操作的图层
				var layerSelect = [];
                var layer = scene.layers.find("Building_1");
                layer.selectedColor = SuperMap3D.Color.RED;
                layerSelect.push(layer);

二、绘制任意面

这里使用DrawHandler

javascript 复制代码
				//初始化handlerPolygon 
				var handlerPolygon = new SuperMap3D.DrawHandler(viewer, SuperMap3D.DrawMode.Polygon, 0);
				handlerPolygon.drawEvt.addEventListener(function (result) {
                        handlerPolygon.polygon.show = false;
                        handlerPolygon.polyline.show = false;
                     });
                     //激活handlerPolygon
                     handlerPolygon.activate();

三、拉伸体

1、获取步骤二所绘制面的节点

此次在步骤二的addEventListener监听里面获取

javascript 复制代码
						for (var pt of result.object.positions) {
                            var cartographic = SuperMap3D.Cartographic.fromCartesian(pt);
                            var longitude = SuperMap3D.Math.toDegrees(cartographic.longitude);
                            var latitude = SuperMap3D.Math.toDegrees(cartographic.latitude);
                            var height = cartographic.height;
                            var pnt = new SuperMap3D.Point3D(longitude, latitude, height);

                            point3ds.add(pnt);
                        }
                        point3dsArray.push(point3ds);

2、拉伸体

javascript 复制代码
						//初始化拉伸体
						var geometry = undefined;
                        geometry = new SuperMap3D.GeoRegion3D(point3dsArray);
                        geometry.extrudedHeight = 100; //拉伸高度
                        geometry.isLatLon = false; //设为false
                        geometry.bottomAltitude = 5; //底部高度

3、进行空间查询

javascript 复制代码
						// 空间查询
                        spatialQuery.geometry = geometry;
                        spatialQuery.positionMode = mode;
                        spatialQuery.layers = layerSelect;
                        spatialQuery.outlineColor = SuperMap3D.Color.CORNFLOWERBLUE;
                        spatialQuery.fillStyle = SuperMap3D.FillStyle.Fill_And_WireFrame;
                        spatialQuery.build();

四、运行效果


相关推荐
无言听风雨丶20 小时前
Kubernetes 控制平面深度剖析:从 kubectl apply 到 etcd 写入的全链路
平面·kubernetes·etcd
FlightYe21 小时前
视界原理之3D视频(四):裸眼、眼镜和头显
android·linux·c++·3d·ffmpeg·音视频
云飞云共享云桌面1 天前
1台SolidWorks服务器如何承载10个设计并发?
运维·服务器·网络·3d·制造
释厄6231 天前
三角基底律——矩阵3x6 是所有三角形的基底·3D中高就是边
线性代数·3d·矩阵
Solange__1 天前
图片转3D导出GLB、FBX还是OBJ?按5类任务比较材质、动画与可编辑性
人工智能·3d·ai·自然语言处理·编辑器·blender·材质
Jmyd01231 天前
博物馆AR导览数字孪生架构设计:从空间数据到AR应用全链路
3d·系统安全·ar·数字孪生·博物馆·三维数字化
chaoyuanl1 天前
超元力玻璃剧场:裸眼3D、8K高清与悬空栈桥的成熟文旅解决方案
大数据·人工智能·3d·xr·vr
苏州福兰克1 天前
运行裸眼3D显示器对电脑显卡配置有什么要求?
3d·计算机外设·电脑
Martina_03212 天前
AI生成的3D模型打印后沿层纹开裂?用6步检查方向、壁厚与填充
图像处理·人工智能·数学建模·3d·自然语言处理·游戏策划·1024程序员节
Solange__2 天前
在线3D预览器、Blender和游戏引擎怎么选?按5类任务比较格式、隐私与编辑性
人工智能·游戏·3d·游戏引擎·blender·1024程序员节·关卡设计