Cesium项目实战(3)-城市建筑三维白膜数据的制作与效果展示
作为城市的主体,如果能站在上帝视角,直观的浏览这个城市的建筑面貌,或许这是他对这个城市最直接的感受,往往记住一个城市最直接的就是记住了它的标志性建筑,比如:北京天安门、水立方,上海东方明珠,广州小蛮腰塔等等。那么,在这篇文章里,我们用最简单的,通过还原建筑的方式来将整个城市从二维平面转换为三维立体。
在本篇“城市建筑三维白膜数据的制作与效果展示”中我们主要包括如下几个可视化内容。
- 城市建筑数据的获取
- 城市建筑数据的三维白膜建模
- 城市建筑模型的三维可视化
1. 城市建筑数据的获取
城市建筑数据,指的是一个城市的建筑平面轮廓图,跟某栋建筑的详规、控规图纸不一样,而是城市范围内所有建筑的轮廓,轮廓可以简单的就一个矩形,或者多边形封闭区域,表达的是在这个区域内有栋建筑,不需要详细的信息。
正常途径的话,数据更新最快,也最准确的,当然归属规划、国土相关部门了,但是这类数据往往很难拿到,如果有可能的话,也尽量从官方获取数据。
当然我们如果仅仅只是想做一些研究性的课题,或者其他技术交流、实验性质的项目的话,这个时候,我们对于数据的时效性、准确性就没那么高了,可以在网上下载免费的数据下载器工具软件,或者付费购买一些公司、大佬们写的下载软件,当然这个购买的费用也不贵,可以终生适用,还可以得到免费的升级维护服务。
当然,也有最简单的方式,就是通过一些渠道,QQ群、微信群、论坛、博客啥的,可以使用网友们共享的数据,当然这个质量就没有什么保障了,需要你懂一些基础数据的编辑,如ArcGIS、SuperMap软件的操作了。(本篇文章所涉及到的北京市建筑轮廓数据就是这种聚到获取的,格式为WGS84的shp矢量数据,仅作技术研究用途)
最后,数据获取方式千万条,但是一定不能侵权,做技术研究、做课题的一定要保管好自己的数据,不要商用,商用的话,最好使用授权的数据。免得以后引起纷争,毕竟GIS圈内的数据保密政策还是蛮厉害的。
2. 城市建筑数据的三维白膜建模
白膜建模,应该属于三维建模领域里面,最原始也是最简单的建模了,模型体现的就是一个一个白色的盒子,方式就是吧建筑轮廓直接按照指定的高度拉伸即可。
城市级别的建筑体量是不能靠一个一个手动在软件中建模的,必须得自动完成。
一、纯代码绘制
这种方式处理起来也很简单,根据建筑轮廓,可以绘制多边形、墙体等Entity对象,或者PolygonGeometry、WallGeometry等Primitive对象。
二、建模软件自动建模
这种方式需要建模软件能够根据属性参数进行自动化建模,同时,还需要软件数据格式支持(CAD/SHP/GEOJSON/KML等),三维建模数据导出格式支持(OBJ/DAE/3DTILES等)。
三、SHP -> 3DTILES 建模
这种方式是最简单的,无需其他的操作,直接一步到位,但是需要有几个前提条件。
1、SHP数据格式最好是WGS84坐标系。
2、属性字段中有数值性的高度属性。
3、文件编码最好是UTF-8。
本文采用的是第三种方案,是通过 北京西部世界科技有限公司 公司团队开发的 CesiumLab软件 制作的。
3. 城市建筑模型的三维可视化
数据做好了,接下来就在Cesium中加载数据吧
首先,我们需要把CesiumLab处理好的数据放入一个静态资源服务器(Nginx、Tomcat等)中,当然也可以直接使用CesiumLab自己的服务。得到诸如此类的一个服务地址:“http://localhost:90/beijing_building/tileset.json”。
接下来,直接在cesium中使用Cesium3DTileset接口加载
就单单这么看起来,就已经很震撼了。接下来,我们通过3D Tiles Styling language 3D瓦片样式语言(我自己翻译的) 配合 Cesium3DTileStyle 接口来做一些简单的可视化效果。
1. 默认样式
2. 纯色
3. 半透明
4. 根据建筑高度分类
5. 根据经度分类
6. 根据纬度分类
详细代码请参考 Cesium项目实战小专栏
注:其中4.5.6点样式中的height、lng、lat是SHP文件处理前需要预先编辑好的字段,当然你也可以自己预先定义好很多可供专题显示的字段,用于更加丰富的可视化效果