Cesium奇幻之旅(三)

分层单体化教程

一、分层单体化的实现思路

在Cesium中实现倾斜摄影的动态单体化比较简单,只需要获取对应的矢量面数据后贴附在模型上即可,对数据的要求不是很复杂,代码中是通过Polygon对象的classificationType属性实现的。但是分层单体化相对来说可能稍微复杂一点,需要代码结合数据生产来实现。在Cesium中要实现分层单体化的效果,可以通过多面体贴模型的方式来实现。

Cesium提供了ClassificationPrimitive类来实现体对象贴模型的功能,所以我们要做的就是将数据按照需要的格式处理好,结合代码实现即可。因为房屋的边不是固定的,所以我们选择多面体对象来实现分层单体化功能,Cesium可以通过面对象拉伸成为一个多边体,面对象拉伸需要有面的坐标串和拉伸高度,面的坐标串就是房屋面的坐标串,拉伸高度即为楼层的高度。所以我们需要采集房屋面的坐标串、每一层的层高、每层的底部高度和顶部高度。

二、数据生产

使用正射影像进行房屋面的单体化(注意坐标系应为4326)(单体化的功能比较简单就不详细说明)。矢量化结果如下图
在这里插入图片描述
画完矢量面后我们就有了房屋面的坐标串数据,但是我们要实现分层,所以对于每个面我们需要复制多份(即每个面作为一层的数据)。然后需要采集每层的底部高度、楼层高度、顶部高度,我们在属性表中新建一些字段存储这些值,当然可以根据需要采集其他的属性信息。基本信息如下图

在这里插入图片描述

然后我们需要借助桌面工具获取楼层的底部高度,楼层高度(楼层顶部高度可以计算出来)
在这里插入图片描述
在这里插入图片描述
采集这些数据时需要注意的是有些楼栋第一层的高度和其他楼层高度不一样,所以需要细心点,如果对于数据精度要求不是很高保留一两位小数即可。

至此,我们就有了每栋楼的数据(数据采集肯定是一个工作量比较大的工作,我这里只说整个流程),这些数据包括每个楼层的矢量数据和属性数据,有楼层编号、每层底部高程、每层楼高、每层顶部高度、每层编号等等。

三、代码实现

数据制作好之后我们将其导出为shp文件(导出编码设为UTF-8),传到服务器发布成数据服务(我使用的是geoserver,也可以使用其他GIS服务器原理都一样)。

代码实现思路就是注册场景鼠标点击事件,获取点击处的经纬度坐标,去GIS服务器做空间查询,查询出该处的楼栋信息。因为我们每层数据都是一个面,所以查询结果是这栋楼有几层就有几个面对象。

我们遍历查询的数据,创建贴模型的对象,点击贴模型对象后高亮显示该对象并展示其属性信息。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值