当前位置: 首页 > backend >正文

在Cesium中通过geojson和3d tiles分别加载楼宇白膜

一、geojson渲染楼宇白膜(不推荐)

如果你没有3dtiles文件来加载白膜,只有geojson加载白膜可以通过GeoJsonDataSource来加载白膜,json格式如下。

实现代码如下

<template><div id="cesium_container"></div>
</template><script setup>
import * as Cesium from 'cesium'
import {Ion,Viewer } from 'cesium'
import 'cesium/Build/Cesium/Widgets/widgets.css'
import buildList from '../../assets/json/xintai.json'
let viewer = null
let build3Dtileset = nullonMounted(()=>{initMap()
})
const initMap = async ()=>{Ion.defaultAccessToken = '你注册的cesium的token'viewer = new Viewer('cesium_container',{})initBuild(buildList)
}
const initBuild = (list) =>{let data = []list.features.forEach(item=>{let obj = {"type":"Feature","geometry":{"type":"Polygon","coordinates":item.geometry.coordinates[0]},"properties":item.properties}data.push(obj)})let geoJson = {"type": "FeatureCollection","features": data}Cesium.GeoJsonDataSource.load(geoJson).then(dataSource => {viewer.dataSources.add(dataSource);console.log(dataSource, '==================================');dataSource.entities.values.forEach(function (entity) {entity.polygon.extrudedHeight = 100;  // 设置多边形高度entity.polygon.outline = false;  // 关闭边框entity.polygon.material =new Cesium.Color(83 / 255, 140 / 255, 245 / 255, 1);});viewer.zoomTo(dataSource); // 让视角适应数据});}</script><style lang="less" scoped>
#cesium_container{width: 100%;height: 100%;
}
</style>

 实现效果

可以看到以上的方法实现了在cesium中绘制白膜;但是在cesium中不推荐这种方式,这种加载少量的白膜可以实现效果,但是数据量大起来后,会导致卡顿,性能上会出大问题,所以不推荐这种加载方式,在cesium中推荐Cesium3DTileset来加载3d tiles文件来渲染白膜,也就是方法二。

二、Cesium3DTileset渲染楼宇白膜(推荐)

cesium文档:

http://cesium.xin/cesium/cn/Documentation1.62/Cesium3DTileset.html?classFilter=Cesium3DTileset

Cesium3DTileset可以渲染大量的3d模型,并且对性能上有一定的优化

3dtiles文件目录结构如下

Cesium3DTileset用法也非常简单,只需要一个url去引入3dtiles主入口文件tileset.json即可。

具体代码如下

<template><div id="cesium_container"></div>
</template><script setup>
import * as Cesium from 'cesium'
import {Ion,Viewer } from 'cesium'
import 'cesium/Build/Cesium/Widgets/widgets.css'let viewer = null
let build3Dtileset = nullonMounted(()=>{initMap()
})
const initMap = async ()=>{Ion.defaultAccessToken = 'cesium的token'viewer = new Viewer('cesium_container',{})init3DBuild()
}
const init3DBuild = async () =>{const url = '/tiles2/tileset.json';const tilesetUrl = await Cesium.Cesium3DTileset.fromUrl(url);console.log(tilesetUrl, 'tilesetUrl');build3Dtileset = viewer.scene.primitives.add(tilesetUrl);build3Dtileset.style = new Cesium.Cesium3DTileStyle({color: {conditions: [['true', "color('rgb(51, 153, 255)',1)"]]},});viewer.flyTo(build3Dtileset);
}</script><style lang="less" scoped>
#cesium_container{width: 100%;height: 100%;
}
</style>

实现效果如下

Cesium3DTileset渲染的大规模白膜,页面也不是很卡顿,性能要比方法一好很多。

http://www.xdnf.cn/news/10339.html

相关文章:

  • 【深度学习】线性因子模型:数据降维与结构解析的数学透镜
  • 深入探讨redis:主从复制
  • 【鱼皮-用户中心】笔记
  • 优化的两极:凸优化与非凸优化的理论、应用与挑战
  • 雪花算法的实际应用
  • 6个月Python学习计划 Day 10 - 模块与标准库入门
  • 表单校验代码和树形结构值传递错误解决
  • 【Qt】Bug:findChildren找不到控件
  • 【C语言练习】074. 理解C语言中的多线程编程
  • MySQL 8.0:解析
  • Github 热点 Github 热点 Syncthing:多台设备,持续同步文件,安全同步,隐私无忧!
  • 79. 单词搜索-极致优化,可行性剪枝和顺序剪枝
  • LeetCode 1010. 总持续时间可被 60 整除的歌曲
  • leetcode hot100刷题日记——30.两数之和
  • 那些常用的运维工具
  • LeetCode 1524. 和为奇数的子数组数目
  • 【题解-洛谷】P9422 [蓝桥杯 2023 国 B] 合并数列
  • Flask-Login使用示例
  • R语言错误处理方法大全
  • Python 从入门到精通视频下载
  • Nacos实战——动态 IP 黑名单过滤
  • 【LLM】FastAPI入门教程
  • 无公网ip远程桌面连接不了怎么办?内网计算机让外网访问方法和问题分析
  • 2. 手写数字预测 gui版
  • VMvare 创建虚拟机 安装CentOS7,配置静态IP地址
  • Kubernetes架构与核心概念深度解析:Pod、Service与RBAC的奥秘
  • 算法训练第四天
  • 企业上线ESOP(电子标准操作程序)电子作业指导书,实现车间无纸化,是数字化转型的重要一步
  • ZC-OFDM雷达通信一体化减小PAPR——部分传输序列法(PTS)
  • 利用python工具you-get下载网页的视频文件