如果第一次打开,需要访问 http://localhost:8090/iserver/services/security/login ,进行管理员注册,在此已经注册过了,记住自己的账户和密码。

回到SuperMap iDesktopX 11i,打开创建好的的场景,右键左侧工作空间管理器中的工作空间名称,选择发布工作空间,

输入自己的服务端账户密码

勾选三维服务之后点击发布

之后打开浏览器,登录自己的管理员账号,就可以在服务管理中找到发布的三维服务

点击进入并复制服务地址,如果想要查看模型数据或者预览,可以点击链接,然后探索里面的内容。至此三维场景发布完成,得到一个服务端链接。

2.4 Web端服务加载:

首先按照SuperMap iClient3D for Cesium官网教程配置环境,得到一个Html前端工程,官方教程在: SuperMap iClient3D for Cesium 开发指南

,官网教程内容很详细,还有API可以学习。

本开发使用的是VScode,其他开发工具一样,根据官网教程创建viewer之后,使用打开场景,下面的地址就是刚刚服务端的链接。效果如下:(注意在此过程中SuperMap iServer 11i需要保持打开状态)

var scene = viewer.scene;
var promise = scene.open("http://localhost:8090/iserver/services/3D-test/rest/realspace"); //url为在SuperMap iServer上发布的服务地址

2.5 视频投放

最后一步,在场景中加载视频。

实际上,如果使用Cesium直接进行视频投放,原理类似把视频作为纹理贴到一个矩形实体上面,但是SuperMap在Cesium的基础上,把该步骤封装成了一个类,也就是Cesium.ProjectionImage,所以使用起来非常方便。

关于ProjectionImage的详细介绍,可以查看官方文档 3D WebGL API

在自己书写代码之前可以在官网 http://support.supermap.com.cn:8090/webgl/examples/webgl/editor.html#projectionImage 进行练习

下面书写的代码也是对官方源码的理解

首先在<video>标签里面,把要投放的视频进行打开,设置它的样式和属性。记住它的ID,本文中是 trailer

    <video id="trailer" style="visibility: hidden;top:0px;left:0px;width: 200px;height:200px;" autoplay loop crossorigin controls>
        <source src="vedio/vedio.mp4" type="video/mp4">
    </video>

然后创建ProjectionImage对象,并跟视频对象绑定起来

var videoElement = document.getElementById('trailer');
var projectionImage = new Cesium.ProjectionImage(scene);
projectionImage.setImage({
                    video: videoElement

获取视频之后,需要的就是视频投放的观测点、方向、距离这些参数了。

观测点使用

projectionImage.viewPosition = [longitude, latitude, height];

视频的长和宽使用

projectionImage.horizontalFov = 20;
projectionImage.verticalFov = 10;

之后设置投射的方向和距离

projectionImage.setDistDirByPoint([longitude, latitude, height]);
projectionImage.distance = 200;

不出意外的话,根据上面的代码,视频就可以正常投射了。

完整的JavaScript代码如下:

$(document).ready(function(){
            var viewer = new Cesium.Viewer('cesiumContainer');
            var scene = viewer.scene;
            var promise = scene.open("http://localhost:8090/iserver/services/3D-3D_Try/rest/realspace");
            promise.then(function(layers){
                console.log(layers)
                var videoElement = document.getElementById('trailer');
                var projectionImage = new Cesium.ProjectionImage(scene);
                projectionImage.distance = 0.1;
                var wgsPosition = scene.camera.positionCartographic;
                var longitude = Cesium.Math.toDegrees(wgsPosition.longitude);
                var latitude = Cesium.Math.toDegrees(wgsPosition.latitude);
                var height = wgsPosition.height;
                projectionImage.viewPosition = [longitude, latitude, height];
                projectionImage.horizontalFov = 20;
                projectionImage.verticalFov = 10;
                projectionImage.setImage({
                    video: videoElement
                //videoElement.play();
                projectionImage.removeAllClipRegion();
                projectionImage.build();
                var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
                handler.setInputAction(function (movement) {
                var last = scene.pickPosition(movement.position);
                console.log(1);
                //计算该点与视口位置点坐标的距离
                var distance = Cesium.Cartesian3.distance(scene.camera.position, last);
                if (distance > 0) {
                //将鼠标当前点坐标转化成经纬度
                var cartographic = Cesium.Cartographic.fromCartesian(last);
                var longitude = Cesium.Math.toDegrees(cartographic.longitude);
                var latitude = Cesium.Math.toDegrees(cartographic.latitude);
                var height = cartographic.height;
                //通过该点设置视频投放对象的距离及方向
                projectionImage.setDistDirByPoint([longitude, latitude, height]);
                projectionImage.distance = 200;
                var wgsPosition = scene.camera.positionCartographic;
                var longitude = Cesium.Math.toDegrees(wgsPosition.longitude);
                var latitude = Cesium.Math.toDegrees(wgsPosition.latitude);
                var height = wgsPosition.height;
                projectionImage.viewPosition = [longitude, latitude, height];
                }, Cesium.ScreenSpaceEventType.LEFT_CLICK);

本文是对三维场景视频投放的一个简单尝试,代码和功能都是很简略(几乎没什么功能),但是教程是很详细的,对于初学者比较友好,如果想要较好的投射效果,还需要对视频投射的参数进行仔细的打磨。。

把监控视频投放到三维实景中,可以将静态的三维数据实现动态的显示效果,可以极大方便一些区域的查看和监管,该文章记录该投放的实现过程,使用SuperMap相关软件和服务,以供入门参考。
投影矩阵到视锥体平面 描述:在进入渲染管线前,对场景进行剔除,对性能的提升很大。我通过投影矩阵得到视锥体的六个面,然后根据模型相对于视锥体的位置进行剔除。那么如何通过投影矩阵获的那六个面呢? 相关参数:假设世界坐标系下点 p 的齐次坐标(X, Y, Z, W), 点 p 在规范化设备坐标系下映射点 p’(X’, Y’, Z’)。 世界坐标系到规范化设备坐标系: 世界坐标系下点 p,进过...
Cesium Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品。它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精度,渲染质量以及多平台,易用性上都有高质量的保证。 关于视频投影 视频投影其实就是在三维场景中,播放实时视频,现在做三维实时视频的例子很多,比如公安行业监控摄像头的实时投影播放,广告行业...
  Cesium中的视频投影是指将视频作为一种物体材质,实现在物体上播放视频的效果。这个功能在Cesium早期版本中就支持了,在Code Example中有一个示例。今天就来分析一下其内部实现原理。 1. 添加视频投影及效果   示例中添加视频投影的代码分为两部分,第一步是添加div控件,控件负责视频播放、暂停等任务,代码如下: <video id="trailer" muted ...
function addVideo() { let videoElement = document.getElementById('daolu'); videoElement.play(); //开始播放 viewer.showRenderLoopErrors = false; 之前仿照火星的视频投射实现类似的功能,今天又用视锥网方式实现了一版 ,类似可视域的方式将视频纹理贴上去感觉效果一般,没有火星的那种方式效果好。 插件上传github有需要的自行提取,直接引用即可: 传送门 中间有事,耽搁了好久才更新。这一篇要做的是视频投影,也有视频投射、视频融合之类的叫法。本篇内容比较简单,仅停留在出效果的层面,所以想要高级应用的小盆友可别扔我鸡蛋啊,待我日后好好研究一番再来补上。要知道,要做到视频与模型真正的融合可不是一件简单的事情,不夸张地说,申请个专利都是没问题的。现在嘛,入门级实现,先讲究看着吧。 开篇就说了,咱们这篇是入门级的,所以原理非常简单,用一句话来描述,就是给一个Geometry附上材质,然后贴到地图上。涉及到的API内容也比较少,Ma
随着信息时代的不断地发展和完善,对于地理信息服务、GIS技术、VR、可视化技术等技术的要求越来越高,特别是三维空间数据的真实性要求越来越苛刻,导致传统的二维GIS技术不能满足第三维方向上的集合位置信息、空间位置信息以及部分语义信息的要求,不能表达我们所要求的“真实世界”,因此迫切要求GIS从二维到三维的转换,三维GIS应运而生。随着计算机和网络技术的不断发展,Web3D技术和GIS结合形成的3DWebGIS成为GIS发展的一个重要方向。随着各大主流浏览器对WebGL的零插件,渲染效果好等优势和Cesium处理数据优势的支持增强,为3DWebGIS创造了新的发展机遇。 近年来,Cesium被学者较多地用于三维场景构建的研究和应用中,如朱栩逸等在分析Web服务的GIS框架设计基础上,研究基于Cesium的三维WebGIS开发流程[1];李俊金探讨了利用 Cesium技术实现数字城市的建模方法[2];马洪成等利用开源库Cesium实现了电网数据平台计算模型和数据挖掘结果的三维展示[3];乐世华等将Cesium应用于流域虚拟场景的搭建,取得了较好的应用效果
### 回答1: SuperMap iClient3D for Cesium是一款基于Cesium的三维地图开发框架,可以实现三维地图的可视化、数据叠加、空间分析等功能。它支持多种数据格式,包括SuperMap iServer发布的三维数据、KML、GeoJSON等。同时,它还提供了丰富的API和示例,方便开发者快速搭建三维地图应用。 ### 回答2: SuperMap iClient 3D for Cesium是一种基于WebGIS技术的3D地图开发工具,它采用了Cesium架构,可以帮助开发者快速构建3D地图应用。 SuperMap iClient 3D for Cesium的主要特点是多功能性和高效性。它不仅可以提供3D地图的可视化展示,还可以支持多种类型的数据发布和处理,包括矢量数据、栅格数据、多媒体数据和实时数据等。此外,该工具还具有强大的分析功能,可以进行三维空间分析、场景漫游、数据可视化、交互式查询、可视化制图等操作。 SuperMap iClient 3D for Cesium的应用非常广泛,不仅可以用于地理信息系统领域,还可以应用于城市规划、房地产、旅游、室内设计等多个领域。例如,开发者可以利用该工具构建三维地图导航系统,帮助用户准确快速地找到目的地;也可以利用该工具开发3D房产展示系统,帮助用户更好地了解房子的结构和布局。 总的来说,SuperMap iClient 3D for Cesium是一种功能强大、易于集成和扩展的3D地图开发工具,它可以大大加快开发者的开发进度,提高应用的效率和质量。 ### 回答3: SuperMap iClient3D for Cesium是一款专业的三维地图开发SDK,集成了SuperMap的强大GIS技术和Cesium的优秀渲染引擎。用户可以使用iClient3D for Cesium构建并呈现出丰富的三维地图应用,实现地理信息可视化、分析及决策支持等目标。 从功能上看,iClient3D for Cesium提供了多种数据格式支持,包括常用的地图瓦片、影像、矢量、DEM、模型等数据类型,同时也支持三维分析、实时监测和动态定位等功能,可实现真实度、全景度和多维度的三维视觉。 此外,iClient3D for Cesium采用了WebGL技术,以浏览器为载体,支持多个平台和多种设备,具有良好的通用性和易用性。基于WebGIS的特性,用户也可以实现数据共享、多人协作等地理信息服务。 总的来说,iClient3D for Cesium为用户提供了一种新的思路和技术手段,让其能够快速、高效地开发出各种具有实用价值的三维地图应用,也为GIS技术的发展提供了更加广阔的空间。
Matrix_CS: 这段代码在不算复杂,主要是两部分,分别是Unet网络结构和训练流程。 Unet网络主要关注class UNet类里面的forward函数,里面有Unet完整的图像处理流程,和Unet网络结构是对应的。 训练流程里面可以关注train函数,主要代码是下面的 train_output_mask = model(train_img) train_loss = criterion(train_output_mask, train_mask) train_loss.backward() optimizer.step()