快速开发一个三维自动建模程序:自动建模+后端服务+3D Tiles

cesiumlab中shp转3dtiles白模效果一 阅读详情

开发一个自己的三维建模工具

坐标成都,疫情+高温,出不了门,闲来无聊,给大家分享一个简单的自动化建模实现方案。


要求:通过后端服务实现,输出3DTiles切片


一、技术栈分析

目前,GIS行业及相关行业(数字孪生、元宇宙等)进入到当今时代赋予的红利期。不少商业公司正在不断研发和发布自己的三维软件产品,传统的GIS平台软件大厂(易智瑞、超图等)也在三维可视化及应用领域不断发力,包括传统测绘行业也在向实景三维中国转型。

从GISer人的眼中来看,支撑数字孪生和元宇宙应用的技术点无非是:

3D数据模型(底层数据结构&存储逻辑)+三维建模(数据工程&建模技术)+三维应用(软件开发&项目价值)

今天就给大家分享一个Cesium开源技术栈的一环(三维自动建模),通过调用在线建模服务(输入模型底面),实时建模,返回模型切片地址(3dTiles)。


二、技术实现

1、搭建Nodejs+EXpress后端服务环境

需要windows开发环境、Windows服务器环境,依赖包如下:
在这里插入图片描述
如果需要mac、linux环境可以自行编译Cesium3DTilesConverter源码

2、开发上传接口

上传的参数:geojson数据集。84坐标系。可以是Cesium前端绘制的Geojson多边形集合。

 var geojsons = {
        "type": "FeatureCollection",
        "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
        "features": [……]
      };

3、后端Geojson转SHP

 引入第三方包:geojson2shp,进行转换操作。
let geojson_data = JSON.parse(data);  //前端上传个geojson数据集对象
    const options = {
        layer: filename, //图层名称
        targetCrs: 4326
    }
    //geojson转shp
    convert(geojson_data, shpZip, options);
 生成的shp默认是压缩包,需要进行加压缩操作。
 let zip = new admZip(shpZip);
            zip.extractAllTo(shpPath + filename, true);

4、后端SHP转3DTiles

SHP转3DTiles。
首先在github上直接下载的Cesium3DTilesConverter.exe可执行程序,放到Nodejs运行目录下
代码执行转换操作

 // console.log("文件解压完成。");            
 let cmd = converterPath + `\Converter.exe --format gdal --input ` + shpPath + filename + ` --output ` + outputPath + filename + ` --field height --layer ` + filename;
 exec(cmd, function (error, stdout, stderr) {
     if (error) {
         console.error(error);
     }
     else {
         //记录前端传过来的参数
         var str = JSON.stringify(parm);
         fs.writeFile(outputPath + filename + "/parm.json", str, function (err, data) {
             if (err) {                          
                 console.error(err);
             }                       
         });
         // console.log("success");
         res.send({'result': httserver + '/' + filename + '/tileset.json' });//返回最终处理结果 3dtiles切片地址
     }
 });

5、开发dxf转geojson接口

针对复杂的应用需求,通过前端绘制模型底面多边形的方式不太友好,我们可以选择手动处理得到模型底面的办法。比如根据复杂的建筑设计或装修图纸,提取/绘制房屋底面CAD(转成84坐标),输出dxf文件。

//首先将dxf文件上传到nodejs运行目录 outputPath 下
if (filename.toLowerCase().indexOf('.dxf') > -1) {
 const outputPath = path.join(__dirname, 'upload/');
 const content = fs.readFileSync(outputPath + filename, 'utf-8')
 new DxfParser().parseContent(content)
     .then(result => {
         let geojson = toGeojson(result);
         //cad闭合曲线转成面
         if (geojson && geojson.features) {
             for (let index = 0; index < geojson.features.length; index++) {
                 const feature = geojson.features[index];
                 if (feature && feature.geometry && feature.geometry.type == 'LineString') {
                     if (feature.geometry.coordinates.length > 2) {
                         if (feature.geometry.coordinates[0].toString() == feature.geometry.coordinates[feature.geometry.coordinates.length - 1].toString()) {
                             feature.geometry.type = 'Polygon';
                             feature.geometry.coordinates = [feature.geometry.coordinates];
                         } else {
                             if (polyline2polygon == 'true') {  //传入参数,是否将线转成面
                                 feature.geometry.type = 'Polygon';
                                 feature.geometry.coordinates[feature.geometry.coordinates.length] = feature.geometry.coordinates[0];
                                 feature.geometry.coordinates = [feature.geometry.coordinates];
                             }
                         }
                     }
                 }

             }
         }
         
         //向前端返回dxf转geojson的结果,最好在前端做数据质检和业务逻辑控制
         res.send({
             status: true,
             message: 'File is uploaded',
             data: {
                 name: filename,
                 mimetype: dxffile.mimetype,
                 size: dxffile.size
             },
             geojson: geojson
         });
     })
}

三、示例效果

在这里插入图片描述
在这里插入图片描述


总结

对于中小型的项目应用(三维白模),我们分享这个方案是适合的。如果要进一步提高要求,可以通过自定义Cesium的渲染着色器来实现三维模型的高级可视化,或者改写3DTiles转换工具的代码实现纹理贴图。

这里提出两个更高阶的技术应用,欢迎交流讨论:

1、BIM模型管理的难点:轻量化、分片、按需加载、模型体量太多等
基于Cesium的应用场景:可选择在revit下进行二次开发(数据质检+自动轻量化+ 动态导出模型),动态转换3DTiles切片

2、三维管线自动建模与动态更新
区别于部分GIS平台软件的动态建模路线(本质上也是采用了软件提供的三维对象进行实时渲染)。另一种方式就是事先生成好模型,再加载到GIS引擎或游戏引擎进行渲染。针对Cesium应用,限定三维管线更新频率,可以在后台实时创建三维模型fbx(可借助blender强大的python能力,根据二维管线生成三维管线),动态转换成3DTiles。

更多资讯、合作交流、技术研讨,请关注作者微信:hebinabianyan

Cesium入门10 - 3D Tiles Cesium入门10 - 3D Tiles Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 我们团队有时把Cesium描述成一个真实世界数据的3D游戏引擎。然而,使用真实世界的数据比使用典型的视频游戏数据资料要困难得多,因为真实数据可能是难以置信的高分辨率,并且需要精确的可视化。幸运的是,Cesium 与开源社... 阅读详情

相关推荐

开源项目Cesium3DTilesConverter的OSGBConvert.cpp代码分析

OSGBConvert::convertGLB();

bcbobo21cn的专栏 764

shap数据转3Dtiles格式

本资源为专业的shapefile文件转3Dtiles格式数据转换工具: 1)支持跨平台,转换速度快 2)支持添加设置材质、纹理贴图等功能 3)支持生成属性文件(点击模型显示相关属性) 4)支持静态调用 5)附带源代码

Cesium 3dtileConvert工具,可把osgb转换为3dtiles,类似cesiumlab的功能

Cesium 3dtileConvert工具

智慧城市:Cesium for UE4 基础入门

基于Cesium for UE4插件进行讲解,可导入3dtiles,并进行环境配置,场景配置,基础测量,在线绘制等功能。适合Cesium或者UE4初学者入门。不需要C++基础知识,有任意语言开发经验即可。这款教程是在2021年3月30日Cesium上架后讲述的课程,版本是最老的版本,但总体思想是没变的,大家有问题提前联系,介意版本问题的不要买,不介意的请加我,我会跟你说新版本怎么用。后续我会继续更新UE5版本的Cesium,感谢各位朋友。

cesium 3dtile的处理以及加载

如需3dtiles文件,请私聊我哦,或者vx Kii-MichstaBe 加我。然后启动nginx 并运行前端项目输入localhost:8081 能打开就代表成功。由于测试的3dtiles位置错误,我也没有调整,上面的。打开nginx/conf/nginx.conf并修改。以上就是加载cesium加载3dtiles的流程。把转好的3dtiles放到nginx的根目录下。方法是调整3dtiles位置的方法。如有错误处,请指正~~

weixin_45617978的博客 2527

快速实现管线建模3D Tiles自动化转换

快速实现管线建模3D Tiles自动化转换 【下载地址】FME2022管线建模自动生成3DTiles资源下载 本仓库提供了一个资源文件,用于使用 FME 2022 进行管线建模,并自动生成 3D Tiles。该资源文件包含了必要的配置和脚本,帮助用户快速实现管线建模3D Tiles自动化转换 ...

gitblog_09723的博客 1069

Node.js v16.2.0(Current)发布深度解读:PromiseHook 新架构、Windows 时区支持与 import.meta.resolve URL 增强

> 本篇技术指南以 nodejs.org 官方仓库中的 [Node.js v16.2.0 发布公告](https://link.gitcode.com/i/fe55a6d1c24a793f2f2c56258a2f8940) 为骨架,逐项解析该版本的五项 SEMVER-MINOR 新特性与全部关键提交,并结合当前仓库的发布博文生成脚本(`scripts/release-post`)、博客数据管线(`

gitblog_00430的博客 888

如何快速实现OBJ到3D Tiles的免费转换?objTo3d-tiles终极指南

想要在Web上展示3D模型,但被复杂的格式转换困扰吗?objTo3d-tiles为你提供了一站式解决方案!这个免费开源工具能够将常见的OBJ格式3D模型快速转换为Cesium支持的3D Tiles标准格式,让你的3D项目在浏览器中流畅运行。 ## 为什么选择objTo3d-tiles?三大理由让你无法拒绝 在Web 3D开发中,模型格式转换往往是最大的技术障碍。传统工具要么操作复杂,要么性能低

gitblog_00091的博客 1074

如何快速3D模型转换为Web可用的3D Tiles格式?objTo3d-tiles终极指南

想要在Web上展示精美的3D模型吗?objTo3d-tiles是您的终极解决方案!这个强大的Node.js工具能够将常见的OBJ模型文件快速转换为3D Tiles格式,让您的3D模型在Cesium等WebGIS平台中流畅运行。无论您是3D建模师、Web开发者还是GIS专业人士,本指南都将帮助您掌握这个实用的3D模型转换工具。 ## 🚀 快速入门:安装与配置 首先确保您的系统已安装Node.j

gitblog_00027的博客 1016

3D Tiles Tools 开发教程

3D Tiles Tools 开发教程 1. 项目介绍 3D Tiles Tools 是一个开源项目,由 Analytical Graphics Inc. 维护。该项目旨在提供一套工具,用于处理和验证 3D Tiles 数据格式。3D Tiles 是一种用于高效传输和渲染大量三维地理空间数据的标准格式,广泛应用于Web地图和虚拟现实等领域。 2. 项目快速启动 要快速启动并使用 3D Tiles ...

gitblog_00775的博客 645

cesium的3d-tiles转换工具

cesium的3d-tiles转换工具,将 .obj 模型转换为 3D Tiles的格式,内附使用文档

终极指南:objTo3d-tiles 快速将OBJ模型转换为3D瓦片

objTo3d-tiles是一个强大的Node.js工具,专门用于将OBJ模型文件转换为3D Tiles格式。这个工具让3D地理信息系统开发变得简单高效,支持批量转换和自定义配置,是构建大规模3D场景的必备神器!🚀 ## 快速开始:5分钟上手 ### 环境准备 首先确保你的系统已经安装了Node.js环境,然后通过简单的命令安装objTo3d-tiles: ```bash npm inst

gitblog_00497的博客 1100

LangChain4j 接入 Ollama 文生图:OllamaImageModel 使用与参数详解

Ollama 提供了实验性的图像生成能力,而 LangChain4j 通过 `OllamaImageModel` 将其封装为标准化的 `ImageModel` 接口,让 Java 开发者可以在 JVM 上以统一 API 完成文生图(text-to-image)任务。本文以 [docs/docs/integrations/image-models/ollama.md](https://link.gi

gitblog_00313的博客 1069

如何快速将OBJ模型转换为3D Tiles?objTo3d-tiles工具完全指南

你是否在为如何在Cesium等3D GIS平台中高效加载OBJ模型而烦恼?传统OBJ格式在大规模三维场景中性能低下,而3D Tiles技术正是解决这一问题的关键。objTo3d-tiles是一个基于Node.js的强大工具,能够将OBJ模型文件转换为3D Tiles格式,让你的三维模型在Cesium中流畅运行。 ## 🎯 问题:为什么需要将OBJ转换为3D Tiles? 在三维地理信息系统开

gitblog_00527的博客 729

如何快速将OBJ模型转换为3D Tiles?objTo3d-tiles完全指南

你是否曾为无法在Cesium等3D地理信息系统中高效加载OBJ模型而烦恼?传统的OBJ格式虽然通用,但在大规模场景渲染中性能堪忧。现在,objTo3d-tiles工具为你提供了完美的解决方案——将OBJ模型快速转换为3D Tiles格式,实现高效的空间数据可视化。 ## 🚀 项目简介:从OBJ到3D Tiles的桥梁 objTo3d-tiles是一款基于Node.js的命令行工具,专门用于将

gitblog_00692的博客 936

探索 Cesium 的未来:3D Tiles Next 标准解析

是由 Cesium 和其他合作伙伴共同推动的全新 3D 空间数据标准,是对传统 3D Tiles 格式的升级和扩展。它旨在支持更高效的渲染、更丰富的应用场景以及更强的数据可扩展性。通过对 3D Tiles 的性能优化和灵活性增强,3DTiles Next 将大大提升大规模三维数据的存储、传输与渲染效率,满足未来更为复杂的空间数据需求。3D Tiles Next 标准的出现标志着 Cesium 在大规模三维数据渲染领域迈出了重要一步。

ismartcube的博客 1872

如何快速实现OBJ到3D Tiles的无缝转换?开源工具objTo3d-tiles的终极指南

**objTo3d-tiles** 是一款免费开源的高效3D模型转换工具,能够将OBJ格式文件快速转换为Cesium.js支持的3D Tiles标准格式(如b3dm、i3dm),帮助开发者轻松构建高性能的Web 3D应用。无论是虚拟现实项目、地理信息系统还是在线游戏开发,这款工具都能让3D模型的Web集成变得简单高效。 ## 为什么选择objTo3d-tiles?3大核心优势解析 在Web 3...

gitblog_00923的博客 999

3D Tiles 格式详解

3D Tiles 技术指南摘要 3D Tiles 是 Cesium 开发的开放标准,用于高效流式传输和渲染大规模 3D 地理空间数据。本文档详细解析了 3D Tiles 的核心技术规范,包括: 层次化瓦片结构:通过树形组织和 LOD 机制实现渐进式加载 关键文件格式:tileset.json 定义数据集元信息,tile.json 描述瓦片属性 空间索引机制:支持 region/box/sphere 三种边界体积类型 渲染优化:基于几何误差的 LOD 选择和视锥剔除 实际应用:以德国法兰克福数据集为例展示文件

罗朝辉(飘飘白云) 3379
上一篇: 赋能智慧城市“规、建、运、管、服”——Umbrameta CIM平台探索“CIM+”应用超市
下一篇: 三维管线程序化智能建模
何必那边眼
博客等级 码龄11年 53粉丝 7原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值